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