Henry de Valence
e73b635fe0
Remove unused constants
2018-03-22 12:17:23 -07:00
Henry de Valence
844da9712b
Fix AVX2 docs formatting, remove obsolete AVX512 note
2018-03-22 12:13:39 -07:00
Henry de Valence
d67e895619
Merge branch 'feature/rename-to-multiscalar-mul' into develop
2018-03-22 12:08:49 -07:00
Henry de Valence
132b1a9d77
Merge branch 'feature/ristretto-uniform-hash' into develop
2018-03-22 11:44:52 -07:00
Henry de Valence
2e73b2bc20
Use scalar_mul instead of scalar_mult
2018-03-22 11:40:13 -07:00
Henry de Valence
70eee5208a
Rename double_scalar_mult_basepoint to double_scalar_mul_basepoint for consistency
2018-03-22 11:39:47 -07:00
Henry de Valence
296cd16463
Rename mult_by_cofactor to mul_by_cofactor for consistency
2018-03-22 11:36:34 -07:00
Henry de Valence
8de3d7576a
Rename mult_by_pow_2 to mul_by_pow_2 for consistency
2018-03-22 11:35:42 -07:00
Henry de Valence
b48d568f47
Add debug_assert that Scalar::batch_invert inputs are nonzero
2018-03-22 11:32:00 -07:00
Henry de Valence
0e7d872ad0
Add batch inversion for Scalars
2018-03-22 11:32:00 -07:00
Henry de Valence
792ac0775e
Change to the updated subtle API.
2018-03-22 11:13:26 -07:00
Henry de Valence
7f39656b4a
Apply the Elligator map twice to ensure a uniform distribution
...
As noted in the Decaf paper, mapping twice and adding the results ensures a
uniform distribution over the group. This changes our random point and
hash-to-point functions to do this, matching the Sage script.
2018-03-19 15:37:38 -07:00
Henry de Valence
c20e09f6cc
Rename multiscalar_mult->multiscalar_mul to match Mul traits
2018-03-19 14:28:21 -07:00
Henry de Valence
c5fcc6602d
Fix build for AVX2 backend.
...
A missing import of the Borrow trait caused the build to break with the
"yolocrypto" feature enabled; this was't caught by CI because the CI machine
that Travis used didn't have AVX2, so the code was never built.
This commit adds the missing import and changes `std` to `core` so that the
AVX2 backend builds with no_std, but this isn't tested and is, actually,
"yolocrypto".
2018-03-19 11:15:52 -07:00
Isis Lovecruft
de90f16994
Merge branch 'feature/dalek-rs-assets' into develop
2018-03-12 19:50:56 +00:00
Henry de Valence
a271ff907d
add link to curve models docs
2018-02-22 15:37:16 -08:00
Henry de Valence
3969d80c89
Add links to dalek.rs
2018-02-21 11:11:17 -08:00
Henry de Valence
2b42966bb4
Load resources from our own domain
2018-02-21 11:03:18 -08:00
Henry de Valence
0f185d3e28
Generalize trait bounds on multiscalar multiplication.
...
This allows iterators returning either &Scalars or Scalars, so that it's
possible to use map() and friends to adjust scalars as they're being fed into
the multiscalar multiplication.
2018-02-20 18:31:23 -08:00
Henry de Valence
4a4ec74100
Add example to edwards::multiscalar_mult
2018-02-20 17:32:50 -08:00
Henry de Valence
6748dddb96
Simplify and optimize Montgomery code.
...
The `MontgomeryPoint` struct is now a point on the Kummer line of the Montgomery curve.
The `ProjectivePoint` struct is made private, since its only purpose is
internal to the Montgomery ladder.
The Montgomery ladder takes affine input, making it faster, and produces affine output.
The Edwards-Montgomery correspondence is simplified.
2018-02-05 10:40:25 -08:00
Isis Lovecruft
b5e664ab16
Add RISTRETTO_BASEPOINT_COMPRESSED constant.
2018-02-02 02:33:51 +00:00
Isis Lovecruft
23bc6ff848
Change README and docs sidebar image to transparent version.
2018-01-31 02:26:28 +00:00
Isis Lovecruft
cd112afff5
Whitespace EOL fixes.
2018-01-31 02:19:53 +00:00
Henry de Valence
9698435e38
Add note on point validity and "make illegal states unrepresentable".
...
Remove references to Montgomery conversions, as a prelude to putting the
Montgomery/Edwards conversion docs in the Montgomery module.
2018-01-30 12:31:53 -08:00
Henry de Valence
2d5dc5079f
Add type to X25519 basepoint doc
2018-01-29 14:39:37 -08:00
Henry de Valence
1d480a8a71
Rename X25519 basepoint to X25519_BASEPOINT_MONTGOMERY
2018-01-29 14:36:45 -08:00
Henry de Valence
ae46ecd445
Rename BASE_CMPRSSD to ED25519_BASEPOINT_COMPRESSED.
2018-01-29 12:38:58 -08:00
Henry de Valence
06994e8139
Tidy docs for public constants in backends
2018-01-29 12:38:58 -08:00
Henry de Valence
739755cb1c
Fix up constants docstrings
2018-01-29 12:38:58 -08:00
Henry de Valence
d3a8ee0d7b
Remove BASEPOINT_ORDER_MINUS_* constants
...
These were originally added in 32da4c7d50
to implement Scalar negation in terms of multiply-add.
But we have a full implementation of scalar arithmetic now, so it's not
necessary to keep the constants around.
2018-01-29 12:38:58 -08:00
Henry de Valence
3b5a8f84a8
Add an is_torsion_free function and document cofactor-related functions.
2018-01-26 16:07:52 -08:00
Henry de Valence
3d2cf74261
Add docs on Edwards points
2018-01-26 15:36:06 -08:00
Henry de Valence
d4d9d86d72
Fix up coffee/ristretto reference
2018-01-26 15:35:51 -08:00
Henry de Valence
12e658401c
Reword Ristretto intro
2018-01-26 14:53:31 -08:00
Henry de Valence
52904b5c3e
Use math for multiscalar docs
2018-01-26 13:39:11 -08:00
Henry de Valence
4b47087b40
Refactor Ristretto notes into doc and doc-internal sections.
2018-01-26 13:35:30 -08:00
Henry de Valence
576e27982f
Tweak module header names
2018-01-26 10:44:48 -08:00
Henry de Valence
fbd84af767
Ristretto API docs fixups
2018-01-25 17:34:57 -08:00
Henry de Valence
d04d3719a5
Add logo to sidebar
2018-01-25 17:34:20 -08:00
Henry de Valence
99921de6f3
Use README.md for the crate docs, and rewrite it.
2018-01-25 16:26:05 -08:00
Henry de Valence
ce45cfec8e
This isn't true after renaming the struct
2018-01-25 12:16:11 -08:00
Henry de Valence
3f7923b628
Keep the AVX2 point type named as ExtendedPoint.
2018-01-25 12:00:40 -08:00
Isis Lovecruft
4f37785f0e
Rename ExtendedPoint to EdwardsPoint.
2018-01-25 02:56:38 +00:00
Isis Lovecruft
9cb915126e
Merge remote-tracking branch 'dalek/feature/borrow-operators' into develop
2018-01-25 02:00:52 +00:00
Henry de Valence
86fd06db00
s/eps/epsilon/ for clarity
2018-01-24 12:42:57 -08:00
Henry de Valence
52d600db95
Implement public-facing ops traits on all combos of &T/T
...
The public-facing types with arithmetic operations are:
- `Scalar`s
- `ExtendedPoint`s
- `RistrettoPoint`s
For these types we define operators with all combinations of borrowed and
non-borrowed inputs, to avoid forcing API consumers to write extra ampersands.
Since all of the operations involved with these types are expensive relative to
the cost of an unnecessary copy, this isn't a big deal.
The `MontgomeryPoint` struct isn't included in the above because it's only
useful for scalar multiplication.
This commit is based on work by @UnlawfulMonad.
2018-01-24 11:05:06 -08:00
Henry de Valence
0e9b8e0a6e
Refactor multiply implementation to eliminate reduce() call
2018-01-19 18:23:41 -08:00
Henry de Valence
ec50ec96f7
Use parallel carry-ins and carry-outs in FieldElement64::reduce()
2018-01-19 17:50:48 -08:00
Henry de Valence
d8d235fb48
Move pow2k into the backends and use it to implement square()
2018-01-19 17:50:48 -08:00
Henry de Valence
1f821d34a5
Feature-gate batch inversion and compression on alloc
2018-01-19 17:22:28 -08:00
Henry de Valence
b20ccbd685
Implement batched encoding for RistrettoPoints
2018-01-19 17:22:28 -08:00
Henry de Valence
de377290ee
Implement batch inversion using a product tree.
2018-01-19 17:22:28 -08:00
Isis Lovecruft
0012e1f12f
Merge remote-tracking branch 'hdevalence/feature/avx2_r7' into develop
2018-01-19 23:46:30 +00:00
Henry de Valence
a0c93cb730
fix inconsistency in variable naming
2018-01-10 06:04:03 -08:00
Henry de Valence
841c026c13
Remove dead code
2018-01-10 05:49:47 -08:00
Henry de Valence
f816083575
Use >> instead of srl intrinsic
2018-01-03 14:04:27 -08:00
Henry de Valence
4cbff3983d
Remove fixme notes
2018-01-03 14:01:48 -08:00
Henry de Valence
628af18a1d
Suppress some warnings
2018-01-03 13:57:50 -08:00
Henry de Valence
3686562b2f
Clear memory from avx2 multiscalar mult
2018-01-03 13:37:12 -08:00
Henry de Valence
d41dbb1fe4
Replace some binary constants with named constants
2018-01-03 12:34:25 -08:00
Henry de Valence
dd80421094
Move field constants to constants module
2018-01-03 12:13:52 -08:00
Isis Lovecruft
28f114f127
Combine differential_add and differential_double in Montgomery ladder.
2017-12-24 00:17:15 +00:00
Henry de Valence
ce68b8d72b
Document bounds yoga in doubling
2017-12-18 14:48:44 -08:00
Henry de Valence
af3c2b2821
Document readdition
2017-12-18 13:58:37 -08:00
Henry de Valence
c0f64009a7
Implement readdition using a CachedPoint type
2017-12-18 11:42:53 -08:00
Henry de Valence
80813e81b1
make diff_sum maskable
2017-12-15 15:24:13 -08:00
Henry de Valence
0f6171b788
Try to make stdsimd an optional dependency
2017-12-15 13:57:01 -08:00
Henry de Valence
caf296a546
Try to make target_feature work on stable
2017-12-15 13:57:01 -08:00
Henry de Valence
70f710eafe
Use the LookupTable struct in AVX2 code
2017-12-15 13:57:01 -08:00
Henry de Valence
34f44dcf5d
Merge branch 'develop' into feature/avx2_r8
2017-12-15 11:37:10 -08:00
Henry de Valence
640888198e
Eliminate a carry pass through tighter bounds checks
2017-12-14 14:17:34 -08:00
Henry de Valence
a3f53c9134
Refactor select_precomputed_point into a LookupTable struct.
...
Originally this was for hygiene, so that we could erase points from
heap-allocated memory in multiscalar_mult, but it ends up providing a cleaner
API for scalar multiplication.
It's kept inside curve_models for now, but it could go somewhere else if that's a better place.
2017-12-07 12:46:57 -08:00
Henry de Valence
98a78d7a58
Clear scalar digits from memory in multiscalar_mult
2017-12-07 12:34:40 -08:00
Henry de Valence
d62fc7caf1
Rearrange signs to avoid a subtraction
2017-12-07 10:55:33 -08:00
Henry de Valence
1d39d2ec6e
Implement Default for internal point types
2017-12-06 17:30:19 -08:00
Henry de Valence
7d2d87441b
Connect double_scalar_mult_basepoint to AVX2 backend
2017-12-04 11:05:24 -08:00
Henry de Valence
2c29d9a2ad
tweak docs
2017-12-04 10:37:37 -08:00
Henry de Valence
3814beeafe
Fix typo and add note on AVX512VL
2017-12-04 10:37:37 -08:00
Henry de Valence
bf5e3581d2
Update AVX2 docs
2017-12-04 10:37:37 -08:00
Henry de Valence
1103c5c43a
Implement Sub by pre-negating the point
2017-12-04 10:37:37 -08:00
Henry de Valence
e3579995c0
Add double-base scalar vartime for AVX2
2017-12-04 10:37:37 -08:00
Henry de Valence
9213dc0bbb
Implement point subtraction
2017-12-04 10:37:37 -08:00
Henry de Valence
3094866442
Fix up after Scalar API changes
2017-12-04 10:37:37 -08:00
Henry de Valence
ba071f12aa
Write up notes on the AVX2 backend
2017-12-04 10:37:37 -08:00
Henry de Valence
3d435a1f4f
Fix up tests to use new Scalar API
2017-12-04 10:37:37 -08:00
Henry de Valence
b5305b4e30
Connect multiscalar_mult to the AVX2 backend
2017-12-04 10:37:37 -08:00
Henry de Valence
912fc5d412
Never build avx2 without avx2
2017-12-04 10:37:37 -08:00
Henry de Valence
97fe2f0bf4
Try to connect the AVX2 backend to the ExtendedPoint frontend
2017-12-04 10:37:37 -08:00
Henry de Valence
77766b3422
Add benchmark for conversion to avx2 format
2017-12-04 10:37:37 -08:00
Henry de Valence
208180dc72
Simplify mul, square implementations
2017-12-04 10:37:37 -08:00
Henry de Valence
f28635ab4e
Add a new 'avx2_backend' yolocrypto feature
2017-12-04 10:37:37 -08:00
Henry de Valence
841e0d5b64
Fix wrong feature for benchmarks
2017-12-04 10:37:37 -08:00
Henry de Valence
81ecef89ee
Connect AVX2 and u64 backends
2017-12-04 10:37:37 -08:00
Henry de Valence
ed24d1c5fa
Move AVX2 code into a backend
2017-12-04 10:37:37 -08:00
Henry de Valence
2b37a65d66
Remove debugging code
2017-12-04 10:37:37 -08:00
Henry de Valence
1ba7cb1e2c
Add stub implementations of multiscalar mult
2017-12-04 10:37:37 -08:00
Henry de Valence
7354b569bb
Add 32bit reduction code
2017-12-04 10:37:37 -08:00
Henry de Valence
e7ec5b3dd1
Add basepoint table code
2017-12-04 10:37:37 -08:00
Henry de Valence
34ae1b15e0
Add a squaring implementation
2017-12-04 10:37:37 -08:00