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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
use snarkvm_fields::{
FftParameters,
FieldParameters,
Fp256,
Fp256Parameters,
PoseidonDefaultParameters,
PoseidonDefaultParametersEntry,
};
use snarkvm_utilities::biginteger::BigInteger256 as BigInteger;
pub type Fr = Fp256<FrParameters>;
pub struct FrParameters;
impl Fp256Parameters for FrParameters {}
impl FftParameters for FrParameters {
type BigInteger = BigInteger;
const TWO_ADICITY: u32 = 1;
#[rustfmt::skip]
const TWO_ADIC_ROOT_OF_UNITY: BigInteger = BigInteger([
15170730761708361161u64,
13670723686578117817u64,
12803492266614043665u64,
50861023252832611u64,
]);
}
impl FieldParameters for FrParameters {
#[rustfmt::skip]
const CAPACITY: u32 = Self::MODULUS_BITS - 1;
#[rustfmt::skip]
const GENERATOR: BigInteger = BigInteger([
11289572479685143826u64,
11383637369941080925u64,
2288212753973340071u64,
82014976407880291u64,
]);
#[rustfmt::skip]
const INV: u64 = 9659935179256617473u64;
#[rustfmt::skip]
const MODULUS: BigInteger = BigInteger([
13356249993388743167u64,
5950279507993463550u64,
10965441865914903552u64,
336320092672043349u64,
]);
#[rustfmt::skip]
const MODULUS_BITS: u32 = 251;
#[rustfmt::skip]
const MODULUS_MINUS_ONE_DIV_TWO: BigInteger = BigInteger([
6678124996694371583u64,
2975139753996731775u64,
14706092969812227584u64,
168160046336021674u64,
]);
#[rustfmt::skip]
const R: BigInteger = BigInteger([
16632263305389933622u64,
10726299895124897348u64,
16608693673010411502u64,
285459069419210737u64,
]);
#[rustfmt::skip]
const R2: BigInteger = BigInteger([
3987543627614508126u64,
17742427666091596403u64,
14557327917022607905u64,
322810149704226881u64,
]);
#[rustfmt::skip]
const REPR_SHAVE_BITS: u32 = 5;
#[rustfmt::skip]
const T: BigInteger = BigInteger([
6678124996694371583,
2975139753996731775,
14706092969812227584,
168160046336021674
]);
#[rustfmt::skip]
const T_MINUS_ONE_DIV_TWO: BigInteger = BigInteger([
12562434535201961599,
1487569876998365887,
7353046484906113792,
84080023168010837
]);
}
impl PoseidonDefaultParameters for FrParameters {
const PARAMS_OPT_FOR_CONSTRAINTS: [PoseidonDefaultParametersEntry; 7] = [
PoseidonDefaultParametersEntry::new(2, 17, 8, 31, 0),
PoseidonDefaultParametersEntry::new(3, 5, 8, 56, 0),
PoseidonDefaultParametersEntry::new(4, 5, 8, 56, 0),
PoseidonDefaultParametersEntry::new(5, 5, 8, 57, 0),
PoseidonDefaultParametersEntry::new(6, 3, 8, 84, 0),
PoseidonDefaultParametersEntry::new(7, 3, 8, 84, 0),
PoseidonDefaultParametersEntry::new(8, 3, 8, 84, 0),
];
const PARAMS_OPT_FOR_WEIGHTS: [PoseidonDefaultParametersEntry; 7] = [
PoseidonDefaultParametersEntry::new(2, 257, 8, 13, 0),
PoseidonDefaultParametersEntry::new(3, 257, 8, 13, 0),
PoseidonDefaultParametersEntry::new(4, 257, 8, 13, 0),
PoseidonDefaultParametersEntry::new(5, 257, 8, 13, 0),
PoseidonDefaultParametersEntry::new(6, 257, 8, 13, 0),
PoseidonDefaultParametersEntry::new(7, 257, 8, 13, 0),
PoseidonDefaultParametersEntry::new(8, 257, 8, 13, 0),
];
}