diff --git a/src/edwards.rs b/src/edwards.rs index d72ec28a2..998af8dec 100644 --- a/src/edwards.rs +++ b/src/edwards.rs @@ -338,20 +338,15 @@ impl Default for CompressedEdwardsY { impl CompressedEdwardsY { /// Construct a `CompressedEdwardsY` from a slice of bytes. /// - /// # Returns + /// # Panics /// - /// An `Option` which is `None` if the input `bytes` - /// slice does not have a length of 32. - pub fn from_slice(bytes: &[u8]) -> Option { - if bytes.len() != 32 { - return None; - } - + /// If the input `bytes` slice does not have a length of 32. + pub fn from_slice(bytes: &[u8]) -> CompressedEdwardsY { let mut tmp = [0u8; 32]; tmp.copy_from_slice(bytes); - Some(CompressedEdwardsY(tmp)) + CompressedEdwardsY(tmp) } } diff --git a/src/montgomery.rs b/src/montgomery.rs index 14957d1ad..4768451a6 100644 --- a/src/montgomery.rs +++ b/src/montgomery.rs @@ -56,7 +56,6 @@ use field::FieldElement; use scalar::Scalar; use traits::Identity; -use traits::ValidityCheck; use subtle::Choice; use subtle::ConditionallySelectable; @@ -94,24 +93,6 @@ impl PartialEq for MontgomeryPoint { impl Eq for MontgomeryPoint {} -impl ValidityCheck for MontgomeryPoint { - /// Decode the \\(u\\)-coordinate field element and re-encode it - /// to its canonical form to check whether the original was valid. - /// - /// There are no other required checks for the Mongomery form of the curve, - /// as every element in \\( \mathbb{F}\_{q} \\) lies either on the curve or - /// its quadratic twist. (cf. ยง5.2 of "Montgomery Curves and Their - /// Arithmetic" by [Costello and Smith][costello-smith].) - /// - /// [costello-smith]: https://eprint.iacr.org/2017/212.pdf - fn is_valid(&self) -> bool { - let maybe_u: FieldElement = FieldElement::from_bytes(&self.0); - let u: [u8; 32] = maybe_u.to_bytes(); - - u.ct_eq(&self.0).into() - } -} - impl Zeroize for MontgomeryPoint { fn zeroize(&mut self) { self.0.zeroize(); @@ -129,29 +110,6 @@ impl MontgomeryPoint { self.0 } - /// Attempt to create a `MontgomeryPoint` from a slice of bytes. - /// - /// # Returns - /// - /// An `Option` which is `None` if the length of the slice - /// of bytes is not 32, or if the bytes did not represent a canonical - /// `FieldElement`. - pub fn from_slice(bytes: &[u8]) -> Option { - if bytes.len() != 32 { - return None; - } - - let mut array = [0u8; 32]; - array.copy_from_slice(&bytes[..32]); - - let P = MontgomeryPoint(array); - - if P.is_valid() { - return Some(P); - } - None - } - /// Attempt to convert to an `EdwardsPoint`, using the supplied /// choice of sign for the `EdwardsPoint`. /// diff --git a/src/ristretto.rs b/src/ristretto.rs index 485c01f83..c4b61700b 100644 --- a/src/ristretto.rs +++ b/src/ristretto.rs @@ -230,20 +230,15 @@ impl CompressedRistretto { /// Construct a `CompressedRistretto` from a slice of bytes. /// - /// # Returns + /// # Panics /// - /// An `Option` which is `None` if the input `bytes` - /// slice does not have a length of 32. - pub fn from_slice(bytes: &[u8]) -> Option { - if bytes.len() != 32 { - return None; - } - + /// If the input `bytes` slice does not have a length of 32. + pub fn from_slice(bytes: &[u8]) -> CompressedRistretto { let mut tmp = [0u8; 32]; tmp.copy_from_slice(bytes); - Some(CompressedRistretto(tmp)) + CompressedRistretto(tmp) } /// Attempt to decompress to an `RistrettoPoint`.