arnaucube
arnaucube/ark-curves-cherry-pickedPublic Self-hosted repository
ark-curves-cherry-picked/ed_on_bn254/src/curves/tests.rs
ed_on_bn254/src/curves/tests.rsRaw
  1use ark_ec::{AffineCurve, ProjectiveCurve};
  2use ark_ff::{bytes::FromBytes, test_rng, Zero};
  3use core::str::FromStr;
  4use rand::Rng;
  5
  6use crate::*;
  7
  8use ark_curve_tests::{curves::*, groups::*};
  9
 10#[test]
 11fn test_projective_curve() {
 12    curve_tests::<EdwardsProjective>();
 13
 14    edwards_tests::<EdwardsParameters>();
 15}
 16
 17#[test]
 18fn test_projective_group() {
 19    let mut rng = test_rng();
 20    let a = rng.gen();
 21    let b = rng.gen();
 22    for _i in 0..100 {
 23        group_test::<EdwardsProjective>(a, b);
 24    }
 25}
 26
 27#[test]
 28fn test_affine_group() {
 29    let mut rng = test_rng();
 30    let a: EdwardsAffine = rng.gen();
 31    let b: EdwardsAffine = rng.gen();
 32    for _i in 0..100 {
 33        group_test::<EdwardsAffine>(a, b);
 34    }
 35}
 36
 37#[test]
 38fn test_generator() {
 39    let generator = EdwardsAffine::prime_subgroup_generator();
 40    assert!(generator.is_on_curve());
 41    assert!(generator.is_in_correct_subgroup_assuming_on_curve());
 42}
 43
 44#[test]
 45fn test_conversion() {
 46    let mut rng = test_rng();
 47    let a: EdwardsAffine = rng.gen();
 48    let b: EdwardsAffine = rng.gen();
 49    let a_b = {
 50        use ark_ec::group::Group;
 51        (a + &b).double().double()
 52    };
 53    let a_b2 = (a.into_projective() + &b.into_projective())
 54        .double()
 55        .double();
 56    assert_eq!(a_b, a_b2.into_affine());
 57    assert_eq!(a_b.into_projective(), a_b2);
 58}
 59
 60#[test]
 61fn test_scalar_multiplication() {
 62    let f1 = Fr::from_str(
 63        "4691331900926794624732159288782398864809513177368446695323460897088210774597",
 64    )
 65    .unwrap();
 66    let f2 = Fr::from_str(
 67        "1305028103380024953477151132159456965337646722479526711736847301646466538045",
 68    )
 69    .unwrap();
 70
 71    let g = EdwardsAffine::from_str(
 72        "(15863623088992515880085393097393553694825975317405843389771115419751650972659, \
 73         16950150798460657717958625567821834550301663161624707787222815936182638968203)",
 74    )
 75    .unwrap();
 76    let f1f2g = EdwardsAffine::from_str(
 77        "(20773645713088336957786354488799297695596635653208610804806657050882264237947, \
 78         19987327827845206670850937090314462639017692512983955920885166014935289314257)",
 79    )
 80    .unwrap();
 81
 82    assert!(!g.is_zero());
 83    assert!(!f1f2g.is_zero());
 84
 85    let f1g = g.mul(f1).into_affine();
 86    assert_eq!(g.mul(f1 * &f2).into_affine(), f1f2g);
 87    assert_eq!(f1g.mul(f2).into_affine(), f1f2g);
 88}
 89
 90#[test]
 91fn test_bytes() {
 92    let g_from_repr = EdwardsAffine::from_str(
 93        "(15863623088992515880085393097393553694825975317405843389771115419751650972659, \
 94         16950150798460657717958625567821834550301663161624707787222815936182638968203)",
 95    )
 96    .unwrap();
 97
 98    let g_bytes = ark_ff::to_bytes![g_from_repr].unwrap();
 99    let g = EdwardsAffine::read(g_bytes.as_slice()).unwrap();
100    assert_eq!(g_from_repr, g);
101}
102
103#[test]
104fn test_montgomery_conversion() {
105    montgomery_conversion_test::<EdwardsParameters>();
106}