mirror of
https://github.com/arnaucube/ark-curves-cherry-picked.git
synced 2026-01-09 23:41:30 +01:00
Update BN254
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
use ark_ec::models::{ModelParameters, SWModelParameters};
|
use ark_ec::models::{ModelParameters, SWModelParameters};
|
||||||
use ark_ff::{biginteger::BigInteger256, field_new, Zero};
|
use ark_ff::{field_new, Zero};
|
||||||
|
|
||||||
use crate::{Fq, Fr};
|
use crate::{Fq, Fr};
|
||||||
|
|
||||||
@@ -13,28 +13,16 @@ impl ModelParameters for Parameters {
|
|||||||
|
|
||||||
impl SWModelParameters for Parameters {
|
impl SWModelParameters for Parameters {
|
||||||
/// COEFF_A = 0
|
/// COEFF_A = 0
|
||||||
const COEFF_A: Fq = field_new!(Fq, BigInteger256([0x0, 0x0, 0x0, 0x0]));
|
const COEFF_A: Fq = field_new!(Fq, "0");
|
||||||
|
|
||||||
/// COEFF_B = 3
|
/// COEFF_B = 3
|
||||||
#[rustfmt::skip]
|
const COEFF_B: Fq = field_new!(Fq, "3");
|
||||||
const COEFF_B: Fq = field_new!(Fq, BigInteger256([
|
|
||||||
0x7a17caa950ad28d7,
|
|
||||||
0x1f6ac17ae15521b9,
|
|
||||||
0x334bea4e696bd284,
|
|
||||||
0x2a1f6744ce179d8e,
|
|
||||||
]));
|
|
||||||
|
|
||||||
/// COFACTOR = 1
|
/// COFACTOR = 1
|
||||||
const COFACTOR: &'static [u64] = &[0x1];
|
const COFACTOR: &'static [u64] = &[0x1];
|
||||||
|
|
||||||
/// COFACTOR_INV = COFACTOR^{-1} mod r = 1
|
/// COFACTOR_INV = COFACTOR^{-1} mod r = 1
|
||||||
#[rustfmt::skip]
|
const COFACTOR_INV: Fr = field_new!(Fr, "1");
|
||||||
const COFACTOR_INV: Fr = field_new!(Fr, BigInteger256([
|
|
||||||
0xac96341c4ffffffb,
|
|
||||||
0x36fc76959f60cd29,
|
|
||||||
0x666ea36f7879462e,
|
|
||||||
0xe0a77c19a07df2f,
|
|
||||||
]));
|
|
||||||
|
|
||||||
/// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y)
|
/// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y)
|
||||||
const AFFINE_GENERATOR_COEFFS: (Self::BaseField, Self::BaseField) =
|
const AFFINE_GENERATOR_COEFFS: (Self::BaseField, Self::BaseField) =
|
||||||
@@ -46,22 +34,8 @@ impl SWModelParameters for Parameters {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// G1_GENERATOR_X =
|
/// G1_GENERATOR_X = 1
|
||||||
/// 1
|
pub const G1_GENERATOR_X: Fq = field_new!(Fq, "1");
|
||||||
#[rustfmt::skip]
|
|
||||||
pub const G1_GENERATOR_X: Fq = field_new!(Fq, BigInteger256([
|
|
||||||
0xd35d438dc58f0d9d,
|
|
||||||
0x0a78eb28f5c70b3d,
|
|
||||||
0x666ea36f7879462c,
|
|
||||||
0x0e0a77c19a07df2f,
|
|
||||||
]));
|
|
||||||
|
|
||||||
/// G1_GENERATOR_Y =
|
/// G1_GENERATOR_Y = 2
|
||||||
/// 2
|
pub const G1_GENERATOR_Y: Fq = field_new!(Fq, "2");
|
||||||
#[rustfmt::skip]
|
|
||||||
pub const G1_GENERATOR_Y: Fq = field_new!(Fq, BigInteger256([
|
|
||||||
0xa6ba871b8b1e1b3a,
|
|
||||||
0x14f1d651eb8e167b,
|
|
||||||
0xccdd46def0f28c58,
|
|
||||||
0x1c14ef83340fbe5e,
|
|
||||||
]));
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use ark_ec::models::{ModelParameters, SWModelParameters};
|
use ark_ec::models::{ModelParameters, SWModelParameters};
|
||||||
use ark_ff::{biginteger::BigInteger256, field_new, Zero};
|
use ark_ff::{field_new, Zero};
|
||||||
|
|
||||||
use crate::{g1, Fq, Fq2, Fr};
|
use crate::{Fq, Fq2, Fr};
|
||||||
|
|
||||||
#[derive(Clone, Default, PartialEq, Eq)]
|
#[derive(Clone, Default, PartialEq, Eq)]
|
||||||
pub struct Parameters;
|
pub struct Parameters;
|
||||||
@@ -14,27 +14,14 @@ impl ModelParameters for Parameters {
|
|||||||
impl SWModelParameters for Parameters {
|
impl SWModelParameters for Parameters {
|
||||||
/// COEFF_A = [0, 0]
|
/// COEFF_A = [0, 0]
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
const COEFF_A: Fq2 = field_new!(Fq2,
|
const COEFF_A: Fq2 = field_new!(Fq2, field_new!(Fq, "0"), field_new!(Fq, "0"));
|
||||||
g1::Parameters::COEFF_A,
|
|
||||||
g1::Parameters::COEFF_A,
|
|
||||||
);
|
|
||||||
|
|
||||||
/// COEFF_B = 3/(u+9)
|
/// COEFF_B = 3/(u+9)
|
||||||
/// = (19485874751759354771024239261021720505790618469301721065564631296452457478373, 266929791119991161246907387137283842545076965332900288569378510910307636690)
|
/// = (19485874751759354771024239261021720505790618469301721065564631296452457478373, 266929791119991161246907387137283842545076965332900288569378510910307636690)
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
const COEFF_B: Fq2 = field_new!(Fq2,
|
const COEFF_B: Fq2 = field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "19485874751759354771024239261021720505790618469301721065564631296452457478373"),
|
||||||
0x3bf938e377b802a8,
|
field_new!(Fq, "266929791119991161246907387137283842545076965332900288569378510910307636690"),
|
||||||
0x020b1b273633535d,
|
|
||||||
0x26b7edf049755260,
|
|
||||||
0x2514c6324384a86d,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
0x38e7ecccd1dcff67,
|
|
||||||
0x65f0b37d93ce0d3e,
|
|
||||||
0xd749d0dd22ac00aa,
|
|
||||||
0x0141b9ce4a688d4d,
|
|
||||||
])),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
/// COFACTOR = (36 * X^4) + (36 * X^3) + (30 * X^2) + 6*X + 1
|
/// COFACTOR = (36 * X^4) + (36 * X^3) + (30 * X^2) + 6*X + 1
|
||||||
@@ -49,12 +36,7 @@ impl SWModelParameters for Parameters {
|
|||||||
|
|
||||||
/// COFACTOR_INV = COFACTOR^{-1} mod r
|
/// COFACTOR_INV = COFACTOR^{-1} mod r
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
const COFACTOR_INV: Fr = field_new!(Fr, BigInteger256([
|
const COFACTOR_INV: Fr = field_new!(Fr, "10944121435919637613327163357776759465618812564592884533313067514031822496649");
|
||||||
0x7fff17d53ff2895e,
|
|
||||||
0xd0617390cf7919e5,
|
|
||||||
0xb9af426b22d0eb61,
|
|
||||||
0x270485e31bd72a4d,
|
|
||||||
]));
|
|
||||||
|
|
||||||
/// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y)
|
/// AFFINE_GENERATOR_COEFFS = (G2_GENERATOR_X, G2_GENERATOR_Y)
|
||||||
const AFFINE_GENERATOR_COEFFS: (Self::BaseField, Self::BaseField) =
|
const AFFINE_GENERATOR_COEFFS: (Self::BaseField, Self::BaseField) =
|
||||||
@@ -74,39 +56,19 @@ pub const G2_GENERATOR_Y: Fq2 = field_new!(Fq2, G2_GENERATOR_Y_C0, G2_GENERATOR_
|
|||||||
/// G2_GENERATOR_X_C0 =
|
/// G2_GENERATOR_X_C0 =
|
||||||
/// 10857046999023057135944570762232829481370756359578518086990519993285655852781
|
/// 10857046999023057135944570762232829481370756359578518086990519993285655852781
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
pub const G2_GENERATOR_X_C0: Fq = field_new!(Fq, BigInteger256([
|
pub const G2_GENERATOR_X_C0: Fq = field_new!(Fq, "10857046999023057135944570762232829481370756359578518086990519993285655852781");
|
||||||
0x8e83b5d102bc2026,
|
|
||||||
0xdceb1935497b0172,
|
|
||||||
0xfbb8264797811adf,
|
|
||||||
0x19573841af96503b,
|
|
||||||
]));
|
|
||||||
|
|
||||||
/// G2_GENERATOR_X_C1 =
|
/// G2_GENERATOR_X_C1 =
|
||||||
/// 11559732032986387107991004021392285783925812861821192530917403151452391805634
|
/// 11559732032986387107991004021392285783925812861821192530917403151452391805634
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
pub const G2_GENERATOR_X_C1: Fq = field_new!(Fq, BigInteger256([
|
pub const G2_GENERATOR_X_C1: Fq = field_new!(Fq, "11559732032986387107991004021392285783925812861821192530917403151452391805634");
|
||||||
0xafb4737da84c6140,
|
|
||||||
0x6043dd5a5802d8c4,
|
|
||||||
0x09e950fc52a02f86,
|
|
||||||
0x14fef0833aea7b6b,
|
|
||||||
]));
|
|
||||||
|
|
||||||
/// G2_GENERATOR_Y_C0 =
|
/// G2_GENERATOR_Y_C0 =
|
||||||
/// 8495653923123431417604973247489272438418190587263600148770280649306958101930
|
/// 8495653923123431417604973247489272438418190587263600148770280649306958101930
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
pub const G2_GENERATOR_Y_C0: Fq = field_new!(Fq, BigInteger256([
|
pub const G2_GENERATOR_Y_C0: Fq = field_new!(Fq, "8495653923123431417604973247489272438418190587263600148770280649306958101930");
|
||||||
0x619dfa9d886be9f6,
|
|
||||||
0xfe7fd297f59e9b78,
|
|
||||||
0xff9e1a62231b7dfe,
|
|
||||||
0x28fd7eebae9e4206,
|
|
||||||
]));
|
|
||||||
|
|
||||||
/// G2_GENERATOR_Y_C1 =
|
/// G2_GENERATOR_Y_C1 =
|
||||||
/// 4082367875863433681332203403145435568316851327593401208105741076214120093531
|
/// 4082367875863433681332203403145435568316851327593401208105741076214120093531
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
pub const G2_GENERATOR_Y_C1: Fq = field_new!(Fq, BigInteger256([
|
pub const G2_GENERATOR_Y_C1: Fq = field_new!(Fq, "4082367875863433681332203403145435568316851327593401208105741076214120093531");
|
||||||
0x64095b56c71856ee,
|
|
||||||
0xdc57f922327d3cbb,
|
|
||||||
0x55f935be33351076,
|
|
||||||
0x0da4a0e693fd6482,
|
|
||||||
]));
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ use ark_ec::{
|
|||||||
bn,
|
bn,
|
||||||
bn::{Bn, BnParameters, TwistType},
|
bn::{Bn, BnParameters, TwistType},
|
||||||
};
|
};
|
||||||
use ark_ff::{biginteger::BigInteger256, field_new};
|
use ark_ff::field_new;
|
||||||
pub mod g1;
|
pub mod g1;
|
||||||
pub mod g2;
|
pub mod g2;
|
||||||
|
|
||||||
@@ -23,47 +23,16 @@ impl BnParameters for Parameters {
|
|||||||
];
|
];
|
||||||
/// `ate_loop_count` is positive.
|
/// `ate_loop_count` is positive.
|
||||||
const ATE_LOOP_COUNT_IS_NEGATIVE: bool = false;
|
const ATE_LOOP_COUNT_IS_NEGATIVE: bool = false;
|
||||||
|
|
||||||
const TWIST_MUL_BY_Q_X: Fq2 = field_new!(
|
const TWIST_MUL_BY_Q_X: Fq2 = field_new!(
|
||||||
Fq2,
|
Fq2,
|
||||||
field_new!(
|
field_new!(Fq, "21575463638280843010398324269430826099269044274347216827212613867836435027261"),
|
||||||
Fq,
|
field_new!(Fq, "10307601595873709700152284273816112264069230130616436755625194854815875713954"),
|
||||||
BigInteger256([
|
|
||||||
0xb5773b104563ab30,
|
|
||||||
0x347f91c8a9aa6454,
|
|
||||||
0x7a007127242e0991,
|
|
||||||
0x1956bcd8118214ec,
|
|
||||||
])
|
|
||||||
),
|
|
||||||
field_new!(
|
|
||||||
Fq,
|
|
||||||
BigInteger256([
|
|
||||||
0x6e849f1ea0aa4757,
|
|
||||||
0xaa1c7b6d89f89141,
|
|
||||||
0xb6e713cdfae0ca3a,
|
|
||||||
0x26694fbb4e82ebc3,
|
|
||||||
])
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
const TWIST_MUL_BY_Q_Y: Fq2 = field_new!(
|
const TWIST_MUL_BY_Q_Y: Fq2 = field_new!(
|
||||||
Fq2,
|
Fq2,
|
||||||
field_new!(
|
field_new!(Fq, "2821565182194536844548159561693502659359617185244120367078079554186484126554"),
|
||||||
Fq,
|
field_new!(Fq, "3505843767911556378687030309984248845540243509899259641013678093033130930403"),
|
||||||
BigInteger256([
|
|
||||||
0xe4bbdd0c2936b629,
|
|
||||||
0xbb30f162e133bacb,
|
|
||||||
0x31a9d1b6f9645366,
|
|
||||||
0x253570bea500f8dd,
|
|
||||||
])
|
|
||||||
),
|
|
||||||
field_new!(
|
|
||||||
Fq,
|
|
||||||
BigInteger256([
|
|
||||||
0xa1d77ce45ffe77c7,
|
|
||||||
0x07affd117826d1db,
|
|
||||||
0x6d16bd27bb7edc6b,
|
|
||||||
0x2c87200285defecc,
|
|
||||||
])
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
const TWIST_TYPE: TwistType = TwistType::D;
|
const TWIST_TYPE: TwistType = TwistType::D;
|
||||||
type Fp = Fq;
|
type Fp = Fq;
|
||||||
|
|||||||
@@ -92,5 +92,5 @@ impl FpParameters for FqParameters {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const FQ_ONE: Fq = field_new!(Fq, FqParameters::R);
|
pub const FQ_ONE: Fq = field_new!(Fq, "1");
|
||||||
pub const FQ_ZERO: Fq = field_new!(Fq, BigInteger([0, 0, 0, 0]));
|
pub const FQ_ZERO: Fq = field_new!(Fq, "0");
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use super::*;
|
use super::*;
|
||||||
use ark_ff::{biginteger::BigInteger256, field_new, fields::*};
|
use ark_ff::{field_new, fields::*};
|
||||||
|
|
||||||
pub type Fq12 = Fp12<Fq12Parameters>;
|
pub type Fq12 = Fp12<Fq12Parameters>;
|
||||||
|
|
||||||
@@ -14,146 +14,64 @@ impl Fp12Parameters for Fq12Parameters {
|
|||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
const FROBENIUS_COEFF_FP12_C1: &'static [Fq2] = &[
|
const FROBENIUS_COEFF_FP12_C1: &'static [Fq2] = &[
|
||||||
// Fp2::NONRESIDUE^(((q^0) - 1) / 6)
|
// Fp2::NONRESIDUE^(((q^0) - 1) / 6)
|
||||||
FQ2_ONE,
|
field_new!(Fq2,
|
||||||
|
field_new!(Fq, "1"),
|
||||||
|
field_new!(Fq, "0"),
|
||||||
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^1) - 1) / 6)
|
// Fp2::NONRESIDUE^(((q^1) - 1) / 6)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "8376118865763821496583973867626364092589906065868298776909617916018768340080"),
|
||||||
0xaf9ba69633144907,
|
field_new!(Fq, "16469823323077808223889137241176536799009286646108169935659301613961712198316"),
|
||||||
0xca6b1d7387afb78a,
|
|
||||||
0x11bded5ef08a2087,
|
|
||||||
0x02f34d751a1f3a7c,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
0xa222ae234c492d72,
|
|
||||||
0xd00f02a4565de15b,
|
|
||||||
0xdc2ff3a253dfc926,
|
|
||||||
0x10a75716b3899551,
|
|
||||||
])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^2) - 1) / 6)
|
// Fp2::NONRESIDUE^(((q^2) - 1) / 6)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "21888242871839275220042445260109153167277707414472061641714758635765020556617"),
|
||||||
0xca8d800500fa1bf2,
|
field_new!(Fq, "0"),
|
||||||
0xf0c5d61468b39769,
|
|
||||||
0x0e201271ad0d4418,
|
|
||||||
0x04290f65bad856e6,
|
|
||||||
])),
|
|
||||||
FQ_ZERO,
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^3) - 1) / 6)
|
// Fp2::NONRESIDUE^(((q^3) - 1) / 6)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "11697423496358154304825782922584725312912383441159505038794027105778954184319"),
|
||||||
0x365316184e46d97d,
|
field_new!(Fq, "303847389135065887422783454877609941456349188919719272345083954437860409601"),
|
||||||
0x0af7129ed4c96d9f,
|
|
||||||
0x659da72fca1009b5,
|
|
||||||
0x08116d8983a20d23,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
0xb1df4af7c39c1939,
|
|
||||||
0x3d9f02878a73bf7f,
|
|
||||||
0x9b2220928caf0ae0,
|
|
||||||
0x26684515eff054a6,
|
|
||||||
])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^4) - 1) / 6)
|
// Fp2::NONRESIDUE^(((q^4) - 1) / 6)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "21888242871839275220042445260109153167277707414472061641714758635765020556616"),
|
||||||
0x3350c88e13e80b9c,
|
field_new!(Fq, "0"),
|
||||||
0x7dce557cdb5e56b9,
|
|
||||||
0x6001b4b8b615564a,
|
|
||||||
0x2682e617020217e0,
|
|
||||||
])),
|
|
||||||
FQ_ZERO,
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^5) - 1) / 6)
|
// Fp2::NONRESIDUE^(((q^5) - 1) / 6)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "3321304630594332808241809054958361220322477375291206261884409189760185844239"),
|
||||||
0x86b76f821b329076,
|
field_new!(Fq, "5722266937896532885780051958958348231143373700109372999374820235121374419868"),
|
||||||
0x408bf52b4d19b614,
|
|
||||||
0x53dfb9d0d985e92d,
|
|
||||||
0x051e20146982d2a7,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
0x0fbc9cd47752ebc7,
|
|
||||||
0x6d8fffe33415de24,
|
|
||||||
0xbef22cf038cf41b9,
|
|
||||||
0x15c0edff3c66bf54,
|
|
||||||
])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^6) - 1) / 6)
|
// Fp2::NONRESIDUE^(((q^6) - 1) / 6)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "-1"),
|
||||||
0x68c3488912edefaa,
|
field_new!(Fq, "0"),
|
||||||
0x8d087f6872aabf4f,
|
|
||||||
0x51e1a24709081231,
|
|
||||||
0x2259d6b14729c0fa,
|
|
||||||
])),
|
|
||||||
FQ_ZERO,
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^7) - 1) / 6)
|
// Fp2::NONRESIDUE^(((q^7) - 1) / 6)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "13512124006075453725662431877630910996106405091429524885779419978626457868503"),
|
||||||
0x8c84e580a568b440,
|
field_new!(Fq, "5418419548761466998357268504080738289687024511189653727029736280683514010267"),
|
||||||
0xcd164d1de0c21302,
|
|
||||||
0xa692585790f737d5,
|
|
||||||
0x2d7100fdc71265ad,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
0x99fdddf38c33cfd5,
|
|
||||||
0xc77267ed1213e931,
|
|
||||||
0xdc2052142da18f36,
|
|
||||||
0x1fbcf75c2da80ad7,
|
|
||||||
])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^8) - 1) / 6)
|
// Fp2::NONRESIDUE^(((q^8) - 1) / 6)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "2203960485148121921418603742825762020974279258880205651966"),
|
||||||
0x71930c11d782e155,
|
field_new!(Fq, "0"),
|
||||||
0xa6bb947cffbe3323,
|
|
||||||
0xaa303344d4741444,
|
|
||||||
0x2c3b3f0d26594943,
|
|
||||||
])),
|
|
||||||
FQ_ZERO,
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^9) - 1) / 6)
|
// Fp2::NONRESIDUE^(((q^9) - 1) / 6)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "10190819375481120917420622822672549775783927716138318623895010788866272024264"),
|
||||||
0x05cd75fe8a3623ca,
|
field_new!(Fq, "21584395482704209334823622290379665147239961968378104390343953940207365798982"),
|
||||||
0x8c8a57f293a85cee,
|
|
||||||
0x52b29e86b7714ea8,
|
|
||||||
0x2852e0e95d8f9306,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
0x8a41411f14e0e40e,
|
|
||||||
0x59e26809ddfe0b0d,
|
|
||||||
0x1d2e2523f4d24d7d,
|
|
||||||
0x09fc095cf1414b83,
|
|
||||||
])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^10) - 1) / 6)
|
// Fp2::NONRESIDUE^(((q^10) - 1) / 6)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "2203960485148121921418603742825762020974279258880205651967"),
|
||||||
0x08cfc388c494f1ab,
|
field_new!(Fq, "0"),
|
||||||
0x19b315148d1373d4,
|
|
||||||
0x584e90fdcb6c0213,
|
|
||||||
0x09e1685bdf2f8849,
|
|
||||||
])),
|
|
||||||
FQ_ZERO,
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^11) - 1) / 6)
|
// Fp2::NONRESIDUE^(((q^11) - 1) / 6)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "18566938241244942414004596690298913868373833782006617400804628704885040364344"),
|
||||||
0xb5691c94bd4a6cd1,
|
field_new!(Fq, "16165975933942742336466353786298926857552937457188450663314217659523851788715"),
|
||||||
0x56f575661b581478,
|
|
||||||
0x64708be5a7fb6f30,
|
|
||||||
0x2b462e5e77aecd82,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
0x2c63ef42612a1180,
|
|
||||||
0x29f16aae345bec69,
|
|
||||||
0xf95e18c648b216a4,
|
|
||||||
0x1aa36073a4cae0d4,
|
|
||||||
])),
|
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use super::*;
|
use super::*;
|
||||||
use ark_ff::{biginteger::BigInteger256 as BigInteger, field_new, fields::*};
|
use ark_ff::{field_new, fields::*};
|
||||||
|
|
||||||
pub type Fq2 = Fp2<Fq2Parameters>;
|
pub type Fq2 = Fp2<Fq2Parameters>;
|
||||||
|
|
||||||
@@ -10,47 +10,22 @@ impl Fp2Parameters for Fq2Parameters {
|
|||||||
|
|
||||||
/// NONRESIDUE = -1
|
/// NONRESIDUE = -1
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
const NONRESIDUE: Fq = field_new!(Fq, BigInteger([
|
const NONRESIDUE: Fq = field_new!(Fq, "-1");
|
||||||
0x68c3488912edefaa,
|
|
||||||
0x8d087f6872aabf4f,
|
|
||||||
0x51e1a24709081231,
|
|
||||||
0x2259d6b14729c0fa,
|
|
||||||
]));
|
|
||||||
|
|
||||||
/// QUADRATIC_NONRESIDUE = U+2
|
/// QUADRATIC_NONRESIDUE = U+2
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
const QUADRATIC_NONRESIDUE: (Fq, Fq) = (
|
const QUADRATIC_NONRESIDUE: (Fq, Fq) = (
|
||||||
field_new!(Fq, BigInteger([
|
field_new!(Fq, "2"),
|
||||||
12014063508332092218u64,
|
field_new!(Fq, "1"),
|
||||||
1509222997478479483u64,
|
|
||||||
14762033076929465432u64,
|
|
||||||
2023505479389396574u64,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger([
|
|
||||||
202099033278250856u64,
|
|
||||||
8885205928937022213u64,
|
|
||||||
5545221690922665192u64,
|
|
||||||
39800542322357402u64,
|
|
||||||
])),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
/// Coefficients for the Frobenius automorphism.
|
/// Coefficients for the Frobenius automorphism.
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
const FROBENIUS_COEFF_FP2_C1: &'static [Fq] = &[
|
const FROBENIUS_COEFF_FP2_C1: &'static [Fq] = &[
|
||||||
// NONRESIDUE**(((q^0) - 1) / 2)
|
// NONRESIDUE**(((q^0) - 1) / 2)
|
||||||
field_new!(Fq, BigInteger([
|
field_new!(Fq, "1"),
|
||||||
0xd35d438dc58f0d9d,
|
|
||||||
0x0a78eb28f5c70b3d,
|
|
||||||
0x666ea36f7879462c,
|
|
||||||
0xe0a77c19a07df2f,
|
|
||||||
])),
|
|
||||||
// NONRESIDUE**(((q^1) - 1) / 2)
|
// NONRESIDUE**(((q^1) - 1) / 2)
|
||||||
field_new!(Fq, BigInteger([
|
field_new!(Fq, "-1"),
|
||||||
0x68c3488912edefaa,
|
|
||||||
0x8d087f6872aabf4f,
|
|
||||||
0x51e1a24709081231,
|
|
||||||
0x2259d6b14729c0fa,
|
|
||||||
])),
|
|
||||||
];
|
];
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use super::*;
|
use super::*;
|
||||||
use ark_ff::{biginteger::BigInteger256, field_new, fields::*};
|
use ark_ff::{field_new, fields::*};
|
||||||
|
|
||||||
pub type Fq6 = Fp6<Fq6Parameters>;
|
pub type Fq6 = Fp6<Fq6Parameters>;
|
||||||
|
|
||||||
@@ -11,175 +11,72 @@ impl Fp6Parameters for Fq6Parameters {
|
|||||||
|
|
||||||
/// NONRESIDUE = U+9
|
/// NONRESIDUE = U+9
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
const NONRESIDUE: Fq2 = field_new!(Fq2,
|
const NONRESIDUE: Fq2 = field_new!(Fq2, field_new!(Fq, "9"), field_new!(Fq, "1"));
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
0xf60647ce410d7ff7,
|
|
||||||
0x2f3d6f4dd31bd011,
|
|
||||||
0x2943337e3940c6d1,
|
|
||||||
0x1d9598e8a7e39857,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
202099033278250856u64,
|
|
||||||
8885205928937022213u64,
|
|
||||||
5545221690922665192u64,
|
|
||||||
39800542322357402u64,
|
|
||||||
])),
|
|
||||||
);
|
|
||||||
|
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
const FROBENIUS_COEFF_FP6_C1: &'static [Fq2] = &[
|
const FROBENIUS_COEFF_FP6_C1: &'static [Fq2] = &[
|
||||||
// Fp2::NONRESIDUE^(((q^0) - 1) / 3)
|
// Fp2::NONRESIDUE^(((q^0) - 1) / 3)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "1"),
|
||||||
0xd35d438dc58f0d9d,
|
field_new!(Fq, "0"),
|
||||||
0x0a78eb28f5c70b3d,
|
|
||||||
0x666ea36f7879462c,
|
|
||||||
0xe0a77c19a07df2f,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([0x0, 0x0, 0x0, 0x0])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^1) - 1) / 3)
|
// Fp2::NONRESIDUE^(((q^1) - 1) / 3)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "21575463638280843010398324269430826099269044274347216827212613867836435027261"),
|
||||||
0xb5773b104563ab30,
|
field_new!(Fq, "10307601595873709700152284273816112264069230130616436755625194854815875713954"),
|
||||||
0x347f91c8a9aa6454,
|
|
||||||
0x7a007127242e0991,
|
|
||||||
0x1956bcd8118214ec,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
0x6e849f1ea0aa4757,
|
|
||||||
0xaa1c7b6d89f89141,
|
|
||||||
0xb6e713cdfae0ca3a,
|
|
||||||
0x26694fbb4e82ebc3,
|
|
||||||
])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^2) - 1) / 3)
|
// Fp2::NONRESIDUE^(((q^2) - 1) / 3)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "21888242871839275220042445260109153167277707414472061641714758635765020556616"),
|
||||||
0x3350c88e13e80b9c,
|
field_new!(Fq, "0"),
|
||||||
0x7dce557cdb5e56b9,
|
|
||||||
0x6001b4b8b615564a,
|
|
||||||
0x2682e617020217e0,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([0x0, 0x0, 0x0, 0x0])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^3) - 1) / 3)
|
// Fp2::NONRESIDUE^(((q^3) - 1) / 3)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "3772000881919853776433695186713858239009073593817195771773381919316419345261"),
|
||||||
0xc9af22f716ad6bad,
|
field_new!(Fq, "2236595495967245188281701248203181795121068902605861227855261137820944008926"),
|
||||||
0xb311782a4aa662b2,
|
|
||||||
0x19eeaf64e248c7f4,
|
|
||||||
0x20273e77e3439f82,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
0xacc02860f7ce93ac,
|
|
||||||
0x3933d5817ba76b4c,
|
|
||||||
0x69e6188b446c8467,
|
|
||||||
0xa46036d4417cc55,
|
|
||||||
])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^4) - 1) / 3)
|
// Fp2::NONRESIDUE^(((q^4) - 1) / 3)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "2203960485148121921418603742825762020974279258880205651966"),
|
||||||
0x71930c11d782e155,
|
field_new!(Fq, "0"),
|
||||||
0xa6bb947cffbe3323,
|
|
||||||
0xaa303344d4741444,
|
|
||||||
0x2c3b3f0d26594943,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([0x0, 0x0, 0x0, 0x0])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^(((q^5) - 1) / 3)
|
// Fp2::NONRESIDUE^(((q^5) - 1) / 3)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "18429021223477853657660792034369865839114504446431234726392080002137598044644"),
|
||||||
0xf91aba2654e8e3b1,
|
field_new!(Fq, "9344045779998320333812420223237981029506012124075525679208581902008406485703"),
|
||||||
0x4771cb2fdc92ce12,
|
|
||||||
0xdcb16ae0fc8bdf35,
|
|
||||||
0x274aa195cd9d8be4,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
0x5cfc50ae18811f8b,
|
|
||||||
0x4bb28433cb43988c,
|
|
||||||
0x4fd35f13c3b56219,
|
|
||||||
0x301949bd2fc8883a,
|
|
||||||
])),
|
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
const FROBENIUS_COEFF_FP6_C2: &'static [Fq2] = &[
|
const FROBENIUS_COEFF_FP6_C2: &'static [Fq2] = &[
|
||||||
// Fp2::NONRESIDUE^((2*(q^0) - 2) / 3)
|
// Fp2::NONRESIDUE^((2*(q^0) - 2) / 3)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "1"),
|
||||||
0xd35d438dc58f0d9d,
|
field_new!(Fq, "0"),
|
||||||
0x0a78eb28f5c70b3d,
|
|
||||||
0x666ea36f7879462c,
|
|
||||||
0xe0a77c19a07df2f,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([0x0, 0x0, 0x0, 0x0])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^((2*(q^1) - 2) / 3)
|
// Fp2::NONRESIDUE^((2*(q^1) - 2) / 3)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "2581911344467009335267311115468803099551665605076196740867805258568234346338"),
|
||||||
0x7361d77f843abe92,
|
field_new!(Fq, "19937756971775647987995932169929341994314640652964949448313374472400716661030"),
|
||||||
0xa5bb2bd3273411fb,
|
|
||||||
0x9c941f314b3e2399,
|
|
||||||
0x15df9cddbb9fd3ec,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
0x5dddfd154bd8c949,
|
|
||||||
0x62cb29a5a4445b60,
|
|
||||||
0x37bc870a0c7dd2b9,
|
|
||||||
0x24830a9d3171f0fd,
|
|
||||||
])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^((2*(q^2) - 2) / 3)
|
// Fp2::NONRESIDUE^((2*(q^2) - 2) / 3)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "2203960485148121921418603742825762020974279258880205651966"),
|
||||||
0x71930c11d782e155,
|
field_new!(Fq, "0"),
|
||||||
0xa6bb947cffbe3323,
|
|
||||||
0xaa303344d4741444,
|
|
||||||
0x2c3b3f0d26594943,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([0x0, 0x0, 0x0, 0x0])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^((2*(q^3) - 2) / 3)
|
// Fp2::NONRESIDUE^((2*(q^3) - 2) / 3)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "5324479202449903542726783395506214481928257762400643279780343368557297135718"),
|
||||||
0x448a93a57b6762df,
|
field_new!(Fq, "16208900380737693084919495127334387981393726419856888799917914180988844123039"),
|
||||||
0xbfd62df528fdeadf,
|
|
||||||
0xd858f5d00e9bd47a,
|
|
||||||
0x6b03d4d3476ec58,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
0x2b19daf4bcc936d1,
|
|
||||||
0xa1a54e7a56f4299f,
|
|
||||||
0xb533eee05adeaef1,
|
|
||||||
0x170c812b84dda0b2,
|
|
||||||
])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^((2*(q^4) - 2) / 3)
|
// Fp2::NONRESIDUE^((2*(q^4) - 2) / 3)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "21888242871839275220042445260109153167277707414472061641714758635765020556616"),
|
||||||
0x3350c88e13e80b9c,
|
field_new!(Fq, "0"),
|
||||||
0x7dce557cdb5e56b9,
|
|
||||||
0x6001b4b8b615564a,
|
|
||||||
0x2682e617020217e0,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([0x0, 0x0, 0x0, 0x0])),
|
|
||||||
),
|
),
|
||||||
// Fp2::NONRESIDUE^((2*(q^5) - 2) / 3)
|
// Fp2::NONRESIDUE^((2*(q^5) - 2) / 3)
|
||||||
field_new!(Fq2,
|
field_new!(Fq2,
|
||||||
field_new!(Fq, BigInteger256([
|
field_new!(Fq, "13981852324922362344252311234282257507216387789820983642040889267519694726527"),
|
||||||
0x843420f1d8dadbd6,
|
field_new!(Fq, "7629828391165209371577384193250820201684255241773809077146787135900891633097"),
|
||||||
0x31f010c9183fcdb2,
|
|
||||||
0x436330b527a76049,
|
|
||||||
0x13d47447f11adfe4,
|
|
||||||
])),
|
|
||||||
field_new!(Fq, BigInteger256([
|
|
||||||
0xef494023a857fa74,
|
|
||||||
0x2a925d02d5ab101a,
|
|
||||||
0x83b015829ba62f10,
|
|
||||||
0x2539111d0c13aea3,
|
|
||||||
])),
|
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user