From 1534bbbfdf360deda2f7d31ecffc5a45f7f8c8f9 Mon Sep 17 00:00:00 2001 From: Pratyush Mishra Date: Wed, 9 Dec 2020 10:47:25 -0800 Subject: [PATCH] Update `MNT6-298` --- mnt6_298/src/curves/g1.rs | 46 +++------------- mnt6_298/src/curves/g2.rs | 101 ++++++----------------------------- mnt6_298/src/curves/mod.rs | 18 +++---- mnt6_298/src/curves/tests.rs | 4 +- mnt6_298/src/fields/fq3.rs | 71 ++++-------------------- mnt6_298/src/fields/fq6.rs | 51 +++--------------- 6 files changed, 49 insertions(+), 242 deletions(-) diff --git a/mnt6_298/src/curves/g1.rs b/mnt6_298/src/curves/g1.rs index 32561fc..13be4bf 100644 --- a/mnt6_298/src/curves/g1.rs +++ b/mnt6_298/src/curves/g1.rs @@ -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"); diff --git a/mnt6_298/src/curves/g2.rs b/mnt6_298/src/curves/g2.rs index c44031d..a20fd27 100644 --- a/mnt6_298/src/curves/g2.rs +++ b/mnt6_298/src/curves/g2.rs @@ -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; pub type G2Projective = mnt6::G2Projective; @@ -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"); diff --git a/mnt6_298/src/curves/mod.rs b/mnt6_298/src/curves/mod.rs index 2d2dc19..9e1d728 100644 --- a/mnt6_298/src/curves/mod.rs +++ b/mnt6_298/src/curves/mod.rs @@ -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 = 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"); diff --git a/mnt6_298/src/curves/tests.rs b/mnt6_298/src/curves/tests.rs index 03f7229..0e9635b 100644 --- a/mnt6_298/src/curves/tests.rs +++ b/mnt6_298/src/curves/tests.rs @@ -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); diff --git a/mnt6_298/src/fields/fq3.rs b/mnt6_298/src/fields/fq3.rs index f414c1e..671688b 100644 --- a/mnt6_298/src/fields/fq3.rs +++ b/mnt6_298/src/fields/fq3.rs @@ -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], ]; } diff --git a/mnt6_298/src/fields/fq6.rs b/mnt6_298/src/fields/fq6.rs index e6dded9..0879380 100644 --- a/mnt6_298/src/fields/fq6.rs +++ b/mnt6_298/src/fields/fq6.rs @@ -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"), ]; }