Commit graph

794 commits

Author SHA1 Message Date
François Garillot
8aa1458941
Implements an Elligator2 map for Curve25519
This implementation:
- is agnostic on the hash used to pick a field element, even though SHA512 is commonly used,
- follows https://tools.ietf.org/id/draft-irtf-cfrg-hash-to-curve-10.html closely
- tests the outputs of the function using libsignal's implementation.
2020-10-21 17:38:22 -04:00
Henry de Valence
6d96eb7796 Bump version to 3.0.0. 2020-08-17 18:20:26 -07:00
Henry de Valence
2ee61938ee
Merge pull request #327 from huitseeker/digests-0.9
Update sha2, digest to 0.9
2020-08-17 18:11:32 -07:00
isis agora lovecruft
5038fcf50a
Merge pull request #308 from isislovecruft/fix/pippenger-typo
Fix typo of Pippenger's name.
2020-07-01 01:14:10 +00:00
François Garillot
6afd8ff212
Update sha2, digest to 0.9 2020-06-15 07:16:04 -04:00
Henry de Valence
3fc47ef867 Bump version to 2.1.0 2020-05-29 12:39:39 -07:00
Henry de Valence
f04b83055c Merge branch 'master' into develop 2020-05-29 12:36:16 -07:00
Ruben De Smet
3a61a0b70c Make Scalar::from_bits a const fn.
const_fn is stable since Rust 1.31
(https://github.com/rust-lang/rust/pull/54835) and enables calling
`Scalar::from_bits(..)` from other const fn contexts, potentially
saving some overhead here and there.

Especially useful in contexts where constants are being built from a bit
pattern.
2020-05-28 10:28:28 +02:00
Rui Morais
6a8e466063 add derive Hash to Scalar, MontgomeryPoint and CompressedEdwardsY 2020-02-25 22:39:19 +00:00
Rui Morais
d57fb6caeb Derive of Hash trait to CompressedRistretto 2020-02-25 18:16:06 +00:00
Isis Lovecruft
7e2aed3943
Fix typo of Pippenger's name. 2019-12-10 20:33:53 +00:00
isis agora lovecruft
d52ab8bb6f
Merge branch 'develop' into feature/compressed-try-from 2019-11-26 21:21:14 +00:00
isis agora lovecruft
77203aa1cb
Merge pull request #306 from isislovecruft/feature/236-merge-rebase
Implement Zeroize for Scalar and MontgomeryPoint
2019-10-28 20:28:34 +00:00
isis agora lovecruft
4d1dfbaf03
Merge pull request #305 from isislovecruft/fix/unused-tmp2-warning
Fix a warning that a temporary value isn't used.
2019-10-28 20:20:06 +00:00
Isis Lovecruft
4423394ed8
Fix warning that a temporary value isn't used. 2019-10-28 19:12:00 +00:00
Isis Lovecruft
57f19e018f
Merge remote-tracking branch 'DebugSteven/zeroize' into feature/236-merge-rebase 2019-10-28 19:09:39 +00:00
Isis Lovecruft
409ebd94c0
Remove dev-dependency on deprecated rand_os crate.
The functionality we were using is now contained in the `rand_core` crate, which
we already depend upon.  As far as testing code goes, only benchmarks still
depend upon `rand`, as they use `thread_rng`.
2019-10-28 18:06:29 +00:00
Isis Lovecruft
9ae2e3b482
Change all from_slice() constructors to return Option<T>s.
We due this in lieu of implementing `TryFrom` to allow for API
consumers to use the `?` operator to convert potential `None`s into
their own `Result<T, CustomError>` types for better error handling
with less boilerplate.

Note that this is a breaking API change.
2019-10-28 17:29:15 +00:00
Henry de Valence
4cc0afdcfc
Merge pull request #302 from isislovecruft/fix/228-remove-ristretto-random-test
Remove test for validity of randomly generated RistrettoPoints.
2019-10-28 10:29:11 -07:00
Isis Lovecruft
c21224170a
Remove optional failure dependency and impl std::error::Error. 2019-10-28 17:29:04 +00:00
Isis Lovecruft
1d8b3995c9
Add custom error types, currently only used in TryFrom impls. 2019-10-28 17:28:40 +00:00
Isis Lovecruft
1fa0048262
Implement TryFrom<&[u8]> and ValidityCheck for MontgomeryPoint. 2019-10-28 17:26:23 +00:00
Isis Lovecruft
db3d26f4b9
Fix typo in TryFrom docstring. 2019-10-28 17:26:23 +00:00
Isis Lovecruft
a7f317a2b8
Impl TryFrom<&[u8]> for all compressed point types.
This reduces copy-pasta in downstream users to check the length of the
slice beforehand.
2019-10-28 17:26:23 +00:00
Trangar
ae4bf40e28 Added constants to reduce recalculations in elligator_risteretto_flavor 2019-10-28 11:48:33 +01:00
Isis Lovecruft
0709a27e46
Remove test for validity of randomly generated RistrettoPoints.
This test is no longer necessary as it originally had a possibility of
failure due to the original implementation of the invsqrt() function
in the decompression algorithm.  The failure with the current API is
nonexistent.

* FIXES #288.
2019-10-26 04:27:30 +00:00
Henry de Valence
d0ea313e99 Remove broken impl Zeroize for FieldElement2625x4.
This implementation is broken because the packed_simd types don't implement `Zeroize`.
2019-10-25 15:38:50 -07:00
Henry de Valence
a79459a1c8
Merge pull request #289 from tarcieri/zeroize
Switch from `clear_on_drop` to `zeroize` (fixes #281)
2019-10-23 20:17:14 -07:00
Tony Arcieri
9480844b8d Switch from clear_on_drop to zeroize (fixes #281)
`zeroize` is WASM-friendly as it has no dependencies on C compilers.

Instead uses Rust's own volatile write semantics and compiler fences to
ensure zeroization is not elided by the compiler.
2019-10-23 16:39:21 -07:00
Henry de Valence
70e46c9826 Fill in missing Serde impl for MontgomeryPoint. 2019-10-23 15:55:03 -07:00
Henry de Valence
0fc534d989 Use "tuples" instead of "bytes" in the Serde datamodel.
This is a breaking change to the serialization format.  It fixes it so that the
Serde encoding can match the conventional encoding of each type of object, and
so that Serde can be used with no overhead -- when using serde-bincode, the
Serde encoding now matches the manual encoding.
2019-10-23 15:40:50 -07:00
Henry de Valence
29ce0d4fe9 Add length checks to serde-bincode tests.
This ensures that the serde Serialize and Deserialize implementations use
fixed-length Serde tuples, rather than variable-length byte arrays.  This flaw
in data modeling was pointed out by Trevor Perrin.
2019-10-23 15:28:48 -07:00
Henry de Valence
620d17ef40
Merge pull request #293 from dalek-cryptography/remove-build-rs
Remove build.rs constants generation.
2019-10-23 14:44:46 -07:00
Henry de Valence
574217694e Remove build.rs.
This was more useful at the time when we were determining, e.g., optimal lookup
table sizes and could regenerate them more easily, but it came at a massive
complexity cost.  It also meant that we were unable to implement backend
autoselection.  This commit removes the `build.rs` entirely.  In the future, a
different `build.rs` could be added that auto-selects a backend, but it seems
like the current default-u64 setup has been working fine.
2019-10-23 14:20:38 -07:00
Isis Lovecruft
019b81aa20
Clarify docs for the choice of sign for MontgomeryPoint.to_edwards(). 2019-10-23 19:49:06 +00:00
Isis Lovecruft
7c5ba69491
Update copyright year. 2019-10-23 19:43:56 +00:00
Isis Lovecruft
028c0b9d4d
Fix typo in 64-bit scalar implementation code comment. 2019-10-23 19:35:57 +00:00
François Garillot
9785f56c0f
Rust fixes for some clippy warnings
Clippy lints with instances in the project but NOT applied here, since they seem consistently at odds with the projects' style:
- [unreadable literal](https://rust-lang.github.io/rust-clippy/master/#unreadable_literal)
- [cast lossless](https://rust-lang.github.io/rust-clippy/master/#cast_lossless)
- [assign op pattern](https://rust-lang.github.io/rust-clippy/master/#assign_op_pattern)
2019-10-05 12:02:08 -07:00
François Garillot
023fdf2a2c
Rust added support for the ? operator on Option in 1.22
This converts a few instances of an early-returning unwrap to it.
2019-10-05 11:44:36 -07:00
Henry de Valence
b01888a929
Merge pull request #260 from fabric-and-ink/ed-decompress-simplify
Remove unneeded check for negativity in edwards point decompression
2019-08-07 12:57:24 -07:00
Fabian Drinck
26ae185bc9
Apply suggestion by @hdevalence
Co-Authored-By: Henry de Valence <hdevalence@hdevalence.ca>
2019-08-07 19:43:10 +02:00
Henry de Valence
cfa09d859f Use upstream IFMA intrinsics now that they exist. 2019-08-06 17:14:31 -07:00
Henry de Valence
4bbcc28cdc
Merge pull request #275 from Pratyush/fix-docs-link-on-avx2
Fix link to AVX2 docs
2019-08-06 17:08:30 -07:00
Pratyush Mishra
912fe4794f Fix link to AVX2 and IFMA docs 2019-08-06 16:53:54 -07:00
Henry de Valence
4bc2ec0082
Merge pull request #276 from dalek-cryptography/quarkslab
Fix issues found in Quarkslab audit
2019-08-06 16:08:23 -07:00
Henry de Valence
68b71578af
Merge pull request #274 from 3for/comment-fix
`curve_models` Comment fix
2019-08-06 16:07:13 -07:00
Henry de Valence
a480844992 Tighten a too-permissive debug_assert in NafLookupTable8.
This issue was found by Laurent Grémy & Nicolas Surbayrole of Quarkslab.
2019-08-06 15:21:06 -07:00
Henry de Valence
90baabe50b Ensure Scalar Add and Sub produce canonical results.
Closes #238.

This issue was discovered independently by both Jack "str4d" Grigg
(issue #238), who noted that reduction was not performed on addition, and
Laurent Grémy & Nicolas Surbayrole of Quarkslab, who noted that it was possible
to cause an overflow and compute incorrect results.
2019-08-06 15:20:19 -07:00
Jack Grigg
a3246d82e5 Tests showing that scalar addition and subtraction don't reduce mod l 2019-08-06 15:18:46 -07:00
root
ccaf86ea86 curve_models link in comment mismatch 2019-08-06 16:40:47 +08:00