arnaucube
arnaucube/ark-curves-cherry-pickedPublic Self-hosted repository
ark-curves-cherry-picked/ed_on_bls12_381/src/curves/tests.rs
ed_on_bls12_381/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::<JubjubParameters>();
 13    montgomery_conversion_test::<JubjubParameters>();
 14    sw_tests::<JubjubParameters>();
 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    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
 71#[test]
 72fn test_scalar_multiplication() {
 73    let f1 = Fr::from_str(
 74        "4691331900926794624732159288782398864809513177368446695323460897088210774597",
 75    )
 76    .unwrap();
 77    let f2 = Fr::from_str(
 78        "1305028103380024953477151132159456965337646722479526711736847301646466538045",
 79    )
 80    .unwrap();
 81
 82    let g = EdwardsAffine::from_str(
 83        "(1158870117176967269192899343636553522971009777237254192973081388797299308391, \
 84         36933624999642413792569726058244472742169727126562409632889593958355839948294)",
 85    )
 86    .unwrap();
 87    let f1f2g = EdwardsAffine::from_str(
 88        "(12638652891150111215300246576936483137884466359309882317048163368620501191944, \
 89         38385045634663742820428406709832518145724237919360177362175527604556651918148)",
 90    )
 91    .unwrap();
 92
 93    assert!(!g.is_zero());
 94    assert!(!f1f2g.is_zero());
 95
 96    let f1g = g.mul(f1).into_affine();
 97    assert_eq!(g.mul(f1 * &f2).into_affine(), f1f2g);
 98    assert_eq!(f1g.mul(f2).into_affine(), f1f2g);
 99}
100
101#[test]
102fn test_bytes() {
103    let g_from_repr = EdwardsAffine::from_str(
104        "(1158870117176967269192899343636553522971009777237254192973081388797299308391, \
105         36933624999642413792569726058244472742169727126562409632889593958355839948294)",
106    )
107    .unwrap();
108
109    let g_bytes = ark_ff::to_bytes![g_from_repr].unwrap();
110    let g = EdwardsAffine::read(g_bytes.as_slice()).unwrap();
111    assert_eq!(g_from_repr, g);
112}
113
114#[test]
115fn test_montgomery_conversion() {
116    montgomery_conversion_test::<JubjubParameters>();
117}