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