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