arnaucube
arnaucube/ark-curves-cherry-pickedPublic Self-hosted repository
ark-curves-cherry-picked/ed_on_bls12_377/src/fields/fr.rs
ed_on_bls12_377/src/fields/fr.rsRaw
 1use ark_ff::{
 2    biginteger::BigInteger256 as BigInteger,
 3    fields::{FftParameters, Fp256, Fp256Parameters, FpParameters},
 4};
 5
 6pub type Fr = Fp256<FrParameters>;
 7
 8pub struct FrParameters;
 9
10impl Fp256Parameters for FrParameters {}
11impl FftParameters for FrParameters {
12    type BigInt = BigInteger;
13
14    const TWO_ADICITY: u32 = 1;
15
16    #[rustfmt::skip]
17    const TWO_ADIC_ROOT_OF_UNITY: BigInteger = BigInteger([
18        15170730761708361161u64,
19        13670723686578117817u64,
20        12803492266614043665u64,
21        50861023252832611u64,
22    ]);
23}
24impl FpParameters for FrParameters {
25    /// MODULUS = 2111115437357092606062206234695386632838870926408408195193685246394721360383
26    #[rustfmt::skip]
27    const MODULUS: BigInteger = BigInteger([
28        13356249993388743167u64,
29        5950279507993463550u64,
30        10965441865914903552u64,
31        336320092672043349u64,
32    ]);
33
34    const MODULUS_BITS: u32 = 251;
35
36    const CAPACITY: u32 = Self::MODULUS_BITS - 1;
37
38    const REPR_SHAVE_BITS: u32 = 5;
39
40    #[rustfmt::skip]
41    const R: BigInteger = BigInteger([
42        16632263305389933622u64,
43        10726299895124897348u64,
44        16608693673010411502u64,
45        285459069419210737u64,
46    ]);
47
48    #[rustfmt::skip]
49    const R2: BigInteger = BigInteger([
50        3987543627614508126u64,
51        17742427666091596403u64,
52        14557327917022607905u64,
53        322810149704226881u64,
54    ]);
55
56    const INV: u64 = 9659935179256617473u64;
57
58    // 70865795004005329077606947863872807680085016823885970091001235374859923341923
59    #[rustfmt::skip]
60    const GENERATOR: BigInteger = BigInteger([
61        11289572479685143826u64,
62        11383637369941080925u64,
63        2288212753973340071u64,
64        82014976407880291u64,
65    ]);
66
67    #[rustfmt::skip]
68    const MODULUS_MINUS_ONE_DIV_TWO: BigInteger = BigInteger([
69        6678124996694371583u64,
70        2975139753996731775u64,
71        14706092969812227584u64,
72        168160046336021674u64,
73    ]);
74
75    const T: BigInteger = Self::MODULUS_MINUS_ONE_DIV_TWO;
76
77    const T_MINUS_ONE_DIV_TWO: BigInteger = BigInteger([
78        0xae56bba6b0cff67f,
79        0x14a4e8ebf10f22bf,
80        0x660b44d1e5c37b00,
81        0x12ab655e9a2ca55,
82    ]);
83}