Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bbapi_ecc.cpp
Go to the documentation of this file.
1
6
7namespace bb::bbapi {
8
10{
11 if (!point.on_curve()) {
12 BBAPI_ERROR(request, "Input point must be on the curve");
13 }
14 return { point * scalar };
15}
16
18{
19 if (!point_a.on_curve()) {
20 BBAPI_ERROR(request, "Input point_a must be on the curve");
21 }
22 if (!point_b.on_curve()) {
23 BBAPI_ERROR(request, "Input point_b must be on the curve");
24 }
25 return { point_a + point_b };
26}
27
29{
30 for (const auto& p : points) {
31 if (!p.on_curve()) {
32 BBAPI_ERROR(request, "Input point must be on the curve");
33 }
34 }
35 auto output = grumpkin::g1::element::batch_mul_with_endomorphism(points, scalar);
36 return { std::move(output) };
37}
38
43
45{
46 auto bigint_input = from_buffer<uint512_t>(input.data());
47 uint512_t barretenberg_modulus(bb::fr::modulus);
48 uint512_t target_output = bigint_input % barretenberg_modulus;
49 return { bb::fr(target_output.lo) };
50}
51
53{
54 if (!point.on_curve()) {
55 BBAPI_ERROR(request, "Input point must be on the curve");
56 }
57 return { point * scalar };
58}
59
64
66{
67 auto bigint_input = from_buffer<uint512_t>(input.data());
68 uint512_t secp256k1_modulus(secp256k1::fr::modulus);
69 uint512_t target_output = bigint_input % secp256k1_modulus;
70 return { secp256k1::fr(target_output.lo) };
71}
72
74{
75 auto [is_sqr, root] = input.sqrt();
76 return { is_sqr, root };
77}
78
80{
81 auto [is_sqr, root] = input.sqrt();
82 return { is_sqr, root };
83}
84
86{
87 if (!point.on_curve()) {
88 BBAPI_ERROR(request, "Input point must be on the curve");
89 }
90 auto result = point * scalar;
91 if (!result.on_curve()) {
92 BBAPI_ERROR(request, "Output point must be on the curve");
93 }
94 return { result };
95}
96
98{
99 if (!point.on_curve()) {
100 BBAPI_ERROR(request, "Input point must be on the curve");
101 }
102 auto result = point * scalar;
103 if (!result.on_curve()) {
104 BBAPI_ERROR(request, "Output point must be on the curve");
105 }
106 return { result };
107}
108
110{
111 return { point.on_curve() };
112}
113
115{
116 // Convert 32-byte array to uint256_t
117 uint256_t compressed_value = from_buffer<uint256_t>(compressed.data());
118 // Decompress the point
119 auto point = bb::g1::affine_element::from_compressed(compressed_value);
120 // Verify the decompressed point is on the curve
121 if (!point.on_curve()) {
122 BBAPI_ERROR(request, "Decompressed point is not on the curve");
123 }
124 return { point };
125}
126
127} // namespace bb::bbapi
Elliptic curve operations command definitions for the Barretenberg RPC API.
#define BBAPI_ERROR(request, msg)
Macro to set error in BBApiRequest and return default response.
#define BB_UNUSED
field< FrParams > fr
field< Bn254FrParams > fr
Definition fr.hpp:174
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
Response execute(BBApiRequest &request) &&
Definition bbapi_ecc.cpp:79
Response execute(BBApiRequest &request) &&
Definition bbapi_ecc.cpp:73
Response execute(BBApiRequest &request) &&
Response execute(BBApiRequest &request) &&
Response execute(BBApiRequest &request) &&
Definition bbapi_ecc.cpp:85
Response execute(BBApiRequest &request) &&
Definition bbapi_ecc.cpp:97
Response execute(BBApiRequest &request) &&
Definition bbapi_ecc.cpp:17
Response execute(BBApiRequest &request) &&
Definition bbapi_ecc.cpp:28
Response execute(BBApiRequest &request) &&
Definition bbapi_ecc.cpp:39
Response execute(BBApiRequest &request) &&
Definition bbapi_ecc.cpp:9
Response execute(BBApiRequest &request) &&
Definition bbapi_ecc.cpp:44
Response execute(BBApiRequest &request) &&
Definition bbapi_ecc.cpp:60
Response execute(BBApiRequest &request) &&
Definition bbapi_ecc.cpp:52
Response execute(BBApiRequest &request) &&
Definition bbapi_ecc.cpp:65
static constexpr uint256_t modulus
static field random_element(numeric::RNG *engine=nullptr) noexcept