arnaucube
arnaucube/ark-curves-cherry-pickedPublic Self-hosted repository
ark-curves-cherry-picked/mnt4_298/src/fields/fr.rs
mnt4_298/src/fields/fr.rsRaw
 1use ark_ff::{
 2    biginteger::BigInteger320 as BigInteger,
 3    fields::{FftParameters, Fp320, Fp320Parameters, FpParameters},
 4};
 5
 6pub type Fr = Fp320<FrParameters>;
 7
 8pub struct FrParameters;
 9
10impl Fp320Parameters for FrParameters {}
11impl FftParameters for FrParameters {
12    type BigInt = BigInteger;
13
14    const TWO_ADICITY: u32 = 34;
15
16    #[rustfmt::skip]
17    const TWO_ADIC_ROOT_OF_UNITY: BigInteger = BigInteger([
18        0x818b361df1af7be4,
19        0x2ae2750d46a53957,
20        0x5784a8fe792c5f8a,
21        0xf9bd39c0cdcf1bb6,
22        0x6a24a0f8a8,
23    ]);
24}
25impl FpParameters for FrParameters {
26    /// MODULUS = 475922286169261325753349249653048451545124878552823515553267735739164647307408490559963137
27    #[rustfmt::skip]
28    const MODULUS: BigInteger = BigInteger([
29        0xbb4334a400000001,
30        0xfb494c07925d6ad3,
31        0xcaeec9635cf44194,
32        0xa266249da7b0548e,
33        0x3bcf7bcd473,
34    ]);
35
36    const MODULUS_BITS: u32 = 298;
37
38    const CAPACITY: u32 = Self::MODULUS_BITS - 1;
39
40    const REPR_SHAVE_BITS: u32 = 22;
41
42    #[rustfmt::skip]
43    const R: BigInteger = BigInteger([
44        0xc3177aefffbb845c,
45        0x9b80c702f9961788,
46        0xc5df8dcdac70a85a,
47        0x29184098647b5197,
48        0x1c1223d33c3,
49    ]);
50
51    #[rustfmt::skip]
52    const R2: BigInteger = BigInteger([
53        0x465a743c68e0596b,
54        0x34f9102adb68371,
55        0x4bbd6dcf1e3a8386,
56        0x2ff00dced8e4b6d,
57        0x149bb44a342,
58    ]);
59
60    const INV: u64 = 0xbb4334a3ffffffff;
61
62    #[rustfmt::skip]
63    const GENERATOR: BigInteger = BigInteger([
64        0xb1ddfacffd532b94,
65        0x25e295ff76674008,
66        0x8f00647b48958d36,
67        0x1159f37d4e0fddb2,
68        0x2977770b3d1,
69    ]);
70
71    #[rustfmt::skip]
72    const MODULUS_MINUS_ONE_DIV_TWO: BigInteger = BigInteger([
73        0xdda19a5200000000,
74        0x7da4a603c92eb569,
75        0x657764b1ae7a20ca,
76        0xd133124ed3d82a47,
77        0x1de7bde6a39,
78    ]);
79
80    // T and T_MINUS_ONE_DIV_TWO, where MODULUS - 1 = 2^S * T
81
82    #[rustfmt::skip]
83    const T: BigInteger = BigInteger([
84        0xe4975ab4eed0cd29,
85        0xd73d10653ed25301,
86        0x69ec1523b2bbb258,
87        0x3def351ce8998927,
88        0xef,
89    ]);
90
91    #[rustfmt::skip]
92    const T_MINUS_ONE_DIV_TWO: BigInteger = BigInteger([
93        0xf24bad5a77686694,
94        0x6b9e88329f692980,
95        0xb4f60a91d95dd92c,
96        0x9ef79a8e744cc493,
97        0x77,
98    ]);
99}