ark-curves-cherry-picked/bn254/src/curves/tests.rs
bn254/src/curves/tests.rsRaw
1#![allow(unused_imports)]
2use ark_ec::{models::SWModelParameters, AffineCurve, PairingEngine, ProjectiveCurve};
3use ark_ff::{
4 fields::{Field, FpParameters, PrimeField, SquareRootField},
5 One, Zero,
6};
7use ark_serialize::CanonicalSerialize;
8use ark_std::test_rng;
9use core::ops::{AddAssign, MulAssign};
10use rand::Rng;
11
12use crate::{g1, g2, Bn254, Fq, Fq12, Fq2, Fr, G1Affine, G1Projective, G2Affine, G2Projective};
13
14use ark_algebra_test_templates::{curves::*, groups::*};
15
16#[test]
17fn test_g1_projective_curve() {
18 curve_tests::<G1Projective>();
19
20 sw_tests::<g1::Parameters>();
21}
22
23#[test]
24fn test_g1_projective_group() {
25 let mut rng = test_rng();
26 let a: G1Projective = rng.gen();
27 let b: G1Projective = rng.gen();
28 group_test(a, b);
29}
30
31#[test]
32fn test_g1_generator() {
33 let generator = G1Affine::prime_subgroup_generator();
34 assert!(generator.is_on_curve());
35 assert!(generator.is_in_correct_subgroup_assuming_on_curve());
36}
37
38#[test]
39fn test_g2_projective_curve() {
40 curve_tests::<G2Projective>();
41
42 sw_tests::<g2::Parameters>();
43}
44
45#[test]
46fn test_g2_projective_group() {
47 let mut rng = test_rng();
48 let a: G2Projective = rng.gen();
49 let b: G2Projective = rng.gen();
50 group_test(a, b);
51}
52
53#[test]
54fn test_g2_generator() {
55 let generator = G2Affine::prime_subgroup_generator();
56 assert!(generator.is_on_curve());
57 assert!(generator.is_in_correct_subgroup_assuming_on_curve());
58}
59
60#[test]
61fn test_bilinearity() {
62 let mut rng = test_rng();
63 let a: G1Projective = rng.gen();
64 let b: G2Projective = rng.gen();
65 let s: Fr = rng.gen();
66
67 let mut sa = a;
68 sa.mul_assign(s);
69 let mut sb = b;
70 sb.mul_assign(s);
71
72 let ans1 = Bn254::pairing(sa, b);
73 let ans2 = Bn254::pairing(a, sb);
74 let ans3 = Bn254::pairing(a, b).pow(s.into_repr());
75
76 assert_eq!(ans1, ans2);
77 assert_eq!(ans2, ans3);
78
79 assert_ne!(ans1, Fq12::one());
80 assert_ne!(ans2, Fq12::one());
81 assert_ne!(ans3, Fq12::one());
82
83 assert_eq!(ans1.pow(Fr::characteristic()), Fq12::one());
84 assert_eq!(ans2.pow(Fr::characteristic()), Fq12::one());
85 assert_eq!(ans3.pow(Fr::characteristic()), Fq12::one());
86}