Henry de Valence
f2c7421ce2
cln16sidh: implement secret point generation
7 years ago
Henry de Valence
de4cd5d7ff
cln16sidh: add negation operators
7 years ago
Henry de Valence
cb7a285ff7
cln16sidh: add fromAffine constructors for points
7 years ago
Henry de Valence
545238d4fc
cln16sidh: implement y-coordinate recovery
7 years ago
Henry de Valence
071d05068a
cln16sidh: test prime field scalar mult against torsion points
7 years ago
Henry de Valence
8ff5a111cd
cln16sidh: add E(F_p) functionality
7 years ago
Henry de Valence
2c10aa9d31
cln16sidh: rename ExtensionFieldElementConditionalSwap
7 years ago
Henry de Valence
32eed216a7
cln16sidh: rename jInvariant to JInvariant
7 years ago
Henry de Valence
70aac4706c
cln16sidh: add ladder benchmarks
7 years ago
Henry de Valence
d15c2238a1
cln16sidh: add LICENSE text
7 years ago
Henry de Valence
8045da3721
cln16sidh: better isogeny names
7 years ago
Henry de Valence
691d3ba3d2
cln16sidh: implement 4-isogenies, refactor 3-isogenies
7 years ago
Henry de Valence
cac3df5258
cln16sidh: add 3-isogeny functions
Currently these aren't tested; Sage gets unhappy working with isogenies of
large elliptic curves. (Also, the previous test vectors were generated just to
test curve arithmetic, so they're not in the correct isogeny class and should
be changed...)
7 years ago
Henry de Valence
e420fc012a
cln16sidh: add three-point ladder
7 years ago
Henry de Valence
48826b1b20
cln16sidh: fix Sage variables
7 years ago
Henry de Valence
9cbec30220
cln16sidh: add a CachedCurveParameters struct
7 years ago
Henry de Valence
5887a8113e
cln16sidh: fix whitespace in test vectors
7 years ago
Henry de Valence
309448e8cf
cln16sidh: add Montgomery ladder scalar multiplication
7 years ago
Henry de Valence
324f240daa
cln16sidh: add conditional swaps
7 years ago
Henry de Valence
15dbd8c7ee
cln16sidh: add Zero, One constructors to ExtensionFieldElement
7 years ago
Henry de Valence
18fd617020
cln16sidh: add 4-way batch inversion
7 years ago
Henry de Valence
f4c5eaf53c
cln16sidh: compute the j-invariant
7 years ago
Henry de Valence
c26f169fae
cln16sidh: add point addition benchmark
7 years ago
Henry de Valence
72e0bb78a7
cln16sidh: initial Montgomery curve functionality
This contains Montgomery (pseudo)addition, doubling, and tripling.
The formulas are slightly amended from the usual Montgomery arithmetic to allow
projective curve coefficients.
7 years ago
Henry de Valence
240f52d0f1
cln16sidh: add big.Int conversion for raw fp751Elements
7 years ago
Henry de Valence
c20610bf6b
cln16sidh: benchmark inversion and squaring
7 years ago
Henry de Valence
719c07b83b
cln16sidh: add conditional assignment code
7 years ago
Henry de Valence
50aa855b53
cln16sidh: clarify doc for P34
7 years ago
Henry de Valence
1ae37f11fd
cln16sidh: add uint64 constructor for PrimeFieldElements
7 years ago
Henry de Valence
11d48b0d4d
cln16sidh: make FieldElement more like Go's big.Int API
Having operators return pointers to the recievers makes it possible to chain
operations.
7 years ago
Henry de Valence
207046f6f8
cln16sidh: add note on multiplication counts for p34 chain
7 years ago
Henry de Valence
1e9183798a
cln16sidh: add prime field square roots
7 years ago
Henry de Valence
55fd3a1b5b
cln16sidh: add extension field inversion
7 years ago
Henry de Valence
af7d9758a8
cln16sidh: add PrimeFieldElement inversion
7 years ago
Henry de Valence
dd4c5788b3
cln16sidh: add exponentiation chain for x^((p-3)/4)
The implementation is a basic sliding-window with a series of hardcoded values
for how many times to square and what to multiply.
7 years ago
Henry de Valence
2fa8959d8f
cln16sidh: remove snake_case function name
7 years ago
Henry de Valence
82e9083842
cln16sidh: add benchmarks for all field ops
7 years ago
Henry de Valence
47240368a0
cln16sidh: add prime field squaring function
7 years ago
Henry de Valence
63e467d02b
cln16sidh: add extension field squaring; fix broken multiplication
7 years ago
Henry de Valence
652c53a41e
cln16sidh: Refactor field types and tests.
Split the field arithmetic code into three types:
- ExtensionFieldElement :: represents an element of F_{p^2}
- PrimeFieldElement :: represents an element of F_{p}
- fp751Element :: internal type holding an element of F_{p}
The difference between PrimeFieldElement and fp751Element types is that the
PrimeFieldElement assigns a particular interpretation (Montgomery form) to its
data, while the fp751Element doesn't.
7 years ago
Henry de Valence
d142194e06
cln16sidh: make FieldElement internals private
7 years ago
Henry de Valence
dd5e786467
cln16sidh: annotate extension field multiplication
7 years ago
Henry de Valence
7d70c2fc06
cln16sidh: add equality methods and refactor tests
7 years ago
Henry de Valence
a8b69521a0
cln16sidh: check that field multiplication is associative
7 years ago
Henry de Valence
e6e210c958
cln16sidh: use a common config for quick.Check
7 years ago
Henry de Valence
13a2726b3a
cln16sidh: add a strong reduction function
Add a function to perform "strong reduction": given an element in [0,2*p),
reduce to an element in [0,p) in constant time.
7 years ago
Henry de Valence
78ed6d36e0
cln16sidh: Add prototype of extension field multiplication
7 years ago
Henry de Valence
f75e7dabea
cln16sidh: Rename functions and add go:noescape
In order to have an assembly-implemented function operate on some data, it's
necessary to pass pointers to the data into the assembly implementation.
However, Go sees a pointer to some data passed into a function, and cannot
prove that the function does not keep pointers to that data. It therefore
assumes that the data escapes the local scope, and moves it onto the heap. To
avoid allocations in the hot path, instead mark the functions with
//go:noescape, which instructs the compiler that the inputs don't escape.
7 years ago
Henry de Valence
db1a5d4a73
cln16sidh: add bench for p-751 mult and reduce
7 years ago
Henry de Valence
a68cd2ec95
cln16sidh: do Montgomery multiplication in quick.Check
7 years ago