1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
use ark_ff::{
biginteger::BigInteger256 as BigInteger,
fields::{FftParameters, Fp256, Fp256Parameters, FpParameters},
};
pub struct FrParameters;
pub type Fr = Fp256<FrParameters>;
impl Fp256Parameters for FrParameters {}
impl FftParameters for FrParameters {
type BigInt = BigInteger;
const TWO_ADICITY: u32 = 32;
const TWO_ADIC_ROOT_OF_UNITY: BigInteger = BigInteger([
0x218077428c9942de,
0xcc49578921b60494,
0xac2e5d27b2efbee2,
0x0b79fa897f2db056,
]);
}
impl FpParameters for FrParameters {
const MODULUS: BigInteger = BigInteger([
0x8c46eb2100000001,
0x224698fc0994a8dd,
0x0000000000000000,
0x4000000000000000,
]);
const R: BigInteger = BigInteger([
0x5b2b3e9cfffffffd,
0x992c350be3420567,
0xffffffffffffffff,
0x3fffffffffffffff,
]);
const R2: BigInteger = BigInteger([
0xfc9678ff0000000f,
0x67bb433d891a16e3,
0x7fae231004ccf590,
0x096d41af7ccfdaa9,
]);
const MODULUS_MINUS_ONE_DIV_TWO: BigInteger = BigInteger([
0xc623759080000000,
0x11234c7e04ca546e,
0x0000000000000000,
0x2000000000000000,
]);
const T: BigInteger = BigInteger([
0x0994a8dd8c46eb21,
0x00000000224698fc,
0x0000000000000000,
0x0000000040000000,
]);
const T_MINUS_ONE_DIV_TWO: BigInteger = BigInteger([
0x04ca546ec6237590,
0x0000000011234c7e,
0x0000000000000000,
0x0000000020000000,
]);
const GENERATOR: BigInteger = BigInteger([
0x96bc8c8cffffffed,
0x74c2a54b49f7778e,
0xfffffffffffffffd,
0x3fffffffffffffff,
]);
const MODULUS_BITS: u32 = 255;
const CAPACITY: u32 = Self::MODULUS_BITS - 1;
const REPR_SHAVE_BITS: u32 = 1;
const INV: u64 = 10108024940646105087;
}