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}