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}