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_ec::{AffineCurve, ProjectiveCurve};
  2use ark_ff::{bytes::FromBytes, Zero};
  3use ark_std::{rand::Rng, str::FromStr, test_rng};
  4
  5use crate::*;
  6
  7use ark_algebra_test_templates::{curves::*, groups::*};
  8
  9#[test]
 10fn test_projective_curve() {
 11    curve_tests::<EdwardsProjective>();
 12
 13    edwards_tests::<JubjubParameters>();
 14    montgomery_conversion_test::<JubjubParameters>();
 15    sw_tests::<JubjubParameters>();
 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
 24    let c = rng.gen();
 25    let d = rng.gen();
 26
 27    for _i in 0..100 {
 28        group_test::<EdwardsProjective>(a, b);
 29        group_test::<SWProjective>(c, d);
 30    }
 31}
 32
 33#[test]
 34fn test_affine_group() {
 35    let mut rng = test_rng();
 36    let a: EdwardsAffine = rng.gen();
 37    let b: EdwardsAffine = rng.gen();
 38    for _i in 0..100 {
 39        group_test::<EdwardsAffine>(a, b);
 40    }
 41}
 42
 43#[test]
 44fn test_generator() {
 45    // edward curve
 46    let generator = EdwardsAffine::prime_subgroup_generator();
 47    assert!(generator.is_on_curve());
 48    assert!(generator.is_in_correct_subgroup_assuming_on_curve());
 49
 50    // weierstrass curve
 51    let generator = SWAffine::prime_subgroup_generator();
 52    assert!(generator.is_on_curve());
 53    assert!(generator.is_in_correct_subgroup_assuming_on_curve());
 54}
 55
 56#[test]
 57fn test_conversion() {
 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
 72#[test]
 73fn test_scalar_multiplication() {
 74    let f1 = Fr::from_str(
 75        "4691331900926794624732159288782398864809513177368446695323460897088210774597",
 76    )
 77    .unwrap();
 78    let f2 = Fr::from_str(
 79        "1305028103380024953477151132159456965337646722479526711736847301646466538045",
 80    )
 81    .unwrap();
 82
 83    let g = EdwardsAffine::from_str(
 84        "(1158870117176967269192899343636553522971009777237254192973081388797299308391, \
 85         36933624999642413792569726058244472742169727126562409632889593958355839948294)",
 86    )
 87    .unwrap();
 88    let f1f2g = EdwardsAffine::from_str(
 89        "(12638652891150111215300246576936483137884466359309882317048163368620501191944, \
 90         38385045634663742820428406709832518145724237919360177362175527604556651918148)",
 91    )
 92    .unwrap();
 93
 94    assert!(!g.is_zero());
 95    assert!(!f1f2g.is_zero());
 96
 97    let f1g = g.mul(f1).into_affine();
 98    assert_eq!(g.mul(f1 * &f2).into_affine(), f1f2g);
 99    assert_eq!(f1g.mul(f2).into_affine(), f1f2g);
100}
101
102#[test]
103fn test_bytes() {
104    let g_from_repr = EdwardsAffine::from_str(
105        "(1158870117176967269192899343636553522971009777237254192973081388797299308391, \
106         36933624999642413792569726058244472742169727126562409632889593958355839948294)",
107    )
108    .unwrap();
109
110    let g_bytes = ark_ff::to_bytes![g_from_repr].unwrap();
111    let g = EdwardsAffine::read(g_bytes.as_slice()).unwrap();
112    assert_eq!(g_from_repr, g);
113}
114
115#[test]
116fn test_montgomery_conversion() {
117    montgomery_conversion_test::<JubjubParameters>();
118}