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
 1#![allow(unused_imports)]
 2use ark_ec::{
 3    models::SWModelParameters,
 4    short_weierstrass_jacobian::{GroupAffine, GroupProjective},
 5    AffineCurve, PairingEngine, ProjectiveCurve,
 6};
 7use ark_ff::{
 8    fields::{Field, FpParameters, PrimeField, SquareRootField},
 9    BitIteratorBE, One, UniformRand, Zero,
10};
11use ark_serialize::CanonicalSerialize;
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};
16use ark_algebra_test_templates::{
17    curves::*, generate_bilinearity_test, generate_g1_generator_raw_test, generate_g1_test,
18    generate_g2_test, groups::*, msm::*,
19};
20use ark_ec::group::Group;
21
22generate_g1_test!(bls12_381; curve_tests; sw_tests;);
23generate_g2_test!(bls12_381; curve_tests; sw_tests;);
24generate_bilinearity_test!(Bls12_381, Fq12);
25generate_g1_generator_raw_test!(bls12_381, 4);
26
27#[test]
28fn test_g1_endomorphism_beta() {
29    assert!(g1::BETA.pow(&[3u64]).is_one());
30}
31
32#[test]
33fn test_g1_subgroup_membership_via_endomorphism() {
34    let mut rng = test_rng();
35    let generator = G1Projective::rand(&mut rng).into_affine();
36    assert!(generator.is_in_correct_subgroup_assuming_on_curve());
37}
38
39#[test]
40fn test_g1_subgroup_non_membership_via_endomorphism() {
41    let mut rng = test_rng();
42    loop {
43        let x = Fq::rand(&mut rng);
44        let greatest = rng.gen();
45
46        if let Some(p) = G1Affine::get_point_from_x(x, greatest) {
47            if !p.into_projective().mul(Fr::characteristic()).is_zero() {
48                assert!(!p.is_in_correct_subgroup_assuming_on_curve());
49                return;
50            }
51        }
52    }
53}
54
55#[test]
56fn test_g2_subgroup_membership_via_endomorphism() {
57    let mut rng = test_rng();
58    let generator = G2Projective::rand(&mut rng).into_affine();
59    assert!(generator.is_in_correct_subgroup_assuming_on_curve());
60}
61
62#[test]
63fn test_g2_subgroup_non_membership_via_endomorphism() {
64    let mut rng = test_rng();
65    loop {
66        let x = Fq2::rand(&mut rng);
67        let greatest = rng.gen();
68
69        if let Some(p) = G2Affine::get_point_from_x(x, greatest) {
70            if !p.into_projective().mul(Fr::characteristic()).is_zero() {
71                assert!(!p.is_in_correct_subgroup_assuming_on_curve());
72                return;
73            }
74        }
75    }
76}