mirror of
https://github.com/arnaucube/ark-curves-cherry-picked.git
synced 2026-01-28 22:46:45 +01:00
Catch up with algebra (#106)
Co-authored-by: Pratyush Mishra <pratyushmishra@berkeley.edu>
This commit is contained in:
@@ -1,10 +1,7 @@
|
||||
use ark_ff::fields::{Fp384, MontBackend, MontConfig, MontFp};
|
||||
use ark_ff::fields::{Fp384, MontBackend, MontConfig};
|
||||
|
||||
#[derive(MontConfig)]
|
||||
#[modulus = "4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787"]
|
||||
#[generator = "2"]
|
||||
pub struct FqConfig;
|
||||
pub type Fq = Fp384<MontBackend<FqConfig, 6>>;
|
||||
|
||||
pub const FQ_ONE: Fq = MontFp!(Fq, "1");
|
||||
pub const FQ_ZERO: Fq = MontFp!(Fq, "0");
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use ark_ff::{fields::*, CubicExt, MontFp, QuadExt};
|
||||
use ark_ff::{fields::*, MontFp};
|
||||
|
||||
use crate::*;
|
||||
|
||||
@@ -10,68 +10,68 @@ pub struct Fq12Config;
|
||||
impl Fp12Config for Fq12Config {
|
||||
type Fp6Config = Fq6Config;
|
||||
|
||||
const NONRESIDUE: Fq6 = CubicExt!(FQ2_ZERO, FQ2_ONE, FQ2_ZERO);
|
||||
const NONRESIDUE: Fq6 = Fq6::new(Fq2::ZERO, Fq2::ONE, Fq2::ZERO);
|
||||
|
||||
const FROBENIUS_COEFF_FP12_C1: &'static [Fq2] = &[
|
||||
// Fp2::NONRESIDUE^(((q^0) - 1) / 6)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "1"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
Fq::ONE,
|
||||
Fq::ZERO,
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^1) - 1) / 6)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760"),
|
||||
MontFp!(Fq, "151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027"),
|
||||
Fq2::new(
|
||||
MontFp!("3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760"),
|
||||
MontFp!("151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027"),
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^2) - 1) / 6)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
MontFp!("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351"),
|
||||
Fq::ZERO,
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^3) - 1) / 6)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530"),
|
||||
MontFp!(Fq, "1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257"),
|
||||
Fq2::new(
|
||||
MontFp!("2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530"),
|
||||
MontFp!("1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257"),
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^4) - 1) / 6)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
MontFp!("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"),
|
||||
Fq::ZERO,
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^5) - 1) / 6)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557"),
|
||||
MontFp!(Fq, "877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230"),
|
||||
Fq2::new(
|
||||
MontFp!("3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557"),
|
||||
MontFp!("877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230"),
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^6) - 1) / 6)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "-1"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
MontFp!("-1"),
|
||||
Fq::ZERO,
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^7) - 1) / 6)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027"),
|
||||
MontFp!(Fq, "3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760"),
|
||||
Fq2::new(
|
||||
MontFp!("151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027"),
|
||||
MontFp!("3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760"),
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^8) - 1) / 6)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
MontFp!("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"),
|
||||
Fq::ZERO,
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^9) - 1) / 6)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257"),
|
||||
MontFp!(Fq, "2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530"),
|
||||
Fq2::new(
|
||||
MontFp!("1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257"),
|
||||
MontFp!("2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530"),
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^10) - 1) / 6)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
MontFp!("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437"),
|
||||
Fq::ZERO,
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^11) - 1) / 6)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230"),
|
||||
MontFp!(Fq, "3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557"),
|
||||
Fq2::new(
|
||||
MontFp!("877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230"),
|
||||
MontFp!("3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557"),
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use ark_ff::{fields::*, MontFp, QuadExt};
|
||||
use ark_ff::{fields::*, MontFp};
|
||||
|
||||
use crate::*;
|
||||
|
||||
@@ -10,14 +10,14 @@ impl Fp2Config for Fq2Config {
|
||||
type Fp = Fq;
|
||||
|
||||
/// NONRESIDUE = -1
|
||||
const NONRESIDUE: Fq = MontFp!(Fq, "-1");
|
||||
const NONRESIDUE: Fq = MontFp!("-1");
|
||||
|
||||
/// Coefficients for the Frobenius automorphism.
|
||||
const FROBENIUS_COEFF_FP2_C1: &'static [Fq] = &[
|
||||
// Fq(-1)**(((q^0) - 1) / 2)
|
||||
MontFp!(Fq, "1"),
|
||||
Fq::ONE,
|
||||
// Fq(-1)**(((q^1) - 1) / 2)
|
||||
MontFp!(Fq, "-1"),
|
||||
MontFp!("-1"),
|
||||
];
|
||||
|
||||
#[inline(always)]
|
||||
@@ -25,6 +25,3 @@ impl Fp2Config for Fq2Config {
|
||||
-(*fp)
|
||||
}
|
||||
}
|
||||
|
||||
pub const FQ2_ZERO: Fq2 = QuadExt!(FQ_ZERO, FQ_ZERO);
|
||||
pub const FQ2_ONE: Fq2 = QuadExt!(FQ_ONE, FQ_ZERO);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use ark_ff::{fields::*, MontFp, QuadExt};
|
||||
use ark_ff::{fields::*, MontFp};
|
||||
|
||||
use crate::*;
|
||||
|
||||
@@ -11,72 +11,72 @@ impl Fp6Config for Fq6Config {
|
||||
type Fp2Config = Fq2Config;
|
||||
|
||||
/// NONRESIDUE = (U + 1)
|
||||
const NONRESIDUE: Fq2 = QuadExt!(FQ_ONE, FQ_ONE);
|
||||
const NONRESIDUE: Fq2 = Fq2::new(Fq::ONE, Fq::ONE);
|
||||
|
||||
const FROBENIUS_COEFF_FP6_C1: &'static [Fq2] = &[
|
||||
// Fp2::NONRESIDUE^(((q^0) - 1) / 3)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "1"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
Fq::ONE,
|
||||
Fq::ZERO,
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^1) - 1) / 3)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "0"),
|
||||
MontFp!(Fq, "4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"),
|
||||
Fq2::new(
|
||||
Fq::ZERO,
|
||||
MontFp!("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"),
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^2) - 1) / 3)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
MontFp!("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"),
|
||||
Fq::ZERO,
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^3) - 1) / 3)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "0"),
|
||||
MontFp!(Fq, "1"),
|
||||
Fq2::new(
|
||||
Fq::ZERO,
|
||||
Fq::ONE,
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^4) - 1) / 3)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
MontFp!("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"),
|
||||
Fq::ZERO,
|
||||
),
|
||||
// Fp2::NONRESIDUE^(((q^5) - 1) / 3)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "0"),
|
||||
MontFp!(Fq, "793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"),
|
||||
Fq2::new(
|
||||
Fq::ZERO,
|
||||
MontFp!("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"),
|
||||
),
|
||||
];
|
||||
|
||||
#[rustfmt::skip]
|
||||
const FROBENIUS_COEFF_FP6_C2: &'static [Fq2] = &[
|
||||
// Fq2(u + 1)**(((2q^0) - 2) / 3)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "1"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
Fq::ONE,
|
||||
Fq::ZERO,
|
||||
),
|
||||
// Fq2(u + 1)**(((2q^1) - 2) / 3)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
MontFp!("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437"),
|
||||
Fq::ZERO,
|
||||
),
|
||||
// Fq2(u + 1)**(((2q^2) - 2) / 3)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
MontFp!("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"),
|
||||
Fq::ZERO,
|
||||
),
|
||||
// Fq2(u + 1)**(((2q^3) - 2) / 3)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "-1"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
MontFp!("-1"),
|
||||
Fq::ZERO,
|
||||
),
|
||||
// Fq2(u + 1)**(((2q^4) - 2) / 3)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
MontFp!("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"),
|
||||
Fq::ZERO,
|
||||
),
|
||||
// Fq2(u + 1)**(((2q^5) - 2) / 3)
|
||||
QuadExt!(
|
||||
MontFp!(Fq, "793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351"),
|
||||
MontFp!(Fq, "0"),
|
||||
Fq2::new(
|
||||
MontFp!("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351"),
|
||||
Fq::ZERO,
|
||||
),
|
||||
];
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ use ark_algebra_test_templates::{
|
||||
};
|
||||
use ark_ff::{
|
||||
biginteger::{BigInt, BigInteger, BigInteger384},
|
||||
fields::{FftField, Field, Fp12Config, Fp2Config, Fp6Config, PrimeField, SquareRootField},
|
||||
fields::{FftField, Field, Fp12Config, Fp2Config, Fp6Config, PrimeField},
|
||||
One, UniformRand, Zero,
|
||||
};
|
||||
use ark_serialize::{buffer_bit_byte_size, CanonicalSerialize};
|
||||
@@ -21,7 +21,7 @@ generate_field_serialization_test!(bls12_381; fq2; fq6; fq12;);
|
||||
|
||||
#[test]
|
||||
fn test_negative_one() {
|
||||
let neg_one = Fq::new(BigInt::new([
|
||||
let neg_one = Fq::new_unchecked(BigInt::new([
|
||||
0x43f5fffffffcaaae,
|
||||
0x32b7fff2ed47fffd,
|
||||
0x7e83a49a2e99d69,
|
||||
@@ -739,23 +739,6 @@ fn test_frob_coeffs() {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_neg_one() {
|
||||
let o = -Fq::one();
|
||||
|
||||
let thing: [u64; 6] = [
|
||||
0x43f5fffffffcaaae,
|
||||
0x32b7fff2ed47fffd,
|
||||
0x7e83a49a2e99d69,
|
||||
0xeca8f3318332bb7a,
|
||||
0xef148d1ea0f4c069,
|
||||
0x40ab3263eff0206,
|
||||
];
|
||||
let negative_one = Fq::new(BigInt::new(thing));
|
||||
|
||||
assert_eq!(negative_one, o);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_fq_repr_from() {
|
||||
assert_eq!(BigInt::from(100u64), BigInt::new([100, 0, 0, 0, 0, 0]));
|
||||
|
||||
Reference in New Issue
Block a user