arnaucube
arnaucube/ark-curves-cherry-pickedPublic Self-hosted repository
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}