diff --git a/CHANGELOG.md b/CHANGELOG.md index a46b2ff..a84de2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ Entries are listed in reverse chronological order. +## 2.1.0 + +* Make `Scalar::from_bits` a `const fn`, allowing its use in `const` contexts. + ## 2.0.0 * Fix a data modeling error in the `serde` feature pointed out by Trevor Perrin diff --git a/Cargo.toml b/Cargo.toml index 87d35e8..d73a932 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,10 @@ [package] name = "curve25519-dalek" -version = "2.0.0" +# Before incrementing: +# - update CHANGELOG +# - update html_root_url +# - update README if required by semver +version = "2.1.0" authors = ["Isis Lovecruft ", "Henry de Valence "] readme = "README.md" @@ -28,7 +32,7 @@ travis-ci = { repository = "dalek-cryptography/curve25519-dalek", branch = "mast [dev-dependencies] sha2 = { version = "0.8", default-features = false } bincode = "1" -criterion = "0.2" +criterion = "0.3.0" rand = "0.7" [[bench]] diff --git a/src/edwards.rs b/src/edwards.rs index 998af8d..810bc20 100644 --- a/src/edwards.rs +++ b/src/edwards.rs @@ -150,7 +150,7 @@ use backend::vector::scalar_mul; /// /// The first 255 bits of a `CompressedEdwardsY` represent the /// \\(y\\)-coordinate. The high bit of the 32nd byte gives the sign of \\(x\\). -#[derive(Copy, Clone, Eq, PartialEq)] +#[derive(Copy, Clone, Eq, PartialEq, Hash)] pub struct CompressedEdwardsY(pub [u8; 32]); impl ConstantTimeEq for CompressedEdwardsY { diff --git a/src/lib.rs b/src/lib.rs index de30492..e1409a2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,6 +22,7 @@ #![cfg_attr(feature = "nightly", doc(include = "../README.md"))] #![doc(html_logo_url = "https://doc.dalek.rs/assets/dalek-logo-clear.png")] +#![doc(html_root_url = "https://docs.rs/curve25519-dalek/2.1.0")] //! Note that docs will only build on nightly Rust until //! [RFC 1990 stabilizes](https://github.com/rust-lang/rust/issues/44732). diff --git a/src/montgomery.rs b/src/montgomery.rs index 4768451..c3676c2 100644 --- a/src/montgomery.rs +++ b/src/montgomery.rs @@ -65,7 +65,7 @@ use zeroize::Zeroize; /// Holds the \\(u\\)-coordinate of a point on the Montgomery form of /// Curve25519 or its twist. -#[derive(Copy, Clone, Debug)] +#[derive(Copy, Clone, Debug, Hash)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct MontgomeryPoint(pub [u8; 32]); diff --git a/src/ristretto.rs b/src/ristretto.rs index c4b6170..977f52f 100644 --- a/src/ristretto.rs +++ b/src/ristretto.rs @@ -208,7 +208,7 @@ use backend::vector::scalar_mul; /// /// The Ristretto encoding is canonical, so two points are equal if and /// only if their encodings are equal. -#[derive(Copy, Clone, Eq, PartialEq)] +#[derive(Copy, Clone, Eq, PartialEq, Hash)] pub struct CompressedRistretto(pub [u8; 32]); impl ConstantTimeEq for CompressedRistretto { diff --git a/src/scalar.rs b/src/scalar.rs index 95493c2..87f5da9 100644 --- a/src/scalar.rs +++ b/src/scalar.rs @@ -182,7 +182,7 @@ type UnpackedScalar = backend::serial::u32::scalar::Scalar29; /// The `Scalar` struct holds an integer \\(s < 2\^{255} \\) which /// represents an element of \\(\mathbb Z / \ell\\). -#[derive(Copy, Clone)] +#[derive(Copy, Clone, Hash)] pub struct Scalar { /// `bytes` is a little-endian byte encoding of an integer representing a scalar modulo the /// group order.