barretenberg
Loading...
Searching...
No Matches
secp256r1.hpp
1#pragma once
2
3#include "../../fields/field.hpp"
4#include "../../groups/group.hpp"
5
6namespace secp256r1 {
7// NOLINTBEGIN(cppcoreguidelines-avoid-c-arrays)
9 static constexpr uint64_t modulus_0 = 0xFFFFFFFFFFFFFFFFULL;
10 static constexpr uint64_t modulus_1 = 0x00000000FFFFFFFFULL;
11 static constexpr uint64_t modulus_2 = 0X0000000000000000ULL;
12 static constexpr uint64_t modulus_3 = 0xFFFFFFFF00000001ULL;
13
14 static constexpr uint64_t r_squared_0 = 3ULL;
15 static constexpr uint64_t r_squared_1 = 18446744056529682431ULL;
16 static constexpr uint64_t r_squared_2 = 18446744073709551614ULL;
17 static constexpr uint64_t r_squared_3 = 21474836477ULL;
18
19 static constexpr uint64_t r_inv = 1;
20
21 static constexpr uint64_t coset_generators_0[8]{
22 0x3ULL, 0x4ULL, 0x5ULL, 0x6ULL, 0x7ULL, 0x8ULL, 0x9ULL, 0xaULL,
23 };
24 static constexpr uint64_t coset_generators_1[8]{
25 0xfffffffd00000000ULL, 0xfffffffc00000000ULL, 0xfffffffb00000000ULL, 0xfffffffa00000000ULL,
26 0xfffffff900000000ULL, 0xfffffff800000000ULL, 0xfffffff700000000ULL, 0xfffffff600000000ULL,
27 };
28 static constexpr uint64_t coset_generators_2[8]{
29 0xffffffffffffffffULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL,
30 0xffffffffffffffffULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL,
31 };
32 static constexpr uint64_t coset_generators_3[8]{
33 0x2fffffffcULL, 0x3fffffffbULL, 0x4fffffffaULL, 0x5fffffff9ULL,
34 0x6fffffff8ULL, 0x7fffffff7ULL, 0x8fffffff6ULL, 0x9fffffff5ULL,
35 };
36 static constexpr uint64_t cube_root_0 = 0UL;
37 static constexpr uint64_t cube_root_1 = 0UL;
38 static constexpr uint64_t cube_root_2 = 0UL;
39 static constexpr uint64_t cube_root_3 = 0UL;
40
41 static constexpr uint64_t primitive_root_0 = 0UL;
42 static constexpr uint64_t primitive_root_1 = 0UL;
43 static constexpr uint64_t primitive_root_2 = 0UL;
44 static constexpr uint64_t primitive_root_3 = 0UL;
45};
46
48 static constexpr uint64_t modulus_0 = 0xF3B9CAC2FC632551ULL;
49 static constexpr uint64_t modulus_1 = 0xBCE6FAADA7179E84ULL;
50 static constexpr uint64_t modulus_2 = 0xFFFFFFFFFFFFFFFFULL;
51 static constexpr uint64_t modulus_3 = 0xFFFFFFFF00000000ULL;
52
53 static constexpr uint64_t r_squared_0 = 9449762124159643298ULL;
54 static constexpr uint64_t r_squared_1 = 5087230966250696614ULL;
55 static constexpr uint64_t r_squared_2 = 2901921493521525849ULL;
56 static constexpr uint64_t r_squared_3 = 7413256579398063648ULL;
57
58 static constexpr uint64_t r_inv = 14758798090332847183ULL;
59
60 static constexpr uint64_t coset_generators_0[8]{
61 0x55eb74ab1949fac9ULL, 0x6231a9e81ce6d578ULL, 0x6e77df252083b027ULL, 0x7abe146224208ad6ULL,
62 0x8704499f27bd6585ULL, 0x934a7edc2b5a4034ULL, 0x9f90b4192ef71ae3ULL, 0xabd6e9563293f592ULL,
63 };
64 static constexpr uint64_t coset_generators_1[8]{
65 0xd5af25406e5aaa5dULL, 0x18c82a92c7430bd8ULL, 0x5be12fe5202b6d53ULL, 0x9efa35377913ceceULL,
66 0xe2133a89d1fc3049ULL, 0x252c3fdc2ae491c4ULL, 0x6845452e83ccf33fULL, 0xab5e4a80dcb554baULL,
67 };
68 static constexpr uint64_t coset_generators_2[8]{
69 0x1ULL, 0x2ULL, 0x2ULL, 0x2ULL, 0x2ULL, 0x3ULL, 0x3ULL, 0x3ULL,
70 };
71 static constexpr uint64_t coset_generators_3[8]{
72 0x6fffffff9ULL, 0x7fffffff8ULL, 0x8fffffff7ULL, 0x9fffffff6ULL,
73 0xafffffff5ULL, 0xbfffffff4ULL, 0xcfffffff3ULL, 0xdfffffff2ULL,
74 };
75
76 static constexpr uint64_t cube_root_0 = 0UL;
77 static constexpr uint64_t cube_root_1 = 0UL;
78 static constexpr uint64_t cube_root_2 = 0UL;
79 static constexpr uint64_t cube_root_3 = 0UL;
80
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
89
91 static constexpr bool USE_ENDOMORPHISM = false;
92 static constexpr bool can_hash_to_curve = true;
93 static constexpr bool small_elements = true;
94 static constexpr bool has_a = true;
95
96 static constexpr fq b =
97 fq(0x3BCE3C3E27D2604B, 0x651D06B0CC53B0F6, 0xB3EBBD55769886BC, 0x5AC635D8AA3A93E7).to_montgomery_form();
98 static constexpr fq a =
99 fq(0xFFFFFFFFFFFFFFFC, 0x00000000FFFFFFFF, 0x0000000000000000, 0xFFFFFFFF00000001).to_montgomery_form();
100
101 static constexpr fq one_x =
102 fq(0xF4A13945D898C296, 0x77037D812DEB33A0, 0xF8BCE6E563A440F2, 0x6B17D1F2E12C4247).to_montgomery_form();
103 static constexpr fq one_y =
104 fq(0xCBB6406837BF51F5, 0x2BCE33576B315ECE, 0x8EE7EB4A7C0F9E16, 0x4FE342E2FE1A7F9B).to_montgomery_form();
105};
106
107using g1 = barretenberg::
108 group<barretenberg::field<Secp256r1FqParams>, barretenberg::field<Secp256r1FrParams>, Secp256r1G1Params>;
109} // namespace secp256r1
110
111namespace curve {
113 public:
115 using BaseField = secp256r1::fq;
116 using Group = secp256r1::g1;
117 using Element = typename Group::element;
118 using AffineElement = typename Group::affine_element;
119};
120} // namespace curve
121
122// NOLINTEND(cppcoreguidelines-avoid-c-arrays)
Definition: affine_element.hpp:11
element class. Implements ecc group arithmetic using Jacobian coordinates See https://hyperelliptic....
Definition: element.hpp:27
group class. Represents an elliptic curve group element. Group is parametrised by coordinate_field an...
Definition: group.hpp:29
Definition: secp256r1.hpp:112
Definition: field_declarations.hpp:24
Definition: secp256r1.hpp:8
Definition: secp256r1.hpp:47
Definition: secp256r1.hpp:90