mirror of
https://github.com/arnaucube/ark-curves-cherry-picked.git
synced 2026-01-08 06:51:32 +01:00
Update MNT6-298
This commit is contained in:
@@ -2,7 +2,7 @@ use ark_ec::{
|
||||
mnt6,
|
||||
models::{ModelParameters, SWModelParameters},
|
||||
};
|
||||
use ark_ff::{biginteger::BigInteger320, field_new};
|
||||
use ark_ff::{field_new};
|
||||
|
||||
use crate::{Fq, Fr};
|
||||
|
||||
@@ -19,25 +19,13 @@ impl ModelParameters for Parameters {
|
||||
}
|
||||
|
||||
impl SWModelParameters for Parameters {
|
||||
/// COEFF_A =
|
||||
/// COEFF_A = 11
|
||||
#[rustfmt::skip]
|
||||
const COEFF_A: Fq = field_new!(Fq, BigInteger320([
|
||||
0xb9b2411bfd0eafef,
|
||||
0xc61a10fadd9fecbd,
|
||||
0x89f128e59811f3fb,
|
||||
0x980c0f780adadabb,
|
||||
0x9ba1f11320,
|
||||
]));
|
||||
const COEFF_A: Fq = field_new!(Fq, "11");
|
||||
|
||||
/// COEFF_B =
|
||||
/// COEFF_B = 106700080510851735677967319632585352256454251201367587890185989362936000262606668469523074
|
||||
#[rustfmt::skip]
|
||||
const COEFF_B: Fq = field_new!(Fq, BigInteger320([
|
||||
0xa94cb16ed8e733b,
|
||||
0xe1ed15e8119bae6,
|
||||
0xae927592157c8121,
|
||||
0x990dbcbc6661cf95,
|
||||
0xecff0892ef,
|
||||
]));
|
||||
const COEFF_B: Fq = field_new!(Fq, "106700080510851735677967319632585352256454251201367587890185989362936000262606668469523074");
|
||||
|
||||
/// COFACTOR = 1
|
||||
const COFACTOR: &'static [u64] = &[1];
|
||||
@@ -45,13 +33,7 @@ impl SWModelParameters for Parameters {
|
||||
/// COFACTOR^(-1) mod r =
|
||||
/// 1
|
||||
#[rustfmt::skip]
|
||||
const COFACTOR_INV: Fr = field_new!(Fr, BigInteger320([
|
||||
1784298994435064924,
|
||||
16852041090100268533,
|
||||
14258261760832875328,
|
||||
2961187778261111191,
|
||||
1929014752195,
|
||||
]));
|
||||
const COFACTOR_INV: Fr = field_new!(Fr, "1");
|
||||
|
||||
/// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y)
|
||||
const AFFINE_GENERATOR_COEFFS: (Self::BaseField, Self::BaseField) =
|
||||
@@ -60,20 +42,8 @@ impl SWModelParameters for Parameters {
|
||||
|
||||
/// G1_GENERATOR_X =
|
||||
#[rustfmt::skip]
|
||||
pub const G1_GENERATOR_X: Fq = field_new!(Fq, BigInteger320([
|
||||
0x1a663562f74e1d24,
|
||||
0xc1d1d583fccd1b79,
|
||||
0xda077538a9763df2,
|
||||
0x70c4a4ea36aa01d9,
|
||||
0x86537578a8,
|
||||
]));
|
||||
pub const G1_GENERATOR_X: Fq = field_new!(Fq, "336685752883082228109289846353937104185698209371404178342968838739115829740084426881123453");
|
||||
|
||||
/// G1_GENERATOR_Y =
|
||||
#[rustfmt::skip]
|
||||
pub const G1_GENERATOR_Y: Fq = field_new!(Fq, BigInteger320([
|
||||
0x7ad5bfd16dcfffb2,
|
||||
0x88dd739252215070,
|
||||
0x43f137a8b517b339,
|
||||
0x9a7fac709a8c463c,
|
||||
0x3140fbc3593,
|
||||
]));
|
||||
pub const G1_GENERATOR_Y: Fq = field_new!(Fq, "402596290139780989709332707716568920777622032073762749862342374583908837063963736098549800");
|
||||
|
||||
@@ -3,9 +3,9 @@ use ark_ec::{
|
||||
mnt6::MNT6Parameters,
|
||||
models::{ModelParameters, SWModelParameters},
|
||||
};
|
||||
use ark_ff::{biginteger::BigInteger320, field_new};
|
||||
use ark_ff::{field_new};
|
||||
|
||||
use crate::{g1, Fq, Fq3, Fr};
|
||||
use crate::{g1, Fq, Fq3, Fr, FQ_ZERO};
|
||||
|
||||
pub type G2Affine = mnt6::G2Affine<crate::Parameters>;
|
||||
pub type G2Projective = mnt6::G2Projective<crate::Parameters>;
|
||||
@@ -19,25 +19,13 @@ impl ModelParameters for Parameters {
|
||||
type ScalarField = Fr;
|
||||
}
|
||||
|
||||
/// MUL_BY_A_C0 = NONRESIDUE * COEFF_A
|
||||
/// MUL_BY_A_C0 = NONRESIDUE * COEFF_A = 5 * 11
|
||||
#[rustfmt::skip]
|
||||
pub const MUL_BY_A_C0: Fq = field_new!(Fq, BigInteger320([
|
||||
0xa07b458bf1496fab,
|
||||
0xde8254e6541f9fb4,
|
||||
0xb1b5cc7bf859c3ea,
|
||||
0xf83c4d58364645a9,
|
||||
0x30a29b55fa2,
|
||||
]));
|
||||
pub const MUL_BY_A_C0: Fq = field_new!(Fq, "55");
|
||||
|
||||
/// MUL_BY_A_C1 = NONRESIDUE * COEFF_A
|
||||
#[rustfmt::skip]
|
||||
pub const MUL_BY_A_C1: Fq = field_new!(Fq, BigInteger320([
|
||||
0xa07b458bf1496fab,
|
||||
0xde8254e6541f9fb4,
|
||||
0xb1b5cc7bf859c3ea,
|
||||
0xf83c4d58364645a9,
|
||||
0x30a29b55fa2,
|
||||
]));
|
||||
pub const MUL_BY_A_C1: Fq = field_new!(Fq, "55");
|
||||
|
||||
/// MUL_BY_A_C2 = COEFF_A
|
||||
pub const MUL_BY_A_C2: Fq = g1::Parameters::COEFF_A;
|
||||
@@ -46,15 +34,10 @@ impl SWModelParameters for Parameters {
|
||||
const COEFF_A: Fq3 = crate::Parameters::TWIST_COEFF_A;
|
||||
#[rustfmt::skip]
|
||||
const COEFF_B: Fq3 = field_new!(Fq3,
|
||||
field_new!(Fq, BigInteger320([
|
||||
0x79a4c2cea3c84026,
|
||||
0x4b50cad0f3233baa,
|
||||
0x9ded82770e7a4410,
|
||||
0x5ade8b105838b95d,
|
||||
0xe4036e0a3a,
|
||||
])),
|
||||
field_new!(Fq, BigInteger320([0, 0, 0, 0, 0])),
|
||||
field_new!(Fq, BigInteger320([0, 0, 0, 0, 0])),
|
||||
// 5 * G1::COEFF_B
|
||||
field_new!(Fq, "57578116384997352636487348509878309737146377454014423897662211075515354005624851787652233"),
|
||||
FQ_ZERO,
|
||||
FQ_ZERO,
|
||||
);
|
||||
|
||||
/// COFACTOR =
|
||||
@@ -76,13 +59,7 @@ impl SWModelParameters for Parameters {
|
||||
/// COFACTOR^(-1) mod r =
|
||||
/// 79320381028210220958891541608841408590854146655427655872973753568875979721417185067925504
|
||||
#[rustfmt::skip]
|
||||
const COFACTOR_INV: Fr = field_new!(Fr, BigInteger320([
|
||||
5837598184463018016,
|
||||
7845868194417674836,
|
||||
12170332588914158076,
|
||||
6950611683754678431,
|
||||
102280178745,
|
||||
]));
|
||||
const COFACTOR_INV: Fr = field_new!(Fr, "79320381028210220958891541608841408590854146655427655872973753568875979721417185067925504");
|
||||
|
||||
/// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y)
|
||||
const AFFINE_GENERATOR_COEFFS: (Self::BaseField, Self::BaseField) =
|
||||
@@ -104,56 +81,10 @@ const G2_GENERATOR_X: Fq3 =
|
||||
const G2_GENERATOR_Y: Fq3 =
|
||||
field_new!(Fq3, G2_GENERATOR_Y_C0, G2_GENERATOR_Y_C1, G2_GENERATOR_Y_C2);
|
||||
|
||||
#[rustfmt::skip]
|
||||
pub const G2_GENERATOR_X_C0: Fq = field_new!(Fq, BigInteger320([
|
||||
0x15ca12fc5d551ea7,
|
||||
0x9e0b2b2b2bb8b979,
|
||||
0xe6e66283ad5a786a,
|
||||
0x46ba0aedcc383c07,
|
||||
0x243853463ed,
|
||||
]));
|
||||
pub const G2_GENERATOR_X_C0: Fq = field_new!(Fq, "421456435772811846256826561593908322288509115489119907560382401870203318738334702321297427");
|
||||
pub const G2_GENERATOR_X_C1: Fq = field_new!(Fq, "103072927438548502463527009961344915021167584706439945404959058962657261178393635706405114");
|
||||
pub const G2_GENERATOR_X_C2: Fq = field_new!(Fq, "143029172143731852627002926324735183809768363301149009204849580478324784395590388826052558");
|
||||
|
||||
#[rustfmt::skip]
|
||||
pub const G2_GENERATOR_X_C1: Fq = field_new!(Fq, BigInteger320([
|
||||
0x2c0e3dd7be176130,
|
||||
0x27a15d879495904b,
|
||||
0x6f1f0d2dd1502a82,
|
||||
0x9782ee3c70834da,
|
||||
0x2c28bb71862,
|
||||
]));
|
||||
|
||||
#[rustfmt::skip]
|
||||
pub const G2_GENERATOR_X_C2: Fq = field_new!(Fq, BigInteger320([
|
||||
0xf3e5f4eb9631e1f1,
|
||||
0x657801e80c50778,
|
||||
0x2d2abb128fee90f3,
|
||||
0x72e58e4c3aa3598c,
|
||||
0x100b8026b9d,
|
||||
]));
|
||||
|
||||
#[rustfmt::skip]
|
||||
pub const G2_GENERATOR_Y_C0: Fq = field_new!(Fq, BigInteger320([
|
||||
0xb1cddd6c64a67c5f,
|
||||
0xa01e90d89aa5d2ba,
|
||||
0x39e9a733be49ed1,
|
||||
0x9438f46f63d3264f,
|
||||
0x12cc928ef10,
|
||||
]));
|
||||
|
||||
#[rustfmt::skip]
|
||||
pub const G2_GENERATOR_Y_C1: Fq = field_new!(Fq, BigInteger320([
|
||||
0xa1529b7265ad4be7,
|
||||
0x21c5e827cf309306,
|
||||
0x9b3d647bd8c70b22,
|
||||
0x42835bf373e4b213,
|
||||
0xd3c77c9ff9,
|
||||
]));
|
||||
|
||||
#[rustfmt::skip]
|
||||
pub const G2_GENERATOR_Y_C2: Fq = field_new!(Fq, BigInteger320([
|
||||
0x610557ec4b58b8df,
|
||||
0x51a23865b52045f1,
|
||||
0x9dcfd915a09da608,
|
||||
0x6d65c95f69adb700,
|
||||
0x2d3c3d195a1,
|
||||
]));
|
||||
pub const G2_GENERATOR_Y_C0: Fq = field_new!(Fq, "464673596668689463130099227575639512541218133445388869383893594087634649237515554342751377");
|
||||
pub const G2_GENERATOR_Y_C1: Fq = field_new!(Fq, "100642907501977375184575075967118071807821117960152743335603284583254620685343989304941678");
|
||||
pub const G2_GENERATOR_Y_C2: Fq = field_new!(Fq, "123019855502969896026940545715841181300275180157288044663051565390506010149881373807142903");
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
use ark_ff::{biginteger::BigInteger320, field_new, fields::FpParameters, Fp3};
|
||||
use ark_ff::{biginteger::BigInteger320, field_new, Fp3};
|
||||
|
||||
use ark_ec::models::mnt6::{MNT6Parameters, MNT6};
|
||||
use ark_ec::{models::mnt6::{MNT6Parameters, MNT6}, SWModelParameters};
|
||||
|
||||
use crate::{Fq, Fq3, Fq3Parameters, Fq6Parameters, FqParameters, Fr};
|
||||
use crate::{Fq, Fq3, Fq3Parameters, Fq6Parameters, Fr};
|
||||
|
||||
pub mod g1;
|
||||
pub mod g2;
|
||||
@@ -25,13 +25,7 @@ impl MNT6Parameters for Parameters {
|
||||
const TWIST_COEFF_A: Fp3<Self::Fp3Params> = field_new!(Fq3,
|
||||
FQ_ZERO,
|
||||
FQ_ZERO,
|
||||
field_new!(Fq, BigInteger320([
|
||||
0xb9b2411bfd0eafef,
|
||||
0xc61a10fadd9fecbd,
|
||||
0x89f128e59811f3fb,
|
||||
0x980c0f780adadabb,
|
||||
0x9ba1f11320,
|
||||
])),
|
||||
g1::Parameters::COEFF_A,
|
||||
);
|
||||
const ATE_LOOP_COUNT: &'static [u64] = &[0xdc9a1b671660000, 0x46609756bec2a33f, 0x1eef55];
|
||||
const ATE_IS_LOOP_COUNT_NEG: bool = true;
|
||||
@@ -47,5 +41,5 @@ impl MNT6Parameters for Parameters {
|
||||
type G2Parameters = self::g2::Parameters;
|
||||
}
|
||||
|
||||
pub const FQ_ZERO: Fq = field_new!(Fq, BigInteger320([0, 0, 0, 0, 0]));
|
||||
pub const FQ_ONE: Fq = field_new!(Fq, FqParameters::R);
|
||||
pub const FQ_ZERO: Fq = field_new!(Fq, "0");
|
||||
pub const FQ_ONE: Fq = field_new!(Fq, "1");
|
||||
|
||||
@@ -57,8 +57,8 @@ fn test_bilinearity() {
|
||||
let b: G2Projective = rng.gen();
|
||||
let s: Fr = rng.gen();
|
||||
|
||||
let sa = a.mul(s);
|
||||
let sb = b.mul(s);
|
||||
let sa = a.mul(s.into_repr());
|
||||
let sb = b.mul(s.into_repr());
|
||||
|
||||
let ans1 = MNT6_298::pairing(sa, b);
|
||||
let ans2 = MNT6_298::pairing(a, sb);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
use crate::fq::Fq;
|
||||
use crate::{fq::Fq, FQ_ZERO};
|
||||
use ark_ff::{
|
||||
biginteger::BigInteger320 as BigInteger,
|
||||
field_new,
|
||||
fields::fp3::{Fp3, Fp3Parameters},
|
||||
};
|
||||
@@ -13,13 +12,7 @@ impl Fp3Parameters for Fq3Parameters {
|
||||
type Fp = Fq;
|
||||
|
||||
#[rustfmt::skip]
|
||||
const NONRESIDUE: Fq = field_new!(Fq, BigInteger([
|
||||
0x58eefd67fea995ca,
|
||||
0x12f14affbb33a004,
|
||||
0x4780323da44ac69b,
|
||||
0x88acf9bea707eed9,
|
||||
0x14bbbb859e8,
|
||||
]));
|
||||
const NONRESIDUE: Fq = field_new!(Fq, "5");
|
||||
|
||||
const TWO_ADICITY: u32 = 34;
|
||||
|
||||
@@ -43,64 +36,22 @@ impl Fp3Parameters for Fq3Parameters {
|
||||
|
||||
#[rustfmt::skip]
|
||||
const QUADRATIC_NONRESIDUE_TO_T: (Fq, Fq, Fq) = (
|
||||
field_new!(Fq, BigInteger([
|
||||
0x44a4178610a3a4e6,
|
||||
0x49321e4d00f35073,
|
||||
0xbbc01b9c400c07a1,
|
||||
0xd0127c4589095738,
|
||||
0x3730de2a45d,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([0, 0, 0, 0, 0])),
|
||||
field_new!(Fq, BigInteger([0, 0, 0, 0, 0])),
|
||||
field_new!(Fq, "154361449678783505076984156275977937654331103361174469632346230549735979552469642799720052"),
|
||||
FQ_ZERO,
|
||||
FQ_ZERO,
|
||||
);
|
||||
|
||||
#[rustfmt::skip]
|
||||
const FROBENIUS_COEFF_FP3_C1: &'static [Fq] = &[
|
||||
field_new!(Fq, BigInteger([
|
||||
0xc3177aefffbb845c,
|
||||
0x9b80c702f9961788,
|
||||
0xc5df8dcdac70a85a,
|
||||
0x29184098647b5197,
|
||||
0x1c1223d33c3,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([
|
||||
0x1c17bb7477085b6a,
|
||||
0x2621629c22e83dbb,
|
||||
0x21c062106d949dd8,
|
||||
0x9d5b981062164ba,
|
||||
0x84ad703207,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([
|
||||
0xdc13fe3f893c203b,
|
||||
0x39a7226875df158f,
|
||||
0xe34ed98542eefb62,
|
||||
0x6f782a843d139e3c,
|
||||
0x177280f6ea9,
|
||||
])),
|
||||
field_new!(Fq, "1"),
|
||||
field_new!(Fq, "471738898967521029133040851318449165997304108729558973770077319830005517129946578866686956"),
|
||||
field_new!(Fq, "4183387201740296620308398334599285547820769823264541783190415909159130177461911693276180"),
|
||||
];
|
||||
|
||||
#[rustfmt::skip]
|
||||
const FROBENIUS_COEFF_FP3_C2: &'static [Fq] = &[
|
||||
field_new!(Fq, BigInteger([
|
||||
0xc3177aefffbb845c,
|
||||
0x9b80c702f9961788,
|
||||
0xc5df8dcdac70a85a,
|
||||
0x29184098647b5197,
|
||||
0x1c1223d33c3,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([
|
||||
0xdc13fe3f893c203b,
|
||||
0x39a7226875df158f,
|
||||
0xe34ed98542eefb62,
|
||||
0x6f782a843d139e3c,
|
||||
0x177280f6ea9,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([
|
||||
0x1c17bb7477085b6a,
|
||||
0x2621629c22e83dbb,
|
||||
0x21c062106d949dd8,
|
||||
0x9d5b981062164ba,
|
||||
0x84ad703207,
|
||||
])),
|
||||
Self::FROBENIUS_COEFF_FP3_C1[0],
|
||||
Self::FROBENIUS_COEFF_FP3_C1[2],
|
||||
Self::FROBENIUS_COEFF_FP3_C1[1],
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
use crate::{Fq, Fq3, Fq3Parameters, FQ_ONE, FQ_ZERO};
|
||||
use ark_ff::{
|
||||
biginteger::BigInteger320 as BigInteger,
|
||||
field_new,
|
||||
fields::fp6_2over3::{Fp6, Fp6Parameters},
|
||||
};
|
||||
@@ -12,52 +11,14 @@ pub struct Fq6Parameters;
|
||||
impl Fp6Parameters for Fq6Parameters {
|
||||
type Fp3Params = Fq3Parameters;
|
||||
|
||||
#[rustfmt::skip]
|
||||
const NONRESIDUE: Fq3 = field_new!(Fq3, FQ_ZERO, FQ_ONE, FQ_ZERO);
|
||||
|
||||
#[rustfmt::skip]
|
||||
const FROBENIUS_COEFF_FP6_C1: &'static [Fq] = &[
|
||||
field_new!(Fq, BigInteger([
|
||||
0xc3177aefffbb845c,
|
||||
0x9b80c702f9961788,
|
||||
0xc5df8dcdac70a85a,
|
||||
0x29184098647b5197,
|
||||
0x1c1223d33c3,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([
|
||||
0xdf2f366476c3dfc6,
|
||||
0xc1a2299f1c7e5543,
|
||||
0xe79fefde1a054632,
|
||||
0x32edfa196a9cb651,
|
||||
0x245cfad65ca,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([
|
||||
0x1c17bb7477085b6a,
|
||||
0x2621629c22e83dbb,
|
||||
0x21c062106d949dd8,
|
||||
0x9d5b981062164ba,
|
||||
0x84ad703207,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([
|
||||
0xf82bb9b400447ba5,
|
||||
0x5fc8850498c7534a,
|
||||
0x50f3b95b083993a,
|
||||
0x794de405433502f7,
|
||||
0x1fbd57fa0b0,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([
|
||||
0xdc13fe3f893c203b,
|
||||
0x39a7226875df158f,
|
||||
0xe34ed98542eefb62,
|
||||
0x6f782a843d139e3c,
|
||||
0x177280f6ea9,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([
|
||||
0x9f2b792f88f7a497,
|
||||
0xd527e96b6f752d18,
|
||||
0xa92e6752ef5fa3bc,
|
||||
0x98906b1ca18eefd4,
|
||||
0x3384a4ca26c,
|
||||
])),
|
||||
field_new!(Fq, "1"),
|
||||
field_new!(Fq, "471738898967521029133040851318449165997304108729558973770077319830005517129946578866686957"),
|
||||
field_new!(Fq, "471738898967521029133040851318449165997304108729558973770077319830005517129946578866686956"),
|
||||
field_new!(Fq, "475922286169261325753349249653048451545124878552823515553267735739164647307408490559963136"),
|
||||
field_new!(Fq, "4183387201740296620308398334599285547820769823264541783190415909159130177461911693276180"),
|
||||
field_new!(Fq, "4183387201740296620308398334599285547820769823264541783190415909159130177461911693276181"),
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user