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