Commit Graph

101 Commits

Author SHA1 Message Date
Mamy André-Ratsimbazafy 236047767f
move mask to common 2020-02-18 13:01:14 +01:00
Mamy André-Ratsimbazafy ef5dd8345b
Allow compile-time bigint serialization + terminology: serialize -> export 2020-02-18 12:36:42 +01:00
Mamy André-Ratsimbazafy 9395febada
add octet string encode/decode (bigEndian raw int) 2020-02-18 11:54:36 +01:00
Mamy André-Ratsimbazafy d7d20c50b6
Add primitive for window-based modular exponentiation 2020-02-17 00:13:42 +01:00
Mamy André-Ratsimbazafy 285b6aad1a
Add cmov according to Milagro / hash_to_curve spec 2020-02-16 22:18:22 +01:00
Mamy André-Ratsimbazafy 6694023f16
Revert "Use cmov name instead of mux to be in line with IETF spec on Hash to curve and Verifiable Random Functions"
This reverts commit 56177c0cfe.
cmov will be the high-level name (similar to Milagro and Hash_to_curve draft) and mux will be the low-level one
2020-02-16 22:13:54 +01:00
Mamy André-Ratsimbazafy 56177c0cfe
Use cmov name instead of mux to be in line with IETF spec on Hash to curve and Verifiable Random Functions 2020-02-16 21:34:21 +01:00
Mamy André-Ratsimbazafy a1801e26a0
Now passing finite field test vs GMP 2020-02-16 19:08:19 +01:00
Mamy André-Ratsimbazafy c3d458e31b
Fix bug in redc: use montgomery mul for now. Add NIST P256 curve 2020-02-16 18:59:10 +01:00
Mamy André-Ratsimbazafy 7740bfbae4
print montgomery magics at compile-time 2020-02-16 12:32:34 +01:00
Mamy André-Ratsimbazafy f1430915fe
Add Mersenn 61 and 127 + debugging print 2020-02-16 12:03:01 +01:00
Mamy André-Ratsimbazafy 5620bbfaee
rename io tests ti io bigints 2020-02-16 11:29:27 +01:00
Mamy André-Ratsimbazafy 23ecb9a221
Add a (failing) test vs GMP for modular multiplication on BN254 curve Field 2020-02-16 02:20:08 +01:00
Mamy André-Ratsimbazafy 10346d83a4
Benchmark: BigInt -> Montgomery conversion:
- shlAddMod (with assembly division) is already 4x slower than Montgomery Multiplication based.
- constant-time division will be even slower
- use montgomery-multiplication based conversion
2020-02-16 01:43:17 +01:00
Mamy André-Ratsimbazafy bd1430157f
Add BLS12-381 curve:
- don't create "Mod" in curve parser: compile-time type incompatibility
- don't use "Mod" in const sections: compile-time type incompat  --> create a macro to get montgomery magics instead of a const array
2020-02-16 00:44:01 +01:00
Mamy André-Ratsimbazafy 05a2c6a34b
Properly precompute the montomery cosntants at compile-time and store them in ROM 2020-02-15 20:43:38 +01:00
Mamy André-Ratsimbazafy 4970572393
Introduce alternate conversion to Montgomery Residue based on Montgomery Multiplication 2020-02-15 19:22:40 +01:00
Mamy André-Ratsimbazafy e2333dce3c
Terminology nres -> mres, montgomeryResidue, montyResidue 2020-02-15 16:11:17 +01:00
Mamy André-Ratsimbazafy d3ad4acb3a
Do less in curve generator macro:
- no more monty magic "negInvModWord"
- no public "matchingBigInt"

Improve comment on Montgomery procedures
2020-02-15 13:56:13 +01:00
Mamy André-Ratsimbazafy 398b871c4f
Reorg the repo to introduce prepare for introducing the R² (mod p) magic constant 2020-02-15 13:13:01 +01:00
Mamy André-Ratsimbazafy eb94c3d1bc
Add Montgomery Modular Multiplication 2020-02-15 02:59:08 +01:00
Mamy André-Ratsimbazafy 301cf20195
Use Montgomery representation by default for Finite Field
- Fix montyMagic, modular inversion mode 2^2k was missing an iteration
- Fix test for buffer size in BigInt serialization
- Add UINT/Hex serialization for finite fields
- Montgomery conversion and redc
2020-02-15 00:26:40 +01:00
Mamy André-Ratsimbazafy f418e08746
For finite fields, we will use the Montgomery n-residue form by default 2020-02-14 13:36:34 +01:00
Mamy André-Ratsimbazafy f6b229b19c
Modular addition and substraction tests 2020-02-13 00:11:45 +01:00
Mamy André-Ratsimbazafy 4cac44358f
Update security level of BN254 to ~100bits 2020-02-13 00:11:04 +01:00
Mamy André-Ratsimbazafy 3eb22f8fc7
Fix curve parser, implement smoke test for finite field 2020-02-12 23:57:51 +01:00
Mamy André-Ratsimbazafy 6226d86726
Update IO: dumpHex -> toHex dumpRawUint -> serializeRawUint 2020-02-12 21:57:39 +01:00
Mamy André-Ratsimbazafy 343399ba1c
Remove TODO comment about bound checking, UncheckedArray in the raw API are not bound checked 2020-02-12 00:33:12 +01:00
Mamy André-Ratsimbazafy 89fce3b1c4
Wrap tests in main. Fixes C codegen bug due to templates invocation on global variable in test_primitives 2020-02-12 00:25:48 +01:00
Mamy André-Ratsimbazafy fe59efb8d8
reorganize the repo 2020-02-12 00:20:31 +01:00
Mamy André-Ratsimbazafy 28c9c472b3
Fix generated code duplication due to templates 2020-02-11 14:28:21 +01:00
Mamy André-Ratsimbazafy 2a438653a8
Don't emit useless inline C functions 2020-02-11 12:42:24 +01:00
Mamy André-Ratsimbazafy 24b0477ad7
Typo when testing for "negative" bigint, now passing testing vs GMP 2020-02-10 23:56:57 +01:00
Mamy André-Ratsimbazafy b53f203e30
Fix raw uint serialization and start testing against GMP for 2000+bits bigints 2020-02-10 23:09:32 +01:00
Mamy André-Ratsimbazafy 8d160189d1
Fix extended prec multiplication carry. Passing modulo tests against medium BigInt (192~256 bits) 2020-02-10 22:19:47 +01:00
Mamy André-Ratsimbazafy 73b71a184c
Fix off-by-one copy, pass small bigints modulo tests 2020-02-10 19:57:35 +01:00
Mamy André-Ratsimbazafy b689223cf5
Refactoring, optimize code-size: use type-erased views to avoid monomorphization of compute kernels 2020-02-10 18:16:34 +01:00
Mamy André-Ratsimbazafy ade919b003
Fix carry and modulus offset in bigint 2020-02-10 02:58:37 +01:00
Mamy André-Ratsimbazafy 3033ae30f8
Fix uint32 extended precision multiplication 2020-02-10 02:12:44 +01:00
Mamy André-Ratsimbazafy 30f8756dfc
Temp switch to uint32 words for testing modulo. Remove tests that depend on word size 2020-02-10 00:16:46 +01:00
Mamy André-Ratsimbazafy 166a1075b1
add bigint display in GMP test 2020-02-09 23:26:39 +01:00
Mamy André-Ratsimbazafy 08ed81af34
Don't forget to exit when dumpingraw integer 2020-02-09 23:05:23 +01:00
Mamy André-Ratsimbazafy a389e5c38c
in-place add/sub fix + Add note that native x86 division is flawed:
SIGFPE on quotient that don't fit in a word size
2020-02-09 23:00:21 +01:00
Mamy André-Ratsimbazafy 216ed9bdc1
Property-based testing framework vs GMP 2020-02-09 22:01:01 +01:00
Mamy André-Ratsimbazafy f2c79ece26
Remove the limitation that the number of bits in constructed has to be greater than the source integer bitsize 2020-02-09 21:35:23 +01:00
Mamy André-Ratsimbazafy 66c0b5805e
Add modular reduce / bigint mod from 2 arbitrarily size bigint 2020-02-09 18:17:32 +01:00
Mamy André-Ratsimbazafy 514715dff0
Allow muxing / cmov on bools 2020-02-09 17:49:38 +01:00
Mamy André-Ratsimbazafy 153e898263
word_types -> primitives + delete the "config" file / debug template 2020-02-09 16:22:55 +01:00
Mamy André-Ratsimbazafy 57ee2cb6bd
Fix inline assembly comments breaking build 2020-02-09 15:53:21 +01:00
Mamy André-Ratsimbazafy b9a37825a3
COnsistent IO API between fromRawUint and fromHex and add fromUint 2020-02-09 15:38:30 +01:00