mirror of
https://github.com/arnaucube/ark-curves-cherry-picked.git
synced 2026-01-12 08:51:36 +01:00
Initial commit
This commit is contained in:
1
mnt6_753/src/fields/fq.rs
Normal file
1
mnt6_753/src/fields/fq.rs
Normal file
@@ -0,0 +1 @@
|
||||
pub use ark_mnt4_753::{Fr as Fq, FrParameters as FqParameters};
|
||||
137
mnt6_753/src/fields/fq3.rs
Normal file
137
mnt6_753/src/fields/fq3.rs
Normal file
@@ -0,0 +1,137 @@
|
||||
use crate::{fq::Fq, FQ_ONE};
|
||||
use ark_ff::{
|
||||
biginteger::BigInteger768 as BigInteger,
|
||||
field_new,
|
||||
fields::fp3::{Fp3, Fp3Parameters},
|
||||
};
|
||||
|
||||
pub type Fq3 = Fp3<Fq3Parameters>;
|
||||
|
||||
pub struct Fq3Parameters;
|
||||
|
||||
impl Fp3Parameters for Fq3Parameters {
|
||||
type Fp = Fq;
|
||||
|
||||
#[rustfmt::skip]
|
||||
const NONRESIDUE: Fq = field_new!(Fq, BigInteger([
|
||||
5145524327033718740,
|
||||
14149824967095184544,
|
||||
5159730833497260295,
|
||||
3902941467692815387,
|
||||
15830098551216085679,
|
||||
8665641533746801158,
|
||||
17502192300007146323,
|
||||
14483698255198590748,
|
||||
546300946688995976,
|
||||
4331975528992054828,
|
||||
5311428878520309260,
|
||||
495362057711802,
|
||||
]));
|
||||
|
||||
const TWO_ADICITY: u32 = 30;
|
||||
|
||||
#[rustfmt::skip]
|
||||
const T_MINUS_ONE_DIV_TWO: &'static [u64] = &[
|
||||
15439605736802142541,
|
||||
18190868848461853149,
|
||||
6220121510046940818,
|
||||
10310485528612680366,
|
||||
5032137869959796540,
|
||||
3943048799800510054,
|
||||
1971151279016362045,
|
||||
6096644900171872841,
|
||||
12908407994230849218,
|
||||
4163225373804228290,
|
||||
10382959950522770522,
|
||||
9008828410264446883,
|
||||
18411821899404157689,
|
||||
12386199240837247984,
|
||||
13370099281150720481,
|
||||
11909278545073807560,
|
||||
5964354403900302648,
|
||||
15347506722065009035,
|
||||
7045354120681109597,
|
||||
14294096902719509929,
|
||||
6180325033003959541,
|
||||
14381489272445870003,
|
||||
18159920240207503954,
|
||||
17487026929061632528,
|
||||
12314108197538755669,
|
||||
12116872703077811769,
|
||||
3401400733784294722,
|
||||
13905351619889935522,
|
||||
10972472942574358218,
|
||||
6104159581753028261,
|
||||
4690139121547787552,
|
||||
4880965491878697414,
|
||||
1926648890365125214,
|
||||
13532564555356297305,
|
||||
3114545746551080,
|
||||
0,
|
||||
];
|
||||
|
||||
#[rustfmt::skip]
|
||||
const QUADRATIC_NONRESIDUE_TO_T: (Fq, Fq, Fq) = (
|
||||
field_new!(Fq, BigInteger([
|
||||
2456656400918202012,
|
||||
7503386575313625620,
|
||||
1014314685003569848,
|
||||
10473903647598823719,
|
||||
15893393002146336511,
|
||||
8418203974290622500,
|
||||
9017296731996077946,
|
||||
2923126592994124774,
|
||||
9368756030960215800,
|
||||
17344552888362241070,
|
||||
10938255746876359306,
|
||||
107029542386399,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])),
|
||||
field_new!(Fq, BigInteger([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])),
|
||||
);
|
||||
|
||||
// Coefficients for the Frobenius automorphism.
|
||||
// c1[0] = 1,
|
||||
// c1[1] = 24129022407817241407134263419936114379815707076943508280977368156625538709102831814843582780138963119807143081677569721953561801075623741378629346409604471234573396989178424163772589090105392407118197799904755622897541183052132
|
||||
// c1[2] = 17769468560101711995209951371304522748355002843010440790806134764399814103468274958215310983651375801610927890210888755369611256415970113691066895445191924931148019336171640277697829047741006062493737919155152541323243293107868,
|
||||
#[rustfmt::skip]
|
||||
const FROBENIUS_COEFF_FP3_C1: &'static [Fq] = &[
|
||||
FQ_ONE,
|
||||
field_new!(Fq, BigInteger([
|
||||
7739145380395648640,
|
||||
1403348385939055902,
|
||||
11220424057264707228,
|
||||
4567962295300549271,
|
||||
5929583493640677751,
|
||||
17618207486530478833,
|
||||
16600462137977359741,
|
||||
16551719371247820635,
|
||||
12057922785354578416,
|
||||
13022559182829558162,
|
||||
13308285686168533250,
|
||||
313705269181021,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([
|
||||
12973180669431253567,
|
||||
17038664486452692616,
|
||||
11034024317238370177,
|
||||
7712681843988565810,
|
||||
4725787734130647531,
|
||||
2175028350442404679,
|
||||
9323639551697167751,
|
||||
14465264105466053583,
|
||||
8569442212929419360,
|
||||
17553812953652473294,
|
||||
13991744086792172309,
|
||||
48577617831792,
|
||||
])),
|
||||
];
|
||||
|
||||
// c2 = {c1[0], c1[2], c1[1]}
|
||||
#[rustfmt::skip]
|
||||
const FROBENIUS_COEFF_FP3_C2: &'static [Fq] = &[
|
||||
FQ_ONE,
|
||||
Self::FROBENIUS_COEFF_FP3_C1[2],
|
||||
Self::FROBENIUS_COEFF_FP3_C1[1],
|
||||
];
|
||||
}
|
||||
99
mnt6_753/src/fields/fq6.rs
Normal file
99
mnt6_753/src/fields/fq6.rs
Normal file
@@ -0,0 +1,99 @@
|
||||
use crate::{Fq, Fq3, Fq3Parameters, FQ_ONE, FQ_ZERO};
|
||||
use ark_ff::{
|
||||
biginteger::BigInteger768 as BigInteger,
|
||||
field_new,
|
||||
fields::fp6_2over3::{Fp6, Fp6Parameters},
|
||||
};
|
||||
|
||||
pub type Fq6 = Fp6<Fq6Parameters>;
|
||||
|
||||
pub struct Fq6Parameters;
|
||||
|
||||
impl Fp6Parameters for Fq6Parameters {
|
||||
type Fp3Params = Fq3Parameters;
|
||||
|
||||
#[rustfmt::skip]
|
||||
const NONRESIDUE: Fq3 = field_new!(Fq3, FQ_ZERO, FQ_ONE, FQ_ZERO);
|
||||
|
||||
// Coefficients for the Frobenius automorphism.
|
||||
// c1[0] = 1,
|
||||
// c1[1] = 24129022407817241407134263419936114379815707076943508280977368156625538709102831814843582780138963119807143081677569721953561801075623741378629346409604471234573396989178424163772589090105392407118197799904755622897541183052133
|
||||
// c1[2] = 24129022407817241407134263419936114379815707076943508280977368156625538709102831814843582780138963119807143081677569721953561801075623741378629346409604471234573396989178424163772589090105392407118197799904755622897541183052132
|
||||
// c1[3] = 41898490967918953402344214791240637128170709919953949071783502921025352812571106773058893763790338921418070971888458477323173057491593855069696241854796396165721416325350064441470418137846398469611935719059908164220784476160000
|
||||
// c1[4] = 17769468560101711995209951371304522748355002843010440790806134764399814103468274958215310983651375801610927890210888755369611256415970113691066895445191924931148019336171640277697829047741006062493737919155152541323243293107868
|
||||
// c1[5] = 17769468560101711995209951371304522748355002843010440790806134764399814103468274958215310983651375801610927890210888755369611256415970113691066895445191924931148019336171640277697829047741006062493737919155152541323243293107869
|
||||
#[rustfmt::skip]
|
||||
const FROBENIUS_COEFF_FP6_C1: &'static [Fq] = &[
|
||||
FQ_ONE,
|
||||
field_new!(Fq, BigInteger([
|
||||
2665418275744511426,
|
||||
7073776242814464967,
|
||||
4441331072847607829,
|
||||
5681016258918493042,
|
||||
18254896527151449163,
|
||||
10681724016023285331,
|
||||
1760041123371930134,
|
||||
4557299868084578750,
|
||||
16702481779049799698,
|
||||
14149724469588165150,
|
||||
5617650120443517591,
|
||||
449252806040736,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([
|
||||
7739145380395648640,
|
||||
1403348385939055902,
|
||||
11220424057264707228,
|
||||
4567962295300549271,
|
||||
5929583493640677751,
|
||||
17618207486530478833,
|
||||
16600462137977359741,
|
||||
16551719371247820635,
|
||||
12057922785354578416,
|
||||
13022559182829558162,
|
||||
13308285686168533250,
|
||||
313705269181021,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([
|
||||
2265581976117350591,
|
||||
18442012872391748519,
|
||||
3807704300793525789,
|
||||
12280644139289115082,
|
||||
10655371227771325282,
|
||||
1346491763263331896,
|
||||
7477357615964975877,
|
||||
12570239403004322603,
|
||||
2180620924574446161,
|
||||
12129628062772479841,
|
||||
8853285699251153944,
|
||||
362282887012814,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([
|
||||
12973180669431253567,
|
||||
17038664486452692616,
|
||||
11034024317238370177,
|
||||
7712681843988565810,
|
||||
4725787734130647531,
|
||||
2175028350442404679,
|
||||
9323639551697167751,
|
||||
14465264105466053583,
|
||||
8569442212929419360,
|
||||
17553812953652473294,
|
||||
13991744086792172309,
|
||||
48577617831792,
|
||||
])),
|
||||
field_new!(Fq, BigInteger([
|
||||
7899453564780116353,
|
||||
4262348269618550065,
|
||||
4254931332821270779,
|
||||
8825735807606509581,
|
||||
17051100767641418943,
|
||||
13685288953644762793,
|
||||
12929962610801289759,
|
||||
2470844602302811697,
|
||||
13214001206624640642,
|
||||
234234166701528666,
|
||||
6301108521067156651,
|
||||
184125154691507,
|
||||
])),
|
||||
];
|
||||
}
|
||||
1
mnt6_753/src/fields/fr.rs
Normal file
1
mnt6_753/src/fields/fr.rs
Normal file
@@ -0,0 +1 @@
|
||||
pub use ark_mnt4_753::{Fq as Fr, FqParameters as FrParameters};
|
||||
14
mnt6_753/src/fields/mod.rs
Normal file
14
mnt6_753/src/fields/mod.rs
Normal file
@@ -0,0 +1,14 @@
|
||||
pub mod fr;
|
||||
pub use self::fr::*;
|
||||
|
||||
pub mod fq;
|
||||
pub use self::fq::*;
|
||||
|
||||
pub mod fq3;
|
||||
pub use self::fq3::*;
|
||||
|
||||
pub mod fq6;
|
||||
pub use self::fq6::*;
|
||||
|
||||
#[cfg(all(feature = "mnt6_753", test))]
|
||||
mod tests;
|
||||
52
mnt6_753/src/fields/tests.rs
Normal file
52
mnt6_753/src/fields/tests.rs
Normal file
@@ -0,0 +1,52 @@
|
||||
use ark_ff::{
|
||||
fields::{models::fp6_2over3::*, quadratic_extension::QuadExtParameters},
|
||||
test_rng, Field,
|
||||
};
|
||||
use rand::Rng;
|
||||
|
||||
use crate::*;
|
||||
|
||||
use ark_curve_tests::fields::*;
|
||||
|
||||
#[test]
|
||||
fn test_fr() {
|
||||
let mut rng = test_rng();
|
||||
let a: Fr = rng.gen();
|
||||
let b: Fr = rng.gen();
|
||||
field_test(a, b);
|
||||
sqrt_field_test(a);
|
||||
primefield_test::<Fr>();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_fq() {
|
||||
let mut rng = test_rng();
|
||||
let a: Fq = rng.gen();
|
||||
let b: Fq = rng.gen();
|
||||
field_test(a, b);
|
||||
sqrt_field_test(a);
|
||||
primefield_test::<Fq>();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_fq3() {
|
||||
let mut rng = test_rng();
|
||||
let a: Fq3 = rng.gen();
|
||||
let b: Fq3 = rng.gen();
|
||||
field_test(a, b);
|
||||
sqrt_field_test(a);
|
||||
frobenius_test::<Fq3, _>(Fq::characteristic(), 13);
|
||||
assert_eq!(
|
||||
a * Fq6Parameters::NONRESIDUE,
|
||||
<Fp6ParamsWrapper<Fq6Parameters>>::mul_base_field_by_nonresidue(&a)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_fq6() {
|
||||
let mut rng = test_rng();
|
||||
let a: Fq6 = rng.gen();
|
||||
let b: Fq6 = rng.gen();
|
||||
field_test(a, b);
|
||||
frobenius_test::<Fq6, _>(Fq::characteristic(), 13);
|
||||
}
|
||||
Reference in New Issue
Block a user