ark-curves-cherry-picked/ed_on_bls12_381/src/curves/tests.rs
ed_on_bls12_381/src/curves/tests.rsRaw
1use ark_ec::{AffineCurve, ProjectiveCurve};
2use ark_ff::{bytes::FromBytes, Zero};
3use ark_std::{rand::Rng, str::FromStr, test_rng};
4
5use crate::*;
6
7use ark_algebra_test_templates::{curves::*, groups::*};
8
9#[test]
10fn test_projective_curve() {
11 curve_tests::<EdwardsProjective>();
12
13 edwards_tests::<JubjubParameters>();
14 montgomery_conversion_test::<JubjubParameters>();
15 sw_tests::<JubjubParameters>();
16}
17
18#[test]
19fn test_projective_group() {
20 let mut rng = test_rng();
21 let a = rng.gen();
22 let b = rng.gen();
23
24 let c = rng.gen();
25 let d = rng.gen();
26
27 for _i in 0..100 {
28 group_test::<EdwardsProjective>(a, b);
29 group_test::<SWProjective>(c, d);
30 }
31}
32
33#[test]
34fn test_affine_group() {
35 let mut rng = test_rng();
36 let a: EdwardsAffine = rng.gen();
37 let b: EdwardsAffine = rng.gen();
38 for _i in 0..100 {
39 group_test::<EdwardsAffine>(a, b);
40 }
41}
42
43#[test]
44fn test_generator() {
45 // edward curve
46 let generator = EdwardsAffine::prime_subgroup_generator();
47 assert!(generator.is_on_curve());
48 assert!(generator.is_in_correct_subgroup_assuming_on_curve());
49
50 // weierstrass curve
51 let generator = SWAffine::prime_subgroup_generator();
52 assert!(generator.is_on_curve());
53 assert!(generator.is_in_correct_subgroup_assuming_on_curve());
54}
55
56#[test]
57fn test_conversion() {
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
72#[test]
73fn test_scalar_multiplication() {
74 let f1 = Fr::from_str(
75 "4691331900926794624732159288782398864809513177368446695323460897088210774597",
76 )
77 .unwrap();
78 let f2 = Fr::from_str(
79 "1305028103380024953477151132159456965337646722479526711736847301646466538045",
80 )
81 .unwrap();
82
83 let g = EdwardsAffine::from_str(
84 "(1158870117176967269192899343636553522971009777237254192973081388797299308391, \
85 36933624999642413792569726058244472742169727126562409632889593958355839948294)",
86 )
87 .unwrap();
88 let f1f2g = EdwardsAffine::from_str(
89 "(12638652891150111215300246576936483137884466359309882317048163368620501191944, \
90 38385045634663742820428406709832518145724237919360177362175527604556651918148)",
91 )
92 .unwrap();
93
94 assert!(!g.is_zero());
95 assert!(!f1f2g.is_zero());
96
97 let f1g = g.mul(f1).into_affine();
98 assert_eq!(g.mul(f1 * &f2).into_affine(), f1f2g);
99 assert_eq!(f1g.mul(f2).into_affine(), f1f2g);
100}
101
102#[test]
103fn test_bytes() {
104 let g_from_repr = EdwardsAffine::from_str(
105 "(1158870117176967269192899343636553522971009777237254192973081388797299308391, \
106 36933624999642413792569726058244472742169727126562409632889593958355839948294)",
107 )
108 .unwrap();
109
110 let g_bytes = ark_ff::to_bytes![g_from_repr].unwrap();
111 let g = EdwardsAffine::read(g_bytes.as_slice()).unwrap();
112 assert_eq!(g_from_repr, g);
113}
114
115#[test]
116fn test_montgomery_conversion() {
117 montgomery_conversion_test::<JubjubParameters>();
118}