Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
c_bind.cpp
Go to the documentation of this file.
1#include "ecdsa.hpp"
4
5using namespace bb;
6using namespace bb::crypto;
7
8template <typename fr, typename g1> void ecdsa__compute_public_key(uint8_t const* private_key, uint8_t* public_key_buf)
9{
10 auto priv_key = from_buffer<fr>(private_key);
11 typename g1::affine_element pub_key = g1::one * priv_key;
12 write(public_key_buf, pub_key);
13}
14
15WASM_EXPORT void ecdsa__compute_public_key(uint8_t const* private_key, uint8_t* public_key_buf)
16{
17 ecdsa__compute_public_key<secp256k1::fr, secp256k1::g1>(private_key, public_key_buf);
18}
19
20WASM_EXPORT void ecdsa_r_compute_public_key(uint8_t const* private_key, uint8_t* public_key_buf)
21{
22 ecdsa__compute_public_key<secp256r1::fr, secp256r1::g1>(private_key, public_key_buf);
23}
24
25template <typename fr, typename fq, typename g1>
26void ecdsa__construct_signature(uint8_t const* message,
27 size_t msg_len,
28 uint8_t const* private_key,
29 uint8_t* output_sig_r,
30 uint8_t* output_sig_s,
31 uint8_t* output_sig_v)
32{
33 using serialize::write;
34 auto priv_key = from_buffer<fr>(private_key);
35 auto pub_key = g1::one * priv_key;
36 ecdsa_key_pair<fr, g1> key_pair = { priv_key, pub_key };
37
38 auto sig = ecdsa_construct_signature<Sha256Hasher, fq, fr, g1>(std::string((char*)message, msg_len), key_pair);
39 write(output_sig_r, sig.r);
40 write(output_sig_s, sig.s);
41 write(output_sig_v, sig.v);
42}
43
44WASM_EXPORT void ecdsa__construct_signature(uint8_t const* message,
45 size_t msg_len,
46 uint8_t const* private_key,
47 uint8_t* output_sig_r,
48 uint8_t* output_sig_s,
49 uint8_t* output_sig_v)
50{
51 ecdsa__construct_signature<secp256k1::fr, secp256k1::fq, secp256k1::g1>(
52 message, msg_len, private_key, output_sig_r, output_sig_s, output_sig_v);
53}
54
55WASM_EXPORT void ecdsa_r_construct_signature(uint8_t const* message,
56 size_t msg_len,
57 uint8_t const* private_key,
58 uint8_t* output_sig_r,
59 uint8_t* output_sig_s,
60 uint8_t* output_sig_v)
61{
62 ecdsa__construct_signature<secp256r1::fr, secp256r1::fq, secp256r1::g1>(
63 message, msg_len, private_key, output_sig_r, output_sig_s, output_sig_v);
64}
65
66template <typename fr, typename fq, typename g1>
67void ecdsa__construct_signature_(uint8_t const* message_buf,
68 uint8_t const* private_key,
69 uint8_t* output_sig_r,
70 uint8_t* output_sig_s,
71 uint8_t* output_sig_v)
72{
73 using serialize::write;
74 auto priv_key = from_buffer<fr>(private_key);
75 auto pub_key = g1::one * priv_key;
76 ecdsa_key_pair<fr, g1> key_pair = { priv_key, pub_key };
77
78 auto message = from_buffer<std::string>(message_buf);
79
80 auto sig = ecdsa_construct_signature<Sha256Hasher, fq, fr, g1>(message, key_pair);
81 write(output_sig_r, sig.r);
82 write(output_sig_s, sig.s);
83 write(output_sig_v, sig.v);
84}
85
86WASM_EXPORT void ecdsa__construct_signature_(uint8_t const* message_buf,
87 uint8_t const* private_key,
88 uint8_t* output_sig_r,
89 uint8_t* output_sig_s,
90 uint8_t* output_sig_v)
91{
92 ecdsa__construct_signature_<secp256k1::fr, secp256k1::fq, secp256k1::g1>(
93 message_buf, private_key, output_sig_r, output_sig_s, output_sig_v);
94}
95
96WASM_EXPORT void ecdsa_r_construct_signature_(uint8_t const* message_buf,
97 uint8_t const* private_key,
98 uint8_t* output_sig_r,
99 uint8_t* output_sig_s,
100 uint8_t* output_sig_v)
101{
102 ecdsa__construct_signature_<secp256r1::fr, secp256r1::fq, secp256r1::g1>(
103 message_buf, private_key, output_sig_r, output_sig_s, output_sig_v);
104}
105
106template <typename fr, typename fq, typename g1>
108 size_t msg_len,
109 uint8_t const* sig_r,
110 uint8_t const* sig_s,
111 uint8_t* sig_v,
112 uint8_t* output_pub_key)
113{
114 std::array<uint8_t, 32> r, s;
115 std::copy(sig_r, sig_r + 32, r.begin());
116 std::copy(sig_s, sig_s + 32, s.begin());
117 const uint8_t v = *sig_v;
118
119 ecdsa_signature sig = { r, s, v };
120 auto recovered_pub_key =
121 ecdsa_recover_public_key<Sha256Hasher, fq, fr, g1>(std::string((char*)message, msg_len), sig);
122 write(output_pub_key, recovered_pub_key);
123}
124
126 size_t msg_len,
127 uint8_t const* sig_r,
128 uint8_t const* sig_s,
129 uint8_t* sig_v,
130 uint8_t* output_pub_key)
131{
132 ecdsa__recover_public_key_from_signature<secp256k1::fr, secp256k1::fq, secp256k1::g1>(
133 message, msg_len, sig_r, sig_s, sig_v, output_pub_key);
134}
135
137 size_t msg_len,
138 uint8_t const* sig_r,
139 uint8_t const* sig_s,
140 uint8_t* sig_v,
141 uint8_t* output_pub_key)
142{
143 ecdsa__recover_public_key_from_signature<secp256r1::fr, secp256r1::fq, secp256r1::g1>(
144 message, msg_len, sig_r, sig_s, sig_v, output_pub_key);
145}
146
147template <typename fr, typename fq, typename g1>
149 uint8_t const* message_buf, uint8_t const* sig_r, uint8_t const* sig_s, uint8_t* sig_v, uint8_t* output_pub_key)
150{
151 std::array<uint8_t, 32> r, s;
152 std::copy(sig_r, sig_r + 32, r.begin());
153 std::copy(sig_s, sig_s + 32, s.begin());
154 const uint8_t v = *sig_v;
155
156 auto message = from_buffer<std::string>(message_buf);
157 ecdsa_signature sig = { r, s, v };
158 auto recovered_pub_key = ecdsa_recover_public_key<Sha256Hasher, fq, fr, g1>(message, sig);
159 write(output_pub_key, recovered_pub_key);
160}
161
163 uint8_t const* message_buf, uint8_t const* sig_r, uint8_t const* sig_s, uint8_t* sig_v, uint8_t* output_pub_key)
164{
165 ecdsa__recover_public_key_from_signature_<secp256k1::fr, secp256k1::fq, secp256k1::g1>(
166 message_buf, sig_r, sig_s, sig_v, output_pub_key);
167}
168
170 uint8_t const* message_buf, uint8_t const* sig_r, uint8_t const* sig_s, uint8_t* sig_v, uint8_t* output_pub_key)
171{
172 ecdsa__recover_public_key_from_signature_<secp256r1::fr, secp256r1::fq, secp256r1::g1>(
173 message_buf, sig_r, sig_s, sig_v, output_pub_key);
174}
175
176template <typename fr, typename fq, typename g1>
177bool ecdsa__verify_signature(uint8_t const* message,
178 size_t msg_len,
179 uint8_t const* pub_key,
180 uint8_t const* sig_r,
181 uint8_t const* sig_s,
182 uint8_t const* sig_v)
183{
184 auto pubk = from_buffer<typename g1::affine_element>(pub_key);
185 std::array<uint8_t, 32> r, s;
186 std::copy(sig_r, sig_r + 32, r.begin());
187 std::copy(sig_s, sig_s + 32, s.begin());
188 const uint8_t v = *sig_v;
189
190 ecdsa_signature sig = { r, s, v };
191 return ecdsa_verify_signature<Sha256Hasher, fq, fr, g1>(std::string((char*)message, msg_len), pubk, sig);
192}
193
194WASM_EXPORT bool ecdsa__verify_signature(uint8_t const* message,
195 size_t msg_len,
196 uint8_t const* pub_key,
197 uint8_t const* sig_r,
198 uint8_t const* sig_s,
199 uint8_t const* sig_v)
200{
201 return ecdsa__verify_signature<secp256k1::fr, secp256k1::fq, secp256k1::g1>(
202 message, msg_len, pub_key, sig_r, sig_s, sig_v);
203}
204
205WASM_EXPORT bool ecdsa_r_verify_signature(uint8_t const* message,
206 size_t msg_len,
207 uint8_t const* pub_key,
208 uint8_t const* sig_r,
209 uint8_t const* sig_s,
210 uint8_t const* sig_v)
211{
212 return ecdsa__verify_signature<secp256r1::fr, secp256r1::fq, secp256r1::g1>(
213 message, msg_len, pub_key, sig_r, sig_s, sig_v);
214}
215
216template <typename fr, typename fq, typename g1>
217void ecdsa__verify_signature_(uint8_t const* message_buf,
218 uint8_t const* pub_key,
219 uint8_t const* sig_r,
220 uint8_t const* sig_s,
221 uint8_t const* sig_v,
222 bool* result)
223{
224 auto pubk = from_buffer<typename g1::affine_element>(pub_key);
225 std::array<uint8_t, 32> r, s;
226 std::copy(sig_r, sig_r + 32, r.begin());
227 std::copy(sig_s, sig_s + 32, s.begin());
228 const uint8_t v = *sig_v;
229
230 auto message = from_buffer<std::string>(message_buf);
231 ecdsa_signature sig = { r, s, v };
232 *result = ecdsa_verify_signature<Sha256Hasher, fq, fr, g1>(message, pubk, sig);
233}
234
235WASM_EXPORT void ecdsa__verify_signature_(uint8_t const* message,
236 uint8_t const* pub_key,
237 uint8_t const* sig_r,
238 uint8_t const* sig_s,
239 uint8_t const* sig_v,
240 bool* result)
241{
242 ecdsa__verify_signature_<secp256k1::fr, secp256k1::fq, secp256k1::g1>(
243 message, pub_key, sig_r, sig_s, sig_v, result);
244}
245
246WASM_EXPORT void ecdsa_r_verify_signature_(uint8_t const* message,
247 uint8_t const* pub_key,
248 uint8_t const* sig_r,
249 uint8_t const* sig_s,
250 uint8_t const* sig_v,
251 bool* result)
252{
253 ecdsa__verify_signature_<secp256r1::fr, secp256r1::fq, secp256r1::g1>(
254 message, pub_key, sig_r, sig_s, sig_v, result);
255}
static constexpr element one
Definition group.hpp:46
WASM_EXPORT void ecdsa_r_recover_public_key_from_signature_(uint8_t const *message_buf, uint8_t const *sig_r, uint8_t const *sig_s, uint8_t *sig_v, uint8_t *output_pub_key)
Definition c_bind.cpp:169
bool ecdsa__verify_signature(uint8_t const *message, size_t msg_len, uint8_t const *pub_key, uint8_t const *sig_r, uint8_t const *sig_s, uint8_t const *sig_v)
Definition c_bind.cpp:177
WASM_EXPORT bool ecdsa_r_verify_signature(uint8_t const *message, size_t msg_len, uint8_t const *pub_key, uint8_t const *sig_r, uint8_t const *sig_s, uint8_t const *sig_v)
Definition c_bind.cpp:205
WASM_EXPORT void ecdsa_r_compute_public_key(uint8_t const *private_key, uint8_t *public_key_buf)
Definition c_bind.cpp:20
WASM_EXPORT void ecdsa_r_construct_signature_(uint8_t const *message_buf, uint8_t const *private_key, uint8_t *output_sig_r, uint8_t *output_sig_s, uint8_t *output_sig_v)
Definition c_bind.cpp:96
void ecdsa__construct_signature(uint8_t const *message, size_t msg_len, uint8_t const *private_key, uint8_t *output_sig_r, uint8_t *output_sig_s, uint8_t *output_sig_v)
Definition c_bind.cpp:26
void ecdsa__recover_public_key_from_signature(uint8_t const *message, size_t msg_len, uint8_t const *sig_r, uint8_t const *sig_s, uint8_t *sig_v, uint8_t *output_pub_key)
Definition c_bind.cpp:107
WASM_EXPORT void ecdsa_r_construct_signature(uint8_t const *message, size_t msg_len, uint8_t const *private_key, uint8_t *output_sig_r, uint8_t *output_sig_s, uint8_t *output_sig_v)
Definition c_bind.cpp:55
void ecdsa__recover_public_key_from_signature_(uint8_t const *message_buf, uint8_t const *sig_r, uint8_t const *sig_s, uint8_t *sig_v, uint8_t *output_pub_key)
Definition c_bind.cpp:148
void ecdsa__compute_public_key(uint8_t const *private_key, uint8_t *public_key_buf)
Definition c_bind.cpp:8
WASM_EXPORT void ecdsa_r_recover_public_key_from_signature(uint8_t const *message, size_t msg_len, uint8_t const *sig_r, uint8_t const *sig_s, uint8_t *sig_v, uint8_t *output_pub_key)
Definition c_bind.cpp:136
WASM_EXPORT void ecdsa_r_verify_signature_(uint8_t const *message, uint8_t const *pub_key, uint8_t const *sig_r, uint8_t const *sig_s, uint8_t const *sig_v, bool *result)
Definition c_bind.cpp:246
void ecdsa__construct_signature_(uint8_t const *message_buf, uint8_t const *private_key, uint8_t *output_sig_r, uint8_t *output_sig_s, uint8_t *output_sig_v)
Definition c_bind.cpp:67
void ecdsa__verify_signature_(uint8_t const *message_buf, uint8_t const *pub_key, uint8_t const *sig_r, uint8_t const *sig_s, uint8_t const *sig_v, bool *result)
Definition c_bind.cpp:217
void write(B &buf, SchnorrProofOfPossession< G1, Hash > const &proof_of_possession)
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
void write(auto &buf, const msgpack_concepts::HasMsgPack auto &obj)
Automatically derived write for any object that defines .msgpack() (implicitly defined by MSGPACK_FIE...
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
#define WASM_EXPORT