#![allow(unused_imports)]
|
|
use ark_ec::{
|
|
models::SWModelParameters,
|
|
short_weierstrass_jacobian::{GroupAffine, GroupProjective},
|
|
AffineCurve, PairingEngine, ProjectiveCurve,
|
|
};
|
|
use ark_ff::{
|
|
fields::{Field, FpParameters, PrimeField, SquareRootField},
|
|
BitIteratorBE, One, UniformRand, Zero,
|
|
};
|
|
use ark_serialize::CanonicalSerialize;
|
|
use ark_std::{rand::Rng, test_rng};
|
|
use core::ops::{AddAssign, MulAssign};
|
|
|
|
use crate::{g1, g2, Bls12_381, Fq, Fq12, Fq2, Fr, G1Affine, G1Projective, G2Affine, G2Projective};
|
|
use ark_algebra_test_templates::{
|
|
curves::*, generate_bilinearity_test, generate_g1_generator_raw_test, generate_g1_test,
|
|
generate_g2_test, groups::*, msm::*,
|
|
};
|
|
use ark_ec::group::Group;
|
|
|
|
generate_g1_test!(bls12_381; curve_tests; sw_tests;);
|
|
generate_g2_test!(bls12_381; curve_tests; sw_tests;);
|
|
generate_bilinearity_test!(Bls12_381, Fq12);
|
|
generate_g1_generator_raw_test!(bls12_381, 4);
|
|
|
|
#[test]
|
|
fn test_g1_endomorphism_beta() {
|
|
assert!(g1::BETA.pow(&[3u64]).is_one());
|
|
}
|
|
|
|
#[test]
|
|
fn test_g1_subgroup_membership_via_endomorphism() {
|
|
let mut rng = test_rng();
|
|
let generator = G1Projective::rand(&mut rng).into_affine();
|
|
assert!(generator.is_in_correct_subgroup_assuming_on_curve());
|
|
}
|
|
|
|
#[test]
|
|
fn test_g1_subgroup_non_membership_via_endomorphism() {
|
|
let mut rng = test_rng();
|
|
loop {
|
|
let x = Fq::rand(&mut rng);
|
|
let greatest = rng.gen();
|
|
|
|
if let Some(p) = G1Affine::get_point_from_x(x, greatest) {
|
|
if !p.into_projective().mul(Fr::characteristic()).is_zero() {
|
|
assert!(!p.is_in_correct_subgroup_assuming_on_curve());
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_g2_subgroup_membership_via_endomorphism() {
|
|
let mut rng = test_rng();
|
|
let generator = G2Projective::rand(&mut rng).into_affine();
|
|
assert!(generator.is_in_correct_subgroup_assuming_on_curve());
|
|
}
|
|
|
|
#[test]
|
|
fn test_g2_subgroup_non_membership_via_endomorphism() {
|
|
let mut rng = test_rng();
|
|
loop {
|
|
let x = Fq2::rand(&mut rng);
|
|
let greatest = rng.gen();
|
|
|
|
if let Some(p) = G2Affine::get_point_from_x(x, greatest) {
|
|
if !p.into_projective().mul(Fr::characteristic()).is_zero() {
|
|
assert!(!p.is_in_correct_subgroup_assuming_on_curve());
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|