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