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