arnaucube
arnaucube/ark-curves-cherry-pickedPublic Self-hosted repository
ark-curves-cherry-picked/ed_on_bls12_381_bandersnatch/src/curves/tests.rs
ed_on_bls12_381_bandersnatch/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::<BandersnatchParameters>();
 13    montgomery_conversion_test::<BandersnatchParameters>();
 14    sw_tests::<BandersnatchParameters>();
 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
 23    let c = rng.gen();
 24    let d = rng.gen();
 25
 26    for _i in 0..100 {
 27        group_test::<EdwardsProjective>(a, b);
 28        group_test::<SWProjective>(c, d);
 29    }
 30}
 31
 32#[test]
 33fn test_affine_group() {
 34    let mut rng = test_rng();
 35    let a: EdwardsAffine = rng.gen();
 36    let b: EdwardsAffine = rng.gen();
 37    for _i in 0..100 {
 38        group_test::<EdwardsAffine>(a, b);
 39    }
 40}
 41
 42#[test]
 43fn test_generator() {
 44    // edward curve
 45    let generator = EdwardsAffine::prime_subgroup_generator();
 46    assert!(generator.is_on_curve());
 47    assert!(generator.is_in_correct_subgroup_assuming_on_curve());
 48
 49    // weierstrass curve
 50    let generator = SWAffine::prime_subgroup_generator();
 51    assert!(generator.is_on_curve());
 52    assert!(generator.is_in_correct_subgroup_assuming_on_curve());
 53}
 54
 55#[test]
 56fn test_conversion() {
 57    // edward curve
 58    let mut rng = test_rng();
 59    let a: EdwardsAffine = rng.gen();
 60    let b: EdwardsAffine = rng.gen();
 61    let a_b = {
 62        use ark_ec::group::Group;
 63        (a + &b).double().double()
 64    };
 65    let a_b2 = (a.into_projective() + &b.into_projective())
 66        .double()
 67        .double();
 68    assert_eq!(a_b, a_b2.into_affine());
 69    assert_eq!(a_b.into_projective(), a_b2);
 70
 71    // weierstrass curve
 72    let mut rng = test_rng();
 73    let a: SWProjective = rng.gen();
 74    let b: SWProjective = rng.gen();
 75    let a_b = { (a + &b).double().double() };
 76    let a_b2 = (a + &b).double().double();
 77    assert_eq!(a_b.into_affine(), a_b2.into_affine());
 78}
 79
 80#[test]
 81fn test_scalar_multiplication() {
 82    let f1 = Fr::from_str(
 83        "4257185345094557079734489188109952172285839137338142340240392707284963971010",
 84    )
 85    .unwrap();
 86    let f2 = Fr::from_str(
 87        "1617998875791656082457755819308421023664764572929977389209373068350490665160",
 88    )
 89    .unwrap();
 90
 91    let g = EdwardsAffine::from_str(
 92        "(29627151942733444043031429156003786749302466371339015363120350521834195802525, \
 93         27488387519748396681411951718153463804682561779047093991696427532072116857978)",
 94    )
 95    .unwrap();
 96    let f1f2g = EdwardsAffine::from_str(
 97        "(16530491029447613915334753043669938793793987372416328257719459807614119987301, \
 98         42481140308370805476764840229335460092474682686441442216596889726548353970772)",
 99    )
100    .unwrap();
101
102    assert!(!g.is_zero());
103    assert!(!f1f2g.is_zero());
104
105    let f1g = g.mul(f1).into_affine();
106    assert_eq!(g.mul(f1 * &f2).into_affine(), f1f2g);
107    assert_eq!(f1g.mul(f2).into_affine(), f1f2g);
108}
109
110#[test]
111fn test_bytes() {
112    let g_from_repr = EdwardsAffine::from_str(
113        "(29627151942733444043031429156003786749302466371339015363120350521834195802525, \
114         27488387519748396681411951718153463804682561779047093991696427532072116857978)",
115    )
116    .unwrap();
117
118    let g_bytes = ark_ff::to_bytes![g_from_repr].unwrap();
119    let g = EdwardsAffine::read(g_bytes.as_slice()).unwrap();
120    assert_eq!(g_from_repr, g);
121}
122
123#[test]
124fn test_montgomery_conversion() {
125    montgomery_conversion_test::<BandersnatchParameters>();
126}