Add alloc feature gates to simd tests that need it (#433)

This commit is contained in:
Tony Arcieri 2022-11-13 22:11:23 -07:00 committed by GitHub
parent 7d275100bf
commit d05afa02a3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 35 additions and 4 deletions

View file

@ -1389,6 +1389,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn impl_sum() { fn impl_sum() {
// Test that sum works for non-empty iterators // Test that sum works for non-empty iterators
let BASE = constants::ED25519_BASEPOINT_POINT; let BASE = constants::ED25519_BASEPOINT_POINT;
@ -1487,6 +1488,7 @@ mod test {
} }
// A single iteration of a consistency check for MSM. // A single iteration of a consistency check for MSM.
#[cfg(feature = "alloc")]
fn multiscalar_consistency_iter(n: usize) { fn multiscalar_consistency_iter(n: usize) {
use core::iter; use core::iter;
let mut rng = rand::thread_rng(); let mut rng = rand::thread_rng();
@ -1521,6 +1523,7 @@ mod test {
// parameters. // parameters.
#[test] #[test]
#[cfg(feature = "alloc")]
fn multiscalar_consistency_n_100() { fn multiscalar_consistency_n_100() {
let iters = 50; let iters = 50;
for _ in 0..iters { for _ in 0..iters {
@ -1529,6 +1532,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn multiscalar_consistency_n_250() { fn multiscalar_consistency_n_250() {
let iters = 50; let iters = 50;
for _ in 0..iters { for _ in 0..iters {
@ -1537,6 +1541,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn multiscalar_consistency_n_500() { fn multiscalar_consistency_n_500() {
let iters = 50; let iters = 50;
for _ in 0..iters { for _ in 0..iters {
@ -1545,6 +1550,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn multiscalar_consistency_n_1000() { fn multiscalar_consistency_n_1000() {
let iters = 50; let iters = 50;
for _ in 0..iters { for _ in 0..iters {
@ -1553,6 +1559,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn vartime_precomputed_vs_nonprecomputed_multiscalar() { fn vartime_precomputed_vs_nonprecomputed_multiscalar() {
let mut rng = rand::thread_rng(); let mut rng = rand::thread_rng();
@ -1609,6 +1616,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn multiscalar_mul_vs_ed25519py() { fn multiscalar_mul_vs_ed25519py() {
let A = A_TIMES_BASEPOINT.decompress().unwrap(); let A = A_TIMES_BASEPOINT.decompress().unwrap();
let result = EdwardsPoint::vartime_multiscalar_mul( let result = EdwardsPoint::vartime_multiscalar_mul(
@ -1619,6 +1627,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn multiscalar_mul_vartime_vs_consttime() { fn multiscalar_mul_vartime_vs_consttime() {
let A = A_TIMES_BASEPOINT.decompress().unwrap(); let A = A_TIMES_BASEPOINT.decompress().unwrap();
let result_vartime = EdwardsPoint::vartime_multiscalar_mul( let result_vartime = EdwardsPoint::vartime_multiscalar_mul(
@ -1663,6 +1672,7 @@ mod test {
// https://github.com/signalapp/libsignal-protocol-c/ // // https://github.com/signalapp/libsignal-protocol-c/ //
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
#[cfg(feature = "alloc")]
fn test_vectors() -> Vec<Vec<&'static str>> { fn test_vectors() -> Vec<Vec<&'static str>> {
vec![ vec![
vec![ vec![
@ -1709,6 +1719,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn elligator_signal_test_vectors() { fn elligator_signal_test_vectors() {
for vector in test_vectors().iter() { for vector in test_vectors().iter() {
let input = hex::decode(vector[0]).unwrap(); let input = hex::decode(vector[0]).unwrap();

View file

@ -378,6 +378,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn batch_invert_a_matches_nonbatched() { fn batch_invert_a_matches_nonbatched() {
let a = FieldElement::from_bytes(&A_BYTES); let a = FieldElement::from_bytes(&A_BYTES);
let ap58 = FieldElement::from_bytes(&AP58_BYTES); let ap58 = FieldElement::from_bytes(&AP58_BYTES);
@ -495,6 +496,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn batch_invert_empty() { fn batch_invert_empty() {
FieldElement::batch_invert(&mut []); FieldElement::batch_invert(&mut []);
} }

View file

@ -27,7 +27,8 @@
// External dependencies: // External dependencies:
//------------------------------------------------------------------------ //------------------------------------------------------------------------
#[cfg(all(feature = "alloc", not(feature = "std")))] #[cfg(feature = "alloc")]
#[allow(unused_imports)]
#[macro_use] #[macro_use]
extern crate alloc; extern crate alloc;

View file

@ -470,9 +470,9 @@ mod test {
]; ];
#[test] #[test]
#[cfg(feature = "std")] // Vec #[cfg(feature = "alloc")] // Vec
fn montgomery_elligator_correct() { fn montgomery_elligator_correct() {
let bytes: std::vec::Vec<u8> = (0u8..32u8).collect(); let bytes: alloc::vec::Vec<u8> = (0u8..32u8).collect();
let bits_in: [u8; 32] = (&bytes[..]).try_into().expect("Range invariant broken"); let bits_in: [u8; 32] = (&bytes[..]).try_into().expect("Range invariant broken");
let fe = FieldElement::from_bytes(&bits_in); let fe = FieldElement::from_bytes(&bits_in);

View file

@ -1178,6 +1178,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn impl_sum() { fn impl_sum() {
// Test that sum works for non-empty iterators // Test that sum works for non-empty iterators
let BASE = constants::RISTRETTO_BASEPOINT_POINT; let BASE = constants::RISTRETTO_BASEPOINT_POINT;
@ -1500,6 +1501,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn double_and_compress_1024_random_points() { fn double_and_compress_1024_random_points() {
let mut rng = OsRng; let mut rng = OsRng;
@ -1516,6 +1518,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn vartime_precomputed_vs_nonprecomputed_multiscalar() { fn vartime_precomputed_vs_nonprecomputed_multiscalar() {
let mut rng = rand::thread_rng(); let mut rng = rand::thread_rng();

View file

@ -1509,6 +1509,7 @@ mod test {
#[allow(non_snake_case)] #[allow(non_snake_case)]
#[test] #[test]
#[cfg(feature = "alloc")]
fn impl_product() { fn impl_product() {
// Test that product works for non-empty iterators // Test that product works for non-empty iterators
let X_Y_vector = vec![X, Y]; let X_Y_vector = vec![X, Y];
@ -1538,6 +1539,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn impl_sum() { fn impl_sum() {
// Test that sum works for non-empty iterators // Test that sum works for non-empty iterators
let two = Scalar::from(2u64); let two = Scalar::from(2u64);
@ -1705,7 +1707,7 @@ mod test {
assert_eq!(X, bincode::deserialize(X.as_bytes()).unwrap(),); assert_eq!(X, bincode::deserialize(X.as_bytes()).unwrap(),);
} }
#[cfg(debug_assertions)] #[cfg(all(debug_assertions, feature = "alloc"))]
#[test] #[test]
#[should_panic] #[should_panic]
fn batch_invert_with_a_zero_input_panics() { fn batch_invert_with_a_zero_input_panics() {
@ -1716,11 +1718,13 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn batch_invert_empty() { fn batch_invert_empty() {
assert_eq!(Scalar::one(), Scalar::batch_invert(&mut [])); assert_eq!(Scalar::one(), Scalar::batch_invert(&mut []));
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn batch_invert_consistency() { fn batch_invert_consistency() {
let mut x = Scalar::from(1u64); let mut x = Scalar::from(1u64);
let mut v1: Vec<_> = (0..16) let mut v1: Vec<_> = (0..16)
@ -1783,6 +1787,7 @@ mod test {
} }
#[test] #[test]
#[cfg(feature = "alloc")]
fn test_read_le_u64_into() { fn test_read_le_u64_into() {
let cases: &[(&[u8], &[u64])] = &[ let cases: &[(&[u8], &[u64])] = &[
( (

View file

@ -84,6 +84,8 @@ pub trait MultiscalarMul {
/// iterators returning either `Scalar`s or `&Scalar`s. /// iterators returning either `Scalar`s or `&Scalar`s.
/// ///
/// ``` /// ```
/// # #[cfg(feature = "alloc")]
/// # {
/// use curve25519_dalek::constants; /// use curve25519_dalek::constants;
/// use curve25519_dalek::traits::MultiscalarMul; /// use curve25519_dalek::traits::MultiscalarMul;
/// use curve25519_dalek::ristretto::RistrettoPoint; /// use curve25519_dalek::ristretto::RistrettoPoint;
@ -110,6 +112,7 @@ pub trait MultiscalarMul {
/// // Note: minus_abc.into_iter(): Iterator<Item=Scalar> /// // Note: minus_abc.into_iter(): Iterator<Item=Scalar>
/// ///
/// assert_eq!(A1.compress(), (-A2).compress()); /// assert_eq!(A1.compress(), (-A2).compress());
/// # }
/// ``` /// ```
fn multiscalar_mul<I, J>(scalars: I, points: J) -> Self::Point fn multiscalar_mul<I, J>(scalars: I, points: J) -> Self::Point
where where
@ -136,6 +139,8 @@ pub trait VartimeMultiscalarMul {
/// inlining point decompression into the multiscalar call, /// inlining point decompression into the multiscalar call,
/// avoiding the need for temporary buffers. /// avoiding the need for temporary buffers.
/// ``` /// ```
/// #[cfg(feature = "alloc")]
/// # {
/// use curve25519_dalek::constants; /// use curve25519_dalek::constants;
/// use curve25519_dalek::traits::VartimeMultiscalarMul; /// use curve25519_dalek::traits::VartimeMultiscalarMul;
/// use curve25519_dalek::ristretto::RistrettoPoint; /// use curve25519_dalek::ristretto::RistrettoPoint;
@ -175,6 +180,7 @@ pub trait VartimeMultiscalarMul {
/// ); /// );
/// ///
/// assert_eq!(A3, Some(A1+A1)); /// assert_eq!(A3, Some(A1+A1));
/// # }
/// ``` /// ```
fn optional_multiscalar_mul<I, J>(scalars: I, points: J) -> Option<Self::Point> fn optional_multiscalar_mul<I, J>(scalars: I, points: J) -> Option<Self::Point>
where where
@ -199,6 +205,8 @@ pub trait VartimeMultiscalarMul {
/// iterators returning either `Scalar`s or `&Scalar`s. /// iterators returning either `Scalar`s or `&Scalar`s.
/// ///
/// ``` /// ```
/// #[cfg(feature = "alloc")]
/// # {
/// use curve25519_dalek::constants; /// use curve25519_dalek::constants;
/// use curve25519_dalek::traits::VartimeMultiscalarMul; /// use curve25519_dalek::traits::VartimeMultiscalarMul;
/// use curve25519_dalek::ristretto::RistrettoPoint; /// use curve25519_dalek::ristretto::RistrettoPoint;
@ -225,6 +233,7 @@ pub trait VartimeMultiscalarMul {
/// // Note: minus_abc.into_iter(): Iterator<Item=Scalar> /// // Note: minus_abc.into_iter(): Iterator<Item=Scalar>
/// ///
/// assert_eq!(A1.compress(), (-A2).compress()); /// assert_eq!(A1.compress(), (-A2).compress());
/// # }
/// ``` /// ```
fn vartime_multiscalar_mul<I, J>(scalars: I, points: J) -> Self::Point fn vartime_multiscalar_mul<I, J>(scalars: I, points: J) -> Self::Point
where where