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