ark-curves-cherry-picked/ed_on_cp6_782/src/fields/fr.rs
ed_on_cp6_782/src/fields/fr.rsRaw
1use ark_ff::{
2 biginteger::{BigInt, BigInteger384 as BigInteger},
3 fields::{FftParameters, Fp384, Fp384Parameters, FpParameters},
4};
5
6pub type Fr = Fp384<FrParameters>;
7
8pub struct FrParameters;
9
10impl Fp384Parameters for FrParameters {}
11impl FftParameters for FrParameters {
12 type BigInt = BigInteger;
13
14 const TWO_ADICITY: u32 = 2u32;
15
16 #[rustfmt::skip]
17 const TWO_ADIC_ROOT_OF_UNITY: BigInteger = BigInt::new([
18 12119792640622387781u64,
19 8318439284650634613u64,
20 6931324077796168275u64,
21 12851391603681523141u64,
22 6881015057611215092u64,
23 1893962574900431u64,
24 ]);
25}
26impl FpParameters for FrParameters {
27 /// MODULUS = 32333053251621136751331591711861691692049189094364332567435817881934511297123972799646723302813083835942624121493
28 #[rustfmt::skip]
29 const MODULUS: BigInteger = BigInt::new([
30 4684667634276979349u64,
31 3748803659444032385u64,
32 16273581227874629698u64,
33 7152942431629910641u64,
34 6397188139321141543u64,
35 15137289088311837u64,
36 ]);
37
38 const MODULUS_BITS: u32 = 374;
39
40 const CAPACITY: u32 = Self::MODULUS_BITS - 1;
41
42 const REPR_SHAVE_BITS: u32 = 10;
43
44 #[rustfmt::skip]
45 const R: BigInteger = BigInt::new([
46 12565484300600153878u64,
47 8749673077137355528u64,
48 9027943686469014788u64,
49 13026065139386752555u64,
50 11197589485989933721u64,
51 9525964145733727u64,
52 ]);
53
54 #[rustfmt::skip]
55 const R2: BigInteger = BigInt::new([
56 17257035094703902127u64,
57 16096159112880350050u64,
58 3498553494623421763u64,
59 333405339929360058u64,
60 1125865524035793947u64,
61 1586246138566285u64,
62 ]);
63
64 const INV: u64 = 16242011933465909059u64;
65
66 // 2
67 #[rustfmt::skip]
68 const GENERATOR: BigInteger = BigInt::new([
69 1999556893213776791u64,
70 13750542494830678672u64,
71 1782306145063399878u64,
72 452443773434042853u64,
73 15997990832658725900u64,
74 3914639203155617u64,
75 ]);
76
77 #[rustfmt::skip]
78 const MODULUS_MINUS_ONE_DIV_TWO: BigInteger = BigInt::new([
79 11565705853993265482u64,
80 1874401829722016192u64,
81 17360162650792090657u64,
82 12799843252669731128u64,
83 12421966106515346579u64,
84 7568644544155918u64,
85 ]);
86
87 /// 8083263312905284187832897927965422923012297273591083141858954470483627824280993199911680825703270958985656030373
88 const T: BigInteger = BigInt::new([
89 5782852926996632741,
90 10160572951715783904,
91 8680081325396045328,
92 15623293663189641372,
93 6210983053257673289,
94 3784322272077959,
95 ]);
96
97 /// 4041631656452642093916448963982711461506148636795541570929477235241813912140496599955840412851635479492828015186
98 const T_MINUS_ONE_DIV_TWO: BigInteger = BigInt::new([
99 2891426463498316370,
100 5080286475857891952,
101 4340040662698022664,
102 17035018868449596494,
103 12328863563483612452,
104 1892161136038979,
105 ]);
106}