Commit graph

976 commits

Author SHA1 Message Date
Henry de Valence
cdc661c80d
Merge pull request #185 from isislovecruft/feature/ristretto-decoding-cleanup
ristretto decoding cleanup
2018-08-20 14:47:57 -07:00
Isis Lovecruft
0c8a046340
Cleanup and comment Ristretto decoding to match explicit formulae. 2018-08-20 21:01:01 +00:00
Isis Lovecruft
7ef7de3461
Merge remote-tracking branch 'hdevalence/add-note-on-ffi' into develop 2018-08-10 22:33:14 +00:00
Isis Lovecruft
1046e8dd74
Merge remote-tracking branch 'hdevalence/fix-unbumped-version' into develop 2018-08-10 17:20:44 +00:00
Henry de Valence
47d85103d3 Add note on FFI to README.md
Closes #182.
2018-08-03 11:00:43 -07:00
Henry de Valence
869a464927 Fix unbumped version number
This is too late for the 0.19.0 release (I missed it because I grepped for
"0.18.", and the version in the README doesn't specify a minor version), but it
will now be in line with the other version strings.

When we put out the 1.0.0-pre.0 release we can change both together (our docs
already say we've released it, because we inserted an extra version, oops).
2018-07-27 10:56:07 -07:00
Henry de Valence
839358aae6 Merge branch 'master' into develop 2018-07-26 20:38:08 -07:00
Henry de Valence
ba3b6178f0 Merge branch 'release/0.19.0' 2018-07-26 20:37:55 -07:00
Henry de Valence
8a488d3032 Bump version number to 0.19.0
Add an interim version prior to 1.0.0-pre.0 in order to fix the AVX2
build.
2018-07-26 20:34:00 -07:00
Henry de Valence
3bed3ef787
Merge pull request #176 from hdevalence/more-pre-1.0-cleanups
More pre 1.0 cleanups
2018-07-26 20:27:11 -07:00
Henry de Valence
31090e79eb
Merge pull request #179 from hdevalence/ristretto_from_uniform
Expose a Ristretto::from_uniform_bytes function.
2018-07-26 20:22:27 -07:00
Henry de Valence
869eaba853
Merge pull request #178 from hdevalence/feature/migrate-to-packed-simd
Migrate to packed_simd from core::simd
2018-07-26 19:55:14 -07:00
Henry de Valence
259e2cd188 Expose a Ristretto::from_uniform_bytes function.
Why expose this instead of `from_hash`? Because it allows constructing
arbitrary-length chains of orthogonal generators from a XOF.
2018-07-26 19:04:56 -07:00
Henry de Valence
288625418d Migrate to packed_simd from core::simd 2018-07-26 12:40:34 -07:00
Henry de Valence
920bdb3279
Merge pull request #177 from samscott89/hash-fix
Fix distribution of curve points for hashing to Ristretto points.
2018-07-25 16:06:26 -07:00
Sam Scott
a1e2c83d31 Fix distribution of curve points for hashing to Ristretto points. 2018-07-25 18:52:52 -04:00
Henry de Valence
e4ad0ec60a Remove outdated note about powers-of-two 2018-07-25 12:23:08 -07:00
Henry de Valence
b7dab8d083 Add iterator length checks to multiscalar muls.
This partially re-adds functionality removed in commit

d2ce1ce5dc

We would like to require ExactSizeIterator, but unfortunately we can't
do that, since ExactSizeIterators aren't chainable, for (in my opinion)
silly reasons (chaining two 4-billion-element ExactSizeIterators could
overflow on 32-bit systems).  Instead we inspect the size hints manually
and assert that the lower and upper bounds are all equal.
2018-07-25 11:21:06 -07:00
Henry de Valence
82a5e18c29 Update docs to point to multiscalar traits 2018-07-25 10:54:31 -07:00
Henry de Valence
d3310837b8
Merge pull request #174 from hdevalence/alloc-cleanups_r1
Unify `alloc` and `std` cargo features (rebased #170)
2018-07-23 11:09:38 -07:00
Henry de Valence
d62fd8ebe4 Add prelude import to scalar.rs 2018-07-23 10:59:11 -07:00
Tony Arcieri
10e8abf926 Unify alloc and std cargo features
This change provides a common convention for using allocator-dependent
features with:

    #![cfg(feature = "alloc")]

When available, `Vec` is imported consistently as `prelude::Vec`, which
means modules that need access to `Vec` can simply do:

    use prelude::*;

and if an allocator is available, `Vec` will be in the crate prelude.

This allows all `alloc` vs `std` gating to be handled in `lib.rs`,
`build.rs`, and `prelude.rs` so the rest of the codebase doesn't have to
do any gating whatsoever.
2018-07-23 10:50:21 -07:00
Henry de Valence
8990a71b18
Merge pull request #173 from dalek-cryptography/revert-170-alloc-cleanups
Revert "Unify `alloc` and `std` cargo features"
2018-07-23 10:39:57 -07:00
Henry de Valence
affa1dc2f6
Revert "Unify alloc and std cargo features" 2018-07-23 10:38:31 -07:00
Henry de Valence
d6adeb54cc
Merge pull request #170 from tarcieri/alloc-cleanups
Unify `alloc` and `std` cargo features
2018-07-23 10:38:26 -07:00
Henry de Valence
f675f4cd2b fixup! Allow Options in the VartimeMultiscalarMul trait 2018-07-20 20:33:33 -07:00
Henry de Valence
36ade94596
Merge pull request #171 from isislovecruft/feature/scalar-default
Impl Default for Scalar
2018-07-20 15:39:59 -07:00
Tony Arcieri
e57778a5a8 Unify alloc and std cargo features
This change provides a common convention for using allocator-dependent
features with:

    #![cfg(feature = "alloc")]

When available, `Vec` is imported consistently as `prelude::Vec`, which
means modules that need access to `Vec` can simply do:

    use prelude::*;

and if an allocator is available, `Vec` will be in the crate prelude.

This allows all `alloc` vs `std` gating to be handled in `lib.rs`,
`build.rs`, and `prelude.rs` so the rest of the codebase doesn't have to
do any gating whatsoever.
2018-07-20 15:07:07 -07:00
Isis Lovecruft
b087551696
Impl Default for Scalar. 2018-07-20 21:36:38 +00:00
Isis Lovecruft
73b3a9617b
Merge remote-tracking branch 'hdevalence/remove-ristretto-notes' into develop 2018-07-20 19:56:55 +00:00
Isis Lovecruft
4d527cae4b
Merge branch 'feature/154-defaults' into develop 2018-07-20 19:52:34 +00:00
Isis Lovecruft
3324e7d0ae
Remove impl Default for ProjectivePoint. 2018-07-20 19:51:51 +00:00
Isis Lovecruft
16f00cac16
Merge branch 'fix/166-scalar-random-nostd' into develop 2018-07-20 19:27:37 +00:00
Henry de Valence
5a58f42155 Point to https://ristretto.group since our notes live there now. 2018-07-20 12:24:28 -07:00
Henry de Valence
6eb876f3cb Fix doctests (missed during merge) 2018-07-20 11:50:42 -07:00
Henry de Valence
bb50700d77
Merge pull request #163 from hdevalence/fallible-multiscalar-mul
Allow Options in the VartimeMultiscalarMul trait
2018-07-20 11:28:19 -07:00
Isis Lovecruft
6f82c30a88
Fix doctests for From<u64> for Scalar. 2018-07-20 04:45:06 +00:00
Isis Lovecruft
4d390fbd94
Merge remote-tracking branch 'hdevalence/scalar-from-impls' into develop 2018-07-20 01:09:44 +00:00
Isis Lovecruft
38aa0ee2b7
Implement Default for remaining point types.
* FIXES https://github.com/dalek-cryptography/curve25519-dalek/issues/154
2018-07-20 00:47:36 +00:00
Isis Lovecruft
9105d0977a
Merge remote-tracking branch 'hdevalence/more-pre-1.0-cleanups' into develop 2018-07-20 00:15:12 +00:00
Isis Lovecruft
e5d3f8f72e
Merge branch 'feature/148-cleanup-for-1.0.0-pre.0_1' into develop 2018-07-20 00:09:21 +00:00
Isis Lovecruft
73a5f4711a
Remove unnecessary extern crate sha2 from test code. 2018-07-20 00:06:31 +00:00
Isis Lovecruft
7b22fe6e87
Change the wording on the Scalar::as_bytes() docstring. 2018-07-20 00:04:25 +00:00
Isis Lovecruft
04f75767f3
Scalar::random should work with nostd.
* FIXES #166.
2018-07-19 23:51:13 +00:00
Isis Lovecruft
133afff5a7
Feature gate some uses on alloc/std which aren't used in nostd.
* FIXES part of #166.
2018-07-19 23:50:58 +00:00
Henry de Valence
1e74cb3e56 Replace Scalar::from_u64 with From impls
Unfortunately, Rust selects `i32` as the type for an integer literal
when the literal has no other type constraints.  This means that someone
cannot write `Scalar::from(1)`, as Rust will choose `i32` as the type for
`1`, and we don't `impl From<i32> for Scalar`.

We could implement `From` conversions for signed integers, but since
`Scalar` operations should be constant-time by default, this would
require us to extract the sign bit of the integer and use it to
conditionally select between the positive and negative of Scalar
constructed from the value bits.  This is more expensive than the
unsigned operation, and I don't think it's what anyone really wants.

Making API consumers specify that their literals are unsigned is
slightly annoying, but better than the above alternative.

It would also be nice to change `Scalar::from_hash` to be
`impl<D: Digest<OutputSize = U64>> From<D> for Scalar`,
but this isn't currently allowed by Rust (since that `impl` "could"
conflict with the `impl From<u8>` if someone decided that `u8` should
`impl Digest`).
2018-07-19 08:39:09 -07:00
Henry de Valence
b4db0afe18 Allow Options in the VartimeMultiscalarMul trait
This changes the primary function for the `VartimeMultiscalarMul` trait
to an `optional_multiscalar_mul` trait that accepts
`Option<Self::Point>` (and returns `None` if any input points are
`None`).

The existing `vartime_multiscalar_mul` is changed to be a wrapper around
this function to avoid code duplication.  This may result in an
extra copy of each input point, but that cost is probably not
significant compared to the cost of the multiscalar multiplication.

The motivation is to allow performing multiscalar multiplications with
inline decompression.  Currently, API consumers have to allocate
temporary buffers for all of their points, decompress into those
buffers, then pass (iterators over) those buffers into the multiscalar
multiplication code, which then creates new buffers for lookup tables.
2018-07-17 08:19:48 -07:00
Henry de Valence
7bbf7495b0 Change VartimeMultiscalarMul docs to use vartime_ 2018-07-16 22:54:45 -07:00
Henry de Valence
dfc9e7c0b7 fixup extendedpoint validity check 2018-07-16 22:28:22 -07:00
Henry de Valence
0c58de0367 it wouldn't be 2018-07-16 22:22:58 -07:00