arnaucube
arnaucube/ark-curves-cherry-pickedPublic Self-hosted repository
ark-curves-cherry-picked/bls12_381/src/curves/tests.rs
bls12_381/src/curves/tests.rsRaw
 1use ark_algebra_test_templates::{
 2    curves::*, generate_bilinearity_test, generate_g1_generator_raw_test, generate_g1_test,
 3    generate_g2_test, groups::*, msm::*,
 4};
 5use ark_ec::{models::SWModelParameters, AffineCurve, PairingEngine, ProjectiveCurve};
 6use ark_ff::{
 7    fields::{Field, PrimeField, SquareRootField},
 8    One, UniformRand, Zero,
 9};
10use ark_std::{rand::Rng, test_rng};
11use core::ops::{AddAssign, MulAssign};
12
13use crate::{g1, g2, Bls12_381, Fq, Fq12, Fq2, Fr, G1Affine, G1Projective, G2Affine, G2Projective};
14
15generate_g1_test!(bls12_381; curve_tests; sw_tests;);
16generate_g2_test!(bls12_381; curve_tests; sw_tests;);
17generate_bilinearity_test!(Bls12_381, Fq12);
18generate_g1_generator_raw_test!(bls12_381, 4);
19
20#[test]
21fn test_g1_endomorphism_beta() {
22    assert!(g1::BETA.pow(&[3u64]).is_one());
23}
24
25#[test]
26fn test_g1_subgroup_membership_via_endomorphism() {
27    let mut rng = test_rng();
28    let generator = G1Projective::rand(&mut rng).into_affine();
29    assert!(generator.is_in_correct_subgroup_assuming_on_curve());
30}
31
32#[test]
33fn test_g1_subgroup_non_membership_via_endomorphism() {
34    let mut rng = test_rng();
35    loop {
36        let x = Fq::rand(&mut rng);
37        let greatest = rng.gen();
38
39        if let Some(p) = G1Affine::get_point_from_x(x, greatest) {
40            if !p.into_projective().mul(Fr::characteristic()).is_zero() {
41                assert!(!p.is_in_correct_subgroup_assuming_on_curve());
42                return;
43            }
44        }
45    }
46}
47
48#[test]
49fn test_g2_subgroup_membership_via_endomorphism() {
50    let mut rng = test_rng();
51    let generator = G2Projective::rand(&mut rng).into_affine();
52    assert!(generator.is_in_correct_subgroup_assuming_on_curve());
53}
54
55#[test]
56fn test_g2_subgroup_non_membership_via_endomorphism() {
57    let mut rng = test_rng();
58    loop {
59        let x = Fq2::rand(&mut rng);
60        let greatest = rng.gen();
61
62        if let Some(p) = G2Affine::get_point_from_x(x, greatest) {
63            if !p.into_projective().mul(Fr::characteristic()).is_zero() {
64                assert!(!p.is_in_correct_subgroup_assuming_on_curve());
65                return;
66            }
67        }
68    }
69}