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
43 .into_projective()
44 .mul_bigint(Fr::characteristic())
45 .is_zero()
46 {
47 assert!(!p.is_in_correct_subgroup_assuming_on_curve());
48 return;
49 }
50 }
51 }
52}
53
54#[test]
55fn test_g2_subgroup_membership_via_endomorphism() {
56 let mut rng = test_rng();
57 let generator = G2Projective::rand(&mut rng).into_affine();
58 assert!(generator.is_in_correct_subgroup_assuming_on_curve());
59}
60
61#[test]
62fn test_g2_subgroup_non_membership_via_endomorphism() {
63 let mut rng = test_rng();
64 loop {
65 let x = Fq2::rand(&mut rng);
66 let greatest = rng.gen();
67
68 if let Some(p) = G2Affine::get_point_from_x(x, greatest) {
69 if !p
70 .into_projective()
71 .mul_bigint(Fr::characteristic())
72 .is_zero()
73 {
74 assert!(!p.is_in_correct_subgroup_assuming_on_curve());
75 return;
76 }
77 }
78 }
79}