ark-curves-cherry-picked/mnt4_298/src/fields/fr.rs
mnt4_298/src/fields/fr.rsRaw
1use ark_ff::{
2 biginteger::{BigInt, 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 = BigInt::new([
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 = BigInt::new([
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 = BigInt::new([
44 0xc3177aefffbb845c,
45 0x9b80c702f9961788,
46 0xc5df8dcdac70a85a,
47 0x29184098647b5197,
48 0x1c1223d33c3,
49 ]);
50
51 #[rustfmt::skip]
52 const R2: BigInteger = BigInt::new([
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 = BigInt::new([
64 0xb1ddfacffd532b94,
65 0x25e295ff76674008,
66 0x8f00647b48958d36,
67 0x1159f37d4e0fddb2,
68 0x2977770b3d1,
69 ]);
70
71 #[rustfmt::skip]
72 const MODULUS_MINUS_ONE_DIV_TWO: BigInteger = BigInt::new([
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 = BigInt::new([
84 0xe4975ab4eed0cd29,
85 0xd73d10653ed25301,
86 0x69ec1523b2bbb258,
87 0x3def351ce8998927,
88 0xef,
89 ]);
90
91 #[rustfmt::skip]
92 const T_MINUS_ONE_DIV_TWO: BigInteger = BigInt::new([
93 0xf24bad5a77686694,
94 0x6b9e88329f692980,
95 0xb4f60a91d95dd92c,
96 0x9ef79a8e744cc493,
97 0x77,
98 ]);
99}