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}