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