ark-curves-cherry-picked/cp6_782/src/fields/fq.rs
cp6_782/src/fields/fq.rsRaw
1use ark_ff::{
2 biginteger::BigInteger832 as BigInteger,
3 fields::{FftParameters, Fp832, Fp832Parameters, FpParameters},
4};
5
6pub type Fq = Fp832<FqParameters>;
7
8pub struct FqParameters;
9
10impl Fp832Parameters for FqParameters {}
11impl FftParameters for FqParameters {
12 type BigInt = BigInteger;
13
14 const TWO_ADICITY: u32 = 3;
15
16 #[rustfmt::skip]
17 const TWO_ADIC_ROOT_OF_UNITY: BigInteger = BigInteger([
18 18044746167194862600u64,
19 63590321303744709u64,
20 5009346151370959890u64,
21 2859114157767503991u64,
22 8301813204852325413u64,
23 5629414263664332594u64,
24 2637340888701394641u64,
25 17433538052687852753u64,
26 2230763098934759248u64,
27 3785382115983092023u64,
28 8895511354022222370u64,
29 15792083141709071785u64,
30 1328u64,
31 ]);
32}
33impl FpParameters for FqParameters {
34 /// MODULUS = 22369874298875696930346742206501054934775599465297184582183496627646774052458024540232479018147881220178054575403841904557897715222633333372134756426301062487682326574958588001132586331462553235407484089304633076250782629492557320825577
35 #[rustfmt::skip]
36 const MODULUS: BigInteger = BigInteger([
37 0xdace79b57b942ae9,
38 0x545d85c16dfd424a,
39 0xee135c065f4d26b7,
40 0x9c2f764a12c4024b,
41 0x1ad533049cfe6a39,
42 0x52a3fb77c79c1320,
43 0xab3596c8617c5792,
44 0x830c728d80f9d78b,
45 0x6a7223ee72023d07,
46 0xbc5d176b746af026,
47 0xe959283d8f526663,
48 0xc4d2263babf8941f,
49 0x3848,
50 ]);
51
52 const MODULUS_BITS: u32 = 782;
53
54 const CAPACITY: u32 = Self::MODULUS_BITS - 1;
55
56 const REPR_SHAVE_BITS: u32 = 50;
57
58 #[rustfmt::skip]
59 const R: BigInteger = BigInteger([
60 11190988450819017841u64,
61 16170411717126802030u64,
62 2265463223430229059u64,
63 16946880912571045974u64,
64 11155248462028513229u64,
65 12855672356664541314u64,
66 8489376931127408159u64,
67 2655797810825538098u64,
68 9648483887143916718u64,
69 17514963461276738952u64,
70 16777089214204267338u64,
71 15649035958020076168u64,
72 8659u64,
73 ]);
74
75 #[rustfmt::skip]
76 const R2: BigInteger = BigInteger([
77 13983406830510863714u64,
78 17863856572171232656u64,
79 1698388424046564526u64,
80 1773634430448388392u64,
81 8684647957094413275u64,
82 3992637317298078843u64,
83 18420879196616862245u64,
84 3238482510270583127u64,
85 7928200707794018216u64,
86 10024831010452223910u64,
87 9613847725664942650u64,
88 15361265984156787358u64,
89 7833u64,
90 ]);
91
92 const INV: u64 = 14469047335842394791u64;
93
94 /// GENERATOR = 13
95 #[rustfmt::skip]
96 const GENERATOR: BigInteger = BigInteger([
97 16669393626057438558u64,
98 1640520694378723217u64,
99 1598646156981121135u64,
100 12401834967100173388u64,
101 2356467520877704673u64,
102 14759118825104212161u64,
103 5556628239575210651u64,
104 5317520392768798654u64,
105 16398429955031064995u64,
106 3556102264904210145u64,
107 8166834915717907988u64,
108 11926665585800594452u64,
109 11716u64,
110 ]);
111
112 #[rustfmt::skip]
113 const MODULUS_MINUS_ONE_DIV_TWO: BigInteger = BigInteger([
114 0x6d673cdabdca1574,
115 0xaa2ec2e0b6fea125,
116 0xf709ae032fa6935b,
117 0xce17bb2509620125,
118 0xd6a99824e7f351c,
119 0x2951fdbbe3ce0990,
120 0xd59acb6430be2bc9,
121 0xc1863946c07cebc5,
122 0x353911f739011e83,
123 0xde2e8bb5ba357813,
124 0xf4ac941ec7a93331,
125 0x6269131dd5fc4a0f,
126 0x1c24,
127 ]);
128
129 // (T - 1)/2 =
130 // 1398117143679731058146671387906315933423474966581074036386468539227923378278626533764529938634242576261128410962740119034868607201414583335758422276643816405480145410934911750070786645716409577212967755581539567265673914343284832551598
131 #[rustfmt::skip]
132 const T_MINUS_ONE_DIV_TWO: BigInteger = BigInteger([
133 0xadace79b57b942ae,
134 0x7545d85c16dfd424,
135 0xbee135c065f4d26b,
136 0x99c2f764a12c4024,
137 0x1ad533049cfe6a3,
138 0x252a3fb77c79c132,
139 0xbab3596c8617c579,
140 0x7830c728d80f9d78,
141 0x66a7223ee72023d0,
142 0x3bc5d176b746af02,
143 0xfe959283d8f52666,
144 0x8c4d2263babf8941,
145 0x384,
146 ]);
147
148 // T =
149 // 2796234287359462116293342775812631866846949933162148072772937078455846756557253067529059877268485152522256821925480238069737214402829166671516844553287632810960290821869823500141573291432819154425935511163079134531347828686569665103197
150 #[rustfmt::skip]
151 const T: BigInteger = BigInteger([
152 0x5b59cf36af72855d,
153 0xea8bb0b82dbfa849,
154 0x7dc26b80cbe9a4d6,
155 0x3385eec942588049,
156 0x35aa660939fcd47,
157 0x4a547f6ef8f38264,
158 0x7566b2d90c2f8af2,
159 0xf0618e51b01f3af1,
160 0xcd4e447dce4047a0,
161 0x778ba2ed6e8d5e04,
162 0xfd2b2507b1ea4ccc,
163 0x189a44c7757f1283,
164 0x709,
165 ]);
166}