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    One, Zero,
 6};
 7use ark_serialize::CanonicalSerialize;
 8use ark_std::rand::Rng;
 9use ark_std::test_rng;
10use core::ops::{AddAssign, MulAssign};
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}