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