ark-curves-cherry-picked/ed_on_bls12_381_bandersnatch/src/curves/tests.rs
ed_on_bls12_381_bandersnatch/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::<BandersnatchParameters>();
13 montgomery_conversion_test::<BandersnatchParameters>();
14 sw_tests::<BandersnatchParameters>();
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 // edward curve
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 // weierstrass curve
72 let mut rng = test_rng();
73 let a: SWProjective = rng.gen();
74 let b: SWProjective = rng.gen();
75 let a_b = { (a + &b).double().double() };
76 let a_b2 = (a + &b).double().double();
77 assert_eq!(a_b.into_affine(), a_b2.into_affine());
78}
79
80#[test]
81fn test_scalar_multiplication() {
82 let f1 = Fr::from_str(
83 "4257185345094557079734489188109952172285839137338142340240392707284963971010",
84 )
85 .unwrap();
86 let f2 = Fr::from_str(
87 "1617998875791656082457755819308421023664764572929977389209373068350490665160",
88 )
89 .unwrap();
90
91 let g = EdwardsAffine::from_str(
92 "(29627151942733444043031429156003786749302466371339015363120350521834195802525, \
93 27488387519748396681411951718153463804682561779047093991696427532072116857978)",
94 )
95 .unwrap();
96 let f1f2g = EdwardsAffine::from_str(
97 "(16530491029447613915334753043669938793793987372416328257719459807614119987301, \
98 42481140308370805476764840229335460092474682686441442216596889726548353970772)",
99 )
100 .unwrap();
101
102 assert!(!g.is_zero());
103 assert!(!f1f2g.is_zero());
104
105 let f1g = g.mul(f1).into_affine();
106 assert_eq!(g.mul(f1 * &f2).into_affine(), f1f2g);
107 assert_eq!(f1g.mul(f2).into_affine(), f1f2g);
108}
109
110#[test]
111fn test_bytes() {
112 let g_from_repr = EdwardsAffine::from_str(
113 "(29627151942733444043031429156003786749302466371339015363120350521834195802525, \
114 27488387519748396681411951718153463804682561779047093991696427532072116857978)",
115 )
116 .unwrap();
117
118 let g_bytes = ark_ff::to_bytes![g_from_repr].unwrap();
119 let g = EdwardsAffine::read(g_bytes.as_slice()).unwrap();
120 assert_eq!(g_from_repr, g);
121}
122
123#[test]
124fn test_montgomery_conversion() {
125 montgomery_conversion_test::<BandersnatchParameters>();
126}