Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
secp256r1.hpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: not started, auditors: [], date: YYYY-MM-DD }
3// external_1: { status: not started, auditors: [], date: YYYY-MM-DD }
4// external_2: { status: not started, auditors: [], date: YYYY-MM-DD }
5// =====================
6
7#pragma once
8
9#include "../../fields/field.hpp"
10#include "../../groups/group.hpp"
11
12namespace bb::secp256r1 {
13// NOLINTBEGIN(cppcoreguidelines-avoid-c-arrays)
14struct FqParams {
15 // A little-endian representation of the modulus split into 4 64-bit words
16 static constexpr uint64_t modulus_0 = 0xFFFFFFFFFFFFFFFFULL;
17 static constexpr uint64_t modulus_1 = 0x00000000FFFFFFFFULL;
18 static constexpr uint64_t modulus_2 = 0x0000000000000000ULL;
19 static constexpr uint64_t modulus_3 = 0xFFFFFFFF00000001ULL;
20
21 // A little-endian representation of R^2 modulo the modulus (R=2^256 mod modulus) split into 4 64-bit words
22 static constexpr uint64_t r_squared_0 = 3ULL;
23 static constexpr uint64_t r_squared_1 = 18446744056529682431ULL;
24 static constexpr uint64_t r_squared_2 = 18446744073709551614ULL;
25 static constexpr uint64_t r_squared_3 = 21474836477ULL;
26
27 // -(Modulus^-1) mod 2^64
28 // This is used to compute k = r_inv * lower_limb(scalar), such that scalar + k*modulus in integers would have 0 in
29 // the lowest limb By performing this sequentially for 4 limbs, we get an 8-limb representation of the scalar, where
30 // the lowest 4 limbs are zeros. Then we can immediately divide by 2^256 by simply getting rid of the lowest 4 limbs
31 static constexpr uint64_t r_inv = 1;
32
33 // 2^(-64) mod Modulus
34 // Used in the reduction mechanism from https://hackmd.io/@Ingonyama/Barret-Montgomery
35 // Instead of computing k, we multiply the lowest limb by this value and then add to the following 5 limbs.
36 // This saves us from having to compute k
37 static constexpr uint64_t r_inv_0 = 0x100000000UL;
38 static constexpr uint64_t r_inv_1 = 0x0UL;
39 static constexpr uint64_t r_inv_2 = 0xffffffff00000001UL;
40 static constexpr uint64_t r_inv_3 = 0x0UL;
41
42 // 2^(-29) mod Modulus
43 // Used in the reduction mechanism from https://hackmd.io/@Ingonyama/Barret-Montgomery
44 // Instead of computing k, we multiply the lowest limb by this value and then add to the following 10 limbs.
45 // This saves us from having to compute k
46 static constexpr uint64_t r_inv_wasm_0 = 0x0;
47 static constexpr uint64_t r_inv_wasm_1 = 0x0;
48 static constexpr uint64_t r_inv_wasm_2 = 0x200;
49 static constexpr uint64_t r_inv_wasm_3 = 0x0;
50 static constexpr uint64_t r_inv_wasm_4 = 0x0;
51 static constexpr uint64_t r_inv_wasm_5 = 0x40000;
52 static constexpr uint64_t r_inv_wasm_6 = 0x1fe00000;
53 static constexpr uint64_t r_inv_wasm_7 = 0xffffff;
54 static constexpr uint64_t r_inv_wasm_8 = 0x0;
55
56 // Coset generators in Montgomery form for R=2^256 mod Modulus. Used in FFT-based proving systems, don't really need
57 // them here
58 static constexpr uint64_t coset_generators_0[8]{
59 0x3ULL, 0x4ULL, 0x5ULL, 0x6ULL, 0x7ULL, 0x8ULL, 0x9ULL, 0xaULL,
60 };
61 static constexpr uint64_t coset_generators_1[8]{
62 0xfffffffd00000000ULL, 0xfffffffc00000000ULL, 0xfffffffb00000000ULL, 0xfffffffa00000000ULL,
63 0xfffffff900000000ULL, 0xfffffff800000000ULL, 0xfffffff700000000ULL, 0xfffffff600000000ULL,
64 };
65 static constexpr uint64_t coset_generators_2[8]{
66 0xffffffffffffffffULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL,
67 0xffffffffffffffffULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL,
68 };
69 static constexpr uint64_t coset_generators_3[8]{
70 0x2fffffffcULL, 0x3fffffffbULL, 0x4fffffffaULL, 0x5fffffff9ULL,
71 0x6fffffff8ULL, 0x7fffffff7ULL, 0x8fffffff6ULL, 0x9fffffff5ULL,
72 };
73
74 // Not used for secp256r1
75 static constexpr uint64_t cube_root_0 = 0UL;
76 static constexpr uint64_t cube_root_1 = 0UL;
77 static constexpr uint64_t cube_root_2 = 0UL;
78 static constexpr uint64_t cube_root_3 = 0UL;
79
80 // Not used for secp256r1
81 static constexpr uint64_t primitive_root_0 = 0UL;
82 static constexpr uint64_t primitive_root_1 = 0UL;
83 static constexpr uint64_t primitive_root_2 = 0UL;
84 static constexpr uint64_t primitive_root_3 = 0UL;
85
86 // A little-endian representation of the modulus split into 9 29-bit limbs
87 // This is used in wasm because we can only do multiplication with 64-bit result instead of 128-bit like in x86_64
88 static constexpr uint64_t modulus_wasm_0 = 0x1fffffff;
89 static constexpr uint64_t modulus_wasm_1 = 0x1fffffff;
90 static constexpr uint64_t modulus_wasm_2 = 0x1fffffff;
91 static constexpr uint64_t modulus_wasm_3 = 0x1ff;
92 static constexpr uint64_t modulus_wasm_4 = 0x0;
93 static constexpr uint64_t modulus_wasm_5 = 0x0;
94 static constexpr uint64_t modulus_wasm_6 = 0x40000;
95 static constexpr uint64_t modulus_wasm_7 = 0x1fe00000;
96 static constexpr uint64_t modulus_wasm_8 = 0xffffff;
97
98 // A little-endian representation of R^2 modulo the modulus (R=2^261 mod modulus) split into 4 64-bit words
99 // We use 2^261 in wasm, because 261=29*9, the 9 29-bit limbs used for arithmetic
100 static constexpr uint64_t r_squared_wasm_0 = 0x0000000000000c00UL;
101 static constexpr uint64_t r_squared_wasm_1 = 0xffffeffffffffc00UL;
102 static constexpr uint64_t r_squared_wasm_2 = 0xfffffffffffffbffUL;
103 static constexpr uint64_t r_squared_wasm_3 = 0x000013fffffff7ffUL;
104
105 // Not used for secp256r1
106 static constexpr uint64_t cube_root_wasm_0 = 0x0000000000000000UL;
107 static constexpr uint64_t cube_root_wasm_1 = 0x0000000000000000UL;
108 static constexpr uint64_t cube_root_wasm_2 = 0x0000000000000000UL;
109 static constexpr uint64_t cube_root_wasm_3 = 0x0000000000000000UL;
110
111 // Not used for secp256r1
112 static constexpr uint64_t primitive_root_wasm_0 = 0x0000000000000000UL;
113 static constexpr uint64_t primitive_root_wasm_1 = 0x0000000000000000UL;
114 static constexpr uint64_t primitive_root_wasm_2 = 0x0000000000000000UL;
115 static constexpr uint64_t primitive_root_wasm_3 = 0x0000000000000000UL;
116
117 // Coset generators in Montgomery form for R=2^261 mod Modulus. Used in FFT-based proving systems, don't really need
118 // them here
119 static constexpr uint64_t coset_generators_wasm_0[8] = { 0x0000000000000060ULL, 0x0000000000000080ULL,
120 0x00000000000000a0ULL, 0x00000000000000c0ULL,
121 0x00000000000000e0ULL, 0x0000000000000100ULL,
122 0x0000000000000120ULL, 0x0000000000000140ULL };
123 static constexpr uint64_t coset_generators_wasm_1[8] = { 0xffffffa000000000ULL, 0xffffff8000000000ULL,
124 0xffffff6000000000ULL, 0xffffff4000000000ULL,
125 0xffffff2000000000ULL, 0xffffff0000000000ULL,
126 0xfffffee000000000ULL, 0xfffffec000000000ULL };
127 static constexpr uint64_t coset_generators_wasm_2[8] = { 0xffffffffffffffffULL, 0xffffffffffffffffULL,
128 0xffffffffffffffffULL, 0xffffffffffffffffULL,
129 0xffffffffffffffffULL, 0xffffffffffffffffULL,
130 0xffffffffffffffffULL, 0xffffffffffffffffULL };
131 static constexpr uint64_t coset_generators_wasm_3[8] = { 0x0000005fffffff9fULL, 0x0000007fffffff7fULL,
132 0x0000009fffffff5fULL, 0x000000bfffffff3fULL,
133 0x000000dfffffff1fULL, 0x000000fffffffeffULL,
134 0x0000011ffffffedfULL, 0x0000013ffffffebfULL };
135
136 // For consistency with bb::fq, if we ever represent an element of bb::secp256r1::fq in the public inputs, we do so
137 // as a bigfield element, so with 4 public inputs
138 static constexpr size_t PUBLIC_INPUTS_SIZE = BIGFIELD_PUBLIC_INPUTS_SIZE;
139};
141
142struct FrParams {
143
144 // A little-endian representation of the modulus split into 4 64-bit words
145 static constexpr uint64_t modulus_0 = 0xF3B9CAC2FC632551ULL;
146 static constexpr uint64_t modulus_1 = 0xBCE6FAADA7179E84ULL;
147 static constexpr uint64_t modulus_2 = 0xFFFFFFFFFFFFFFFFULL;
148 static constexpr uint64_t modulus_3 = 0xFFFFFFFF00000000ULL;
149
150 // A little-endian representation of R^2 modulo the modulus (R=2^256 mod modulus) split into 4 64-bit words
151 static constexpr uint64_t r_squared_0 = 9449762124159643298ULL;
152 static constexpr uint64_t r_squared_1 = 5087230966250696614ULL;
153 static constexpr uint64_t r_squared_2 = 2901921493521525849ULL;
154 static constexpr uint64_t r_squared_3 = 7413256579398063648ULL;
155
156 // -(Modulus^-1) mod 2^64
157 // This is used to compute k = r_inv * lower_limb(scalar), such that scalar + k*modulus in integers would have 0 in
158 // the lowest limb By performing this sequentially for 4 limbs, we get an 8-limb representation of the scalar, where
159 // the lowest 4 limbs are zeros. Then we can immediately divide by 2^256 by simply getting rid of the lowest 4 limbs
160 static constexpr uint64_t r_inv = 14758798090332847183ULL;
161
162 // 2^(-64) mod Modulus
163 // Used in the reduction mechanism from https://hackmd.io/@Ingonyama/Barret-Montgomery
164 // Instead of computing k, we multiply the lowest limb by this value and then add to the following 5 limbs.
165 // This saves us from having to compute k
166 static constexpr uint64_t r_inv_0 = 0x230102a06d6251dcUL;
167 static constexpr uint64_t r_inv_1 = 0xca5113bcafc4ea28UL;
168 static constexpr uint64_t r_inv_2 = 0xded10c5bee00bc4eUL;
169 static constexpr uint64_t r_inv_3 = 0xccd1c8aa212ef3a4UL;
170
171 // 2^(-29) mod Modulus
172 // Used in the reduction mechanism from https://hackmd.io/@Ingonyama/Barret-Montgomery
173 // Instead of computing k, we multiply the lowest limb by this value and then add to the following 5 limbs.
174 // This saves us from having to compute k
175 static constexpr uint64_t r_inv_wasm_0 = 0x8517c79;
176 static constexpr uint64_t r_inv_wasm_1 = 0x1edc694;
177 static constexpr uint64_t r_inv_wasm_2 = 0x459ee5c;
178 static constexpr uint64_t r_inv_wasm_3 = 0x705a6a8;
179 static constexpr uint64_t r_inv_wasm_4 = 0x1ffffe2a;
180 static constexpr uint64_t r_inv_wasm_5 = 0x113bffff;
181 static constexpr uint64_t r_inv_wasm_6 = 0x1621c017;
182 static constexpr uint64_t r_inv_wasm_7 = 0xef1ff43;
183 static constexpr uint64_t r_inv_wasm_8 = 0x7005e2;
184
185 // Coset generators in Montgomery form for R=2^256 mod Modulus. Used in FFT-based proving systems, don't really need
186 // them here
187 static constexpr uint64_t coset_generators_0[8]{
188 0x55eb74ab1949fac9ULL, 0x6231a9e81ce6d578ULL, 0x6e77df252083b027ULL, 0x7abe146224208ad6ULL,
189 0x8704499f27bd6585ULL, 0x934a7edc2b5a4034ULL, 0x9f90b4192ef71ae3ULL, 0xabd6e9563293f592ULL,
190 };
191 static constexpr uint64_t coset_generators_1[8]{
192 0xd5af25406e5aaa5dULL, 0x18c82a92c7430bd8ULL, 0x5be12fe5202b6d53ULL, 0x9efa35377913ceceULL,
193 0xe2133a89d1fc3049ULL, 0x252c3fdc2ae491c4ULL, 0x6845452e83ccf33fULL, 0xab5e4a80dcb554baULL,
194 };
195 static constexpr uint64_t coset_generators_2[8]{
196 0x1ULL, 0x2ULL, 0x2ULL, 0x2ULL, 0x2ULL, 0x3ULL, 0x3ULL, 0x3ULL,
197 };
198 static constexpr uint64_t coset_generators_3[8]{
199 0x6fffffff9ULL, 0x7fffffff8ULL, 0x8fffffff7ULL, 0x9fffffff6ULL,
200 0xafffffff5ULL, 0xbfffffff4ULL, 0xcfffffff3ULL, 0xdfffffff2ULL,
201 };
202
203 // Not used for secp256r1
204 static constexpr uint64_t cube_root_0 = 0UL;
205 static constexpr uint64_t cube_root_1 = 0UL;
206 static constexpr uint64_t cube_root_2 = 0UL;
207 static constexpr uint64_t cube_root_3 = 0UL;
208
209 // Not used for secp256r1
210 static constexpr uint64_t primitive_root_0 = 0UL;
211 static constexpr uint64_t primitive_root_1 = 0UL;
212 static constexpr uint64_t primitive_root_2 = 0UL;
213 static constexpr uint64_t primitive_root_3 = 0UL;
214
215 // A little-endian representation of the modulus split into 9 29-bit limbs
216 // This is used in wasm because we can only do multiplication with 64-bit result instead of 128-bit like in x86_64
217 static constexpr uint64_t modulus_wasm_0 = 0x1c632551;
218 static constexpr uint64_t modulus_wasm_1 = 0x1dce5617;
219 static constexpr uint64_t modulus_wasm_2 = 0x5e7a13c;
220 static constexpr uint64_t modulus_wasm_3 = 0xdf55b4e;
221 static constexpr uint64_t modulus_wasm_4 = 0x1ffffbce;
222 static constexpr uint64_t modulus_wasm_5 = 0x1fffffff;
223 static constexpr uint64_t modulus_wasm_6 = 0x3ffff;
224 static constexpr uint64_t modulus_wasm_7 = 0x1fe00000;
225 static constexpr uint64_t modulus_wasm_8 = 0xffffff;
226
227 // A little-endian representation of R^2 modulo the modulus (R=2^261 mod modulus) split into 4 64-bit words
228 // We use 2^261 in wasm, because 261=29*9, the 9 29-bit limbs used for arithmetic
229 static constexpr uint64_t r_squared_wasm_0 = 0x45e9cfeeb48d9ef5UL;
230 static constexpr uint64_t r_squared_wasm_1 = 0x1f11fc5bb2d31a99UL;
231 static constexpr uint64_t r_squared_wasm_2 = 0x16c8e4adafb16586UL;
232 static constexpr uint64_t r_squared_wasm_3 = 0x84b6556a65587f06UL;
233
234 // Not used for secp256r1
235 static constexpr uint64_t cube_root_wasm_0 = 0x0000000000000000UL;
236 static constexpr uint64_t cube_root_wasm_1 = 0x0000000000000000UL;
237 static constexpr uint64_t cube_root_wasm_2 = 0x0000000000000000UL;
238 static constexpr uint64_t cube_root_wasm_3 = 0x0000000000000000UL;
239
240 // Not used for secp256r1
241 static constexpr uint64_t primitive_root_wasm_0 = 0x0000000000000000UL;
242 static constexpr uint64_t primitive_root_wasm_1 = 0x0000000000000000UL;
243 static constexpr uint64_t primitive_root_wasm_2 = 0x0000000000000000UL;
244 static constexpr uint64_t primitive_root_wasm_3 = 0x0000000000000000UL;
245
246 // Coset generators in Montgomery form for R=2^261 mod Modulus. Used in FFT-based proving systems, don't really need
247 // them here
248 static constexpr uint64_t coset_generators_wasm_0[8] = { 0xbd6e9563293f5920ULL, 0x46353d039cdaaf00ULL,
249 0xcefbe4a4107604e0ULL, 0x57c28c4484115ac0ULL,
250 0xe08933e4f7acb0a0ULL, 0x694fdb856b480680ULL,
251 0xf2168325dee35c60ULL, 0x7add2ac6527eb240ULL };
252 static constexpr uint64_t coset_generators_wasm_1[8] = { 0xb5e4a80dcb554baaULL, 0x19055258e8617b0cULL,
253 0x7c25fca4056daa6dULL, 0xdf46a6ef2279d9cfULL,
254 0x4267513a3f860930ULL, 0xa587fb855c923892ULL,
255 0x08a8a5d0799e67f3ULL, 0x6bc9501b96aa9755ULL };
256 static constexpr uint64_t coset_generators_wasm_2[8] = { 0x000000000000003aULL, 0x0000000000000043ULL,
257 0x000000000000004bULL, 0x0000000000000053ULL,
258 0x000000000000005cULL, 0x0000000000000064ULL,
259 0x000000000000006dULL, 0x0000000000000075ULL };
260 static constexpr uint64_t coset_generators_wasm_3[8] = { 0x000000dfffffff20ULL, 0x000000ffffffff00ULL,
261 0x0000011ffffffee0ULL, 0x0000013ffffffec0ULL,
262 0x0000015ffffffea0ULL, 0x0000017ffffffe80ULL,
263 0x0000019ffffffe60ULL, 0x000001bffffffe40ULL };
264
265 // For consistency with bb::fq, if we ever represent an element of bb::secp256r1::fq in the public inputs, we do so
266 // as a bigfield element, so with 4 public inputs
267 static constexpr size_t PUBLIC_INPUTS_SIZE = BIGFIELD_PUBLIC_INPUTS_SIZE;
268};
270
271struct G1Params {
272 static constexpr bool USE_ENDOMORPHISM = false;
273 static constexpr bool can_hash_to_curve = true;
274 static constexpr bool small_elements = true;
275 static constexpr bool has_a = true;
276
277 static constexpr fq b =
278 fq(0x3BCE3C3E27D2604B, 0x651D06B0CC53B0F6, 0xB3EBBD55769886BC, 0x5AC635D8AA3A93E7).to_montgomery_form();
279 static constexpr fq a =
280 fq(0xFFFFFFFFFFFFFFFC, 0x00000000FFFFFFFF, 0x0000000000000000, 0xFFFFFFFF00000001).to_montgomery_form();
281
282 static constexpr fq one_x =
283 fq(0xF4A13945D898C296, 0x77037D812DEB33A0, 0xF8BCE6E563A440F2, 0x6B17D1F2E12C4247).to_montgomery_form();
284 static constexpr fq one_y =
285 fq(0xCBB6406837BF51F5, 0x2BCE33576B315ECE, 0x8EE7EB4A7C0F9E16, 0x4FE342E2FE1A7F9B).to_montgomery_form();
286};
288} // namespace bb::secp256r1
289
290namespace bb::curve {
299} // namespace bb::curve
300
301// NOLINTEND(cppcoreguidelines-avoid-c-arrays)
typename Group::affine_element AffineElement
typename Group::element Element
group class. Represents an elliptic curve group element. Group is parametrised by Fq and Fr
Definition group.hpp:36
group_elements::affine_element< Fq, Fr, Params > affine_element
Definition group.hpp:42
group_elements::element< Fq, Fr, Params > element
Definition group.hpp:41
field< FrParams > fr
group< fq, fr, G1Params > g1
field< FqParams > fq
General class for prime fields see Prime field documentation["field documentation"] for general imple...
BB_INLINE constexpr field to_montgomery_form() const noexcept
static constexpr uint64_t modulus_wasm_2
Definition secp256r1.hpp:90
static constexpr uint64_t coset_generators_wasm_3[8]
static constexpr uint64_t r_squared_1
Definition secp256r1.hpp:23
static constexpr uint64_t primitive_root_wasm_3
static constexpr size_t PUBLIC_INPUTS_SIZE
static constexpr uint64_t coset_generators_wasm_2[8]
static constexpr uint64_t cube_root_3
Definition secp256r1.hpp:78
static constexpr uint64_t primitive_root_0
Definition secp256r1.hpp:81
static constexpr uint64_t r_squared_0
Definition secp256r1.hpp:22
static constexpr uint64_t cube_root_wasm_1
static constexpr uint64_t r_inv_3
Definition secp256r1.hpp:40
static constexpr uint64_t r_inv_0
Definition secp256r1.hpp:37
static constexpr uint64_t primitive_root_3
Definition secp256r1.hpp:84
static constexpr uint64_t r_inv_wasm_8
Definition secp256r1.hpp:54
static constexpr uint64_t modulus_3
Definition secp256r1.hpp:19
static constexpr uint64_t r_squared_wasm_1
static constexpr uint64_t primitive_root_1
Definition secp256r1.hpp:82
static constexpr uint64_t primitive_root_wasm_2
static constexpr uint64_t coset_generators_wasm_0[8]
static constexpr uint64_t modulus_wasm_8
Definition secp256r1.hpp:96
static constexpr uint64_t r_squared_wasm_3
static constexpr uint64_t coset_generators_0[8]
Definition secp256r1.hpp:58
static constexpr uint64_t modulus_wasm_3
Definition secp256r1.hpp:91
static constexpr uint64_t coset_generators_wasm_1[8]
static constexpr uint64_t cube_root_1
Definition secp256r1.hpp:76
static constexpr uint64_t modulus_wasm_7
Definition secp256r1.hpp:95
static constexpr uint64_t cube_root_0
Definition secp256r1.hpp:75
static constexpr uint64_t modulus_wasm_5
Definition secp256r1.hpp:93
static constexpr uint64_t r_squared_wasm_2
static constexpr uint64_t cube_root_wasm_2
static constexpr uint64_t modulus_wasm_1
Definition secp256r1.hpp:89
static constexpr uint64_t primitive_root_wasm_1
static constexpr uint64_t primitive_root_2
Definition secp256r1.hpp:83
static constexpr uint64_t cube_root_wasm_3
static constexpr uint64_t r_inv
Definition secp256r1.hpp:31
static constexpr uint64_t r_inv_wasm_7
Definition secp256r1.hpp:53
static constexpr uint64_t r_squared_3
Definition secp256r1.hpp:25
static constexpr uint64_t modulus_2
Definition secp256r1.hpp:18
static constexpr uint64_t r_inv_wasm_4
Definition secp256r1.hpp:50
static constexpr uint64_t modulus_0
Definition secp256r1.hpp:16
static constexpr uint64_t cube_root_2
Definition secp256r1.hpp:77
static constexpr uint64_t r_inv_wasm_5
Definition secp256r1.hpp:51
static constexpr uint64_t coset_generators_1[8]
Definition secp256r1.hpp:61
static constexpr uint64_t coset_generators_3[8]
Definition secp256r1.hpp:69
static constexpr uint64_t cube_root_wasm_0
static constexpr uint64_t r_squared_2
Definition secp256r1.hpp:24
static constexpr uint64_t r_inv_wasm_6
Definition secp256r1.hpp:52
static constexpr uint64_t r_inv_wasm_2
Definition secp256r1.hpp:48
static constexpr uint64_t r_squared_wasm_0
static constexpr uint64_t r_inv_2
Definition secp256r1.hpp:39
static constexpr uint64_t r_inv_1
Definition secp256r1.hpp:38
static constexpr uint64_t r_inv_wasm_0
Definition secp256r1.hpp:46
static constexpr uint64_t primitive_root_wasm_0
static constexpr uint64_t modulus_wasm_4
Definition secp256r1.hpp:92
static constexpr uint64_t coset_generators_2[8]
Definition secp256r1.hpp:65
static constexpr uint64_t modulus_wasm_6
Definition secp256r1.hpp:94
static constexpr uint64_t modulus_1
Definition secp256r1.hpp:17
static constexpr uint64_t r_inv_wasm_3
Definition secp256r1.hpp:49
static constexpr uint64_t r_inv_wasm_1
Definition secp256r1.hpp:47
static constexpr uint64_t modulus_wasm_0
Definition secp256r1.hpp:88
static constexpr uint64_t r_squared_wasm_0
static constexpr uint64_t coset_generators_3[8]
static constexpr uint64_t r_inv_1
static constexpr uint64_t r_squared_1
static constexpr uint64_t r_inv
static constexpr uint64_t primitive_root_wasm_0
static constexpr uint64_t modulus_wasm_6
static constexpr uint64_t coset_generators_wasm_2[8]
static constexpr uint64_t modulus_2
static constexpr uint64_t coset_generators_2[8]
static constexpr uint64_t primitive_root_wasm_3
static constexpr uint64_t r_inv_wasm_5
static constexpr uint64_t primitive_root_0
static constexpr uint64_t modulus_wasm_7
static constexpr uint64_t r_inv_wasm_0
static constexpr uint64_t r_squared_0
static constexpr uint64_t modulus_wasm_0
static constexpr uint64_t modulus_wasm_8
static constexpr uint64_t r_inv_2
static constexpr uint64_t cube_root_0
static constexpr uint64_t primitive_root_3
static constexpr uint64_t r_inv_wasm_3
static constexpr uint64_t r_inv_wasm_8
static constexpr uint64_t modulus_wasm_1
static constexpr uint64_t primitive_root_1
static constexpr uint64_t r_inv_wasm_7
static constexpr uint64_t modulus_wasm_5
static constexpr uint64_t primitive_root_wasm_1
static constexpr uint64_t primitive_root_wasm_2
static constexpr uint64_t cube_root_wasm_1
static constexpr uint64_t modulus_wasm_2
static constexpr uint64_t cube_root_wasm_3
static constexpr uint64_t coset_generators_wasm_0[8]
static constexpr uint64_t r_inv_wasm_4
static constexpr uint64_t modulus_1
static constexpr uint64_t r_inv_wasm_2
static constexpr size_t PUBLIC_INPUTS_SIZE
static constexpr uint64_t r_inv_3
static constexpr uint64_t modulus_3
static constexpr uint64_t modulus_wasm_3
static constexpr uint64_t r_squared_wasm_2
static constexpr uint64_t r_inv_wasm_1
static constexpr uint64_t coset_generators_0[8]
static constexpr uint64_t r_inv_0
static constexpr uint64_t cube_root_2
static constexpr uint64_t r_squared_2
static constexpr uint64_t modulus_wasm_4
static constexpr uint64_t coset_generators_wasm_1[8]
static constexpr uint64_t r_squared_3
static constexpr uint64_t r_inv_wasm_6
static constexpr uint64_t cube_root_wasm_0
static constexpr uint64_t r_squared_wasm_3
static constexpr uint64_t coset_generators_wasm_3[8]
static constexpr uint64_t cube_root_1
static constexpr uint64_t coset_generators_1[8]
static constexpr uint64_t cube_root_wasm_2
static constexpr uint64_t modulus_0
static constexpr uint64_t r_squared_wasm_1
static constexpr uint64_t primitive_root_2
static constexpr uint64_t cube_root_3
static constexpr fq a
static constexpr bool can_hash_to_curve
static constexpr bool has_a
static constexpr fq one_y
static constexpr bool USE_ENDOMORPHISM
static constexpr fq b
static constexpr bool small_elements
static constexpr fq one_x