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/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 d365d25..54da07a 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.