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// === 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#include "c_bind.hpp"
8#include "../acir_format/acir_to_constraint_buf.hpp"
19
22#include "honk_contract.hpp"
23#include <cstdint>
24#include <memory>
25
27 uint8_t const* acir_vec, bool const* recursive, bool const* honk_recursion, uint32_t* total, uint32_t* subgroup)
28{
29 const acir_format::ProgramMetadata metadata{ .recursive = *recursive,
30 .honk_recursion = *honk_recursion,
31 .size_hint = 1 << 19 };
33 from_buffer<std::vector<uint8_t>>(acir_vec)) };
34 auto builder = acir_format::create_circuit(program, metadata);
35 builder.finalize_circuit(/*ensure_nonzero=*/true);
36 *total = htonl((uint32_t)builder.get_finalized_total_circuit_size());
37 *subgroup = htonl((uint32_t)builder.get_circuit_subgroup_size(builder.get_finalized_total_circuit_size()));
38}
39
40WASM_EXPORT void acir_prove_and_verify_ultra_honk(uint8_t const* acir_vec, uint8_t const* witness_vec, bool* result)
41{
42 const acir_format::ProgramMetadata metadata{ .honk_recursion = 1 };
44 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
45 acir_format::witness_buf_to_witness_data(from_buffer<std::vector<uint8_t>>(witness_vec))
46 };
47
48 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
49
51 auto verification_key = std::make_shared<UltraFlavor::VerificationKey>(proving_key->get_precomputed());
52 UltraProver prover{ proving_key, verification_key };
53 auto proof = prover.construct_proof();
54
55 UltraVerifier verifier{ verification_key };
56
57 *result = verifier.template verify_proof<DefaultIO>(proof).result;
58 info("verified: ", *result);
59}
60
61WASM_EXPORT void acir_prove_and_verify_mega_honk(uint8_t const* acir_vec, uint8_t const* witness_vec, bool* result)
62{
63 const acir_format::ProgramMetadata metadata{ .honk_recursion = 0 };
64
66 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
67 acir_format::witness_buf_to_witness_data(from_buffer<std::vector<uint8_t>>(witness_vec))
68 };
69
70 auto builder = acir_format::create_circuit<MegaCircuitBuilder>(program, metadata);
71
73 auto verification_key = std::make_shared<MegaFlavor::VerificationKey>(proving_key->get_precomputed());
74 MegaProver prover{ proving_key, verification_key };
75 auto proof = prover.construct_proof();
76
77 MegaVerifier verifier{ verification_key };
78
79 *result = verifier.template verify_proof<DefaultIO>(proof).result;
80}
81
82WASM_EXPORT void acir_prove_aztec_client(uint8_t const* ivc_inputs_buf, uint8_t** out_proof, uint8_t** out_vk)
83{
84 auto ivc_inputs_vec = from_buffer<std::vector<uint8_t>>(ivc_inputs_buf);
85 // Accumulate the entire program stack into the IVC
86 auto start = std::chrono::steady_clock::now();
90 auto end = std::chrono::steady_clock::now();
91 auto diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
92 vinfo("time to construct and accumulate all circuits: ", diff.count());
93
94 vinfo("calling ivc.prove ...");
95 ClientIVC::Proof proof = ivc->prove();
96 end = std::chrono::steady_clock::now();
97
98 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
99 vinfo("time to construct, accumulate, prove all circuits: ", diff.count());
100
101 start = std::chrono::steady_clock::now();
102 *out_proof = proof.to_msgpack_heap_buffer();
103 end = std::chrono::steady_clock::now();
104 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
105 vinfo("time to serialize proof: ", diff.count());
106
107 start = std::chrono::steady_clock::now();
108 *out_vk = to_heap_buffer(to_buffer(ivc->get_vk()));
109 end = std::chrono::steady_clock::now();
110 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
111 vinfo("time to serialize vk: ", diff.count());
112}
113
114WASM_EXPORT void acir_verify_aztec_client(uint8_t const* proof_buf, uint8_t const* vk_buf, bool* result)
115{
116 const auto proof = ClientIVC::Proof::from_msgpack_buffer(proof_buf);
117 const auto vk = from_buffer<ClientIVC::VerificationKey>(from_buffer<std::vector<uint8_t>>(vk_buf));
118
119 *result = ClientIVC::verify(proof, vk);
120}
121
122WASM_EXPORT void acir_prove_ultra_zk_honk(uint8_t const* acir_vec,
123 uint8_t const* witness_vec,
124 uint8_t const* vk_buf,
125 uint8_t** out)
126{
127 // Lambda function to ensure things get freed before proving.
128 UltraZKProver prover = [&] {
129 const acir_format::ProgramMetadata metadata{ .honk_recursion = 1 };
131 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
132 acir_format::witness_buf_to_witness_data(from_buffer<std::vector<uint8_t>>(witness_vec))
133 };
134 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
136 auto verification_key =
137 std::make_shared<UltraZKFlavor::VerificationKey>(from_buffer<UltraZKFlavor::VerificationKey>(vk_buf));
138
139 return UltraZKProver(proving_key, verification_key);
140 }();
141
142 auto proof = prover.construct_proof();
143 *out = to_heap_buffer(to_buffer(proof));
144}
145
146WASM_EXPORT void acir_prove_ultra_keccak_honk(uint8_t const* acir_vec,
147 uint8_t const* witness_vec,
148 uint8_t const* vk_buf,
149 uint8_t** out)
150{
151 // Lambda function to ensure things get freed before proving.
152 UltraKeccakProver prover = [&] {
153 const acir_format::ProgramMetadata metadata{ .honk_recursion = 1 };
155 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
156 acir_format::witness_buf_to_witness_data(from_buffer<std::vector<uint8_t>>(witness_vec))
157 };
158 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
159
162 from_buffer<UltraKeccakFlavor::VerificationKey>(vk_buf));
163 return UltraKeccakProver(proving_key, verification_key);
164 }();
165 auto proof = prover.construct_proof();
166 *out = to_heap_buffer(to_buffer(proof));
167}
168
169WASM_EXPORT void acir_prove_ultra_keccak_zk_honk(uint8_t const* acir_vec,
170 uint8_t const* witness_vec,
171 uint8_t const* vk_buf,
172 uint8_t** out)
173{
174 // Lambda function to ensure things get freed before proving.
175 UltraKeccakZKProver prover = [&] {
176 const acir_format::ProgramMetadata metadata{ .honk_recursion = 1 };
178 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
179 acir_format::witness_buf_to_witness_data(from_buffer<std::vector<uint8_t>>(witness_vec))
180 };
181 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
182
185 from_buffer<UltraKeccakZKFlavor::VerificationKey>(vk_buf));
186 return UltraKeccakZKProver(proving_key, verification_key);
187 }();
188 auto proof = prover.construct_proof();
189 *out = to_heap_buffer(to_buffer(proof));
190}
191
192WASM_EXPORT void acir_prove_ultra_starknet_honk([[maybe_unused]] uint8_t const* acir_vec,
193 [[maybe_unused]] uint8_t const* witness_vec,
194 [[maybe_unused]] uint8_t const* vk_buf,
195 [[maybe_unused]] uint8_t** out)
196{
197#ifdef STARKNET_GARAGA_FLAVORS
198 // Lambda function to ensure things get freed before proving.
199 UltraStarknetProver prover = [&] {
200 const acir_format::ProgramMetadata metadata{ .honk_recursion = 1 };
202 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
203 acir_format::witness_buf_to_witness_data(from_buffer<std::vector<uint8_t>>(witness_vec))
204 };
205 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
206
207 return UltraStarknetProver(builder);
208 }();
209 auto proof = prover.construct_proof();
210 *out = to_heap_buffer(to_buffer(proof));
211#else
212 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
213#endif
214}
215
216WASM_EXPORT void acir_prove_ultra_starknet_zk_honk([[maybe_unused]] uint8_t const* acir_vec,
217 [[maybe_unused]] uint8_t const* witness_vec,
218 [[maybe_unused]] uint8_t const* vk_buf,
219 [[maybe_unused]] uint8_t** out)
220{
221#ifdef STARKNET_GARAGA_FLAVORS
222 // Lambda function to ensure things get freed before proving.
223 UltraStarknetZKProver prover = [&] {
224 const acir_format::ProgramMetadata metadata{ .honk_recursion = 1 };
226 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
227 acir_format::witness_buf_to_witness_data(from_buffer<std::vector<uint8_t>>(witness_vec))
228 };
229 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
230
231 return UltraStarknetZKProver(builder);
232 }();
233 auto proof = prover.construct_proof();
234 *out = to_heap_buffer(to_buffer(proof));
235#else
236 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
237#endif
238}
239
240WASM_EXPORT void acir_verify_ultra_zk_honk(uint8_t const* proof_buf, uint8_t const* vk_buf, bool* result)
241{
242 using VerificationKey = UltraZKFlavor::VerificationKey;
243 using Verifier = UltraVerifier_<UltraZKFlavor>;
244
245 auto proof = many_from_buffer<bb::fr>(from_buffer<std::vector<uint8_t>>(proof_buf));
246 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
247
248 Verifier verifier{ verification_key };
249
250 *result = verifier.template verify_proof<DefaultIO>(proof).result;
251}
252
253WASM_EXPORT void acir_verify_ultra_keccak_honk(uint8_t const* proof_buf, uint8_t const* vk_buf, bool* result)
254{
255 using VerificationKey = UltraKeccakFlavor::VerificationKey;
256 using Verifier = UltraVerifier_<UltraKeccakFlavor>;
257
258 auto proof = many_from_buffer<uint256_t>(from_buffer<std::vector<uint8_t>>(proof_buf));
259 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
260
261 Verifier verifier{ verification_key };
262
263 *result = verifier.template verify_proof<DefaultIO>(proof).result;
264}
265
266WASM_EXPORT void acir_verify_ultra_keccak_zk_honk(uint8_t const* proof_buf, uint8_t const* vk_buf, bool* result)
267{
268 using VerificationKey = UltraKeccakZKFlavor::VerificationKey;
270
271 auto proof = many_from_buffer<uint256_t>(from_buffer<std::vector<uint8_t>>(proof_buf));
272 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
273
274 Verifier verifier{ verification_key };
275
276 *result = verifier.template verify_proof<DefaultIO>(proof).result;
277}
278
279WASM_EXPORT void acir_verify_ultra_starknet_honk([[maybe_unused]] uint8_t const* proof_buf,
280 [[maybe_unused]] uint8_t const* vk_buf,
281 [[maybe_unused]] bool* result)
282{
283#ifdef STARKNET_GARAGA_FLAVORS
284 using VerificationKey = UltraStarknetFlavor::VerificationKey;
286
287 auto proof = from_buffer<std::vector<bb::fr>>(from_buffer<std::vector<uint8_t>>(proof_buf));
288 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
289
290 Verifier verifier{ verification_key };
291
292 *result = verifier.template verify_proof<DefaultIO>(proof).result;
293 ;
294#else
295 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
296#endif
297}
298
299WASM_EXPORT void acir_verify_ultra_starknet_zk_honk([[maybe_unused]] uint8_t const* proof_buf,
300 [[maybe_unused]] uint8_t const* vk_buf,
301 [[maybe_unused]] bool* result)
302{
303#ifdef STARKNET_GARAGA_FLAVORS
304 using VerificationKey = UltraStarknetZKFlavor::VerificationKey;
306
307 auto proof = many_from_buffer<bb::fr>(from_buffer<std::vector<uint8_t>>(proof_buf));
308 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
309
310 Verifier verifier{ verification_key };
311
312 *result = verifier.template verify_proof<DefaultIO>(proof).result;
313#else
314 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
315#endif
316}
317
318WASM_EXPORT void acir_write_vk_ultra_honk(uint8_t const* acir_vec, uint8_t** out)
319{
322 // lambda to free the builder
323 DeciderProvingKey proving_key = [&] {
324 const acir_format::ProgramMetadata metadata{ .honk_recursion = 1 };
326 from_buffer<std::vector<uint8_t>>(acir_vec)) };
327 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
329 }();
330 VerificationKey vk(proving_key.get_precomputed());
331 vinfo("Constructed UltraHonk verification key");
332 *out = to_heap_buffer(to_buffer(vk));
333}
334
335WASM_EXPORT void acir_write_vk_ultra_keccak_honk(uint8_t const* acir_vec, uint8_t** out)
336{
338 using VerificationKey = UltraKeccakFlavor::VerificationKey;
339
340 // lambda to free the builder
341 DeciderProvingKey proving_key = [&] {
342 const acir_format::ProgramMetadata metadata{ .honk_recursion = 1 };
344 from_buffer<std::vector<uint8_t>>(acir_vec)) };
345 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
347 }();
348 VerificationKey vk(proving_key.get_precomputed());
349 vinfo("Constructed UltraKeccakHonk verification key");
350 *out = to_heap_buffer(to_buffer(vk));
351}
352
353WASM_EXPORT void acir_write_vk_ultra_keccak_zk_honk(uint8_t const* acir_vec, uint8_t** out)
354{
356 using VerificationKey = UltraKeccakZKFlavor::VerificationKey;
357
358 // lambda to free the builder
359 DeciderProvingKey proving_key = [&] {
360 const acir_format::ProgramMetadata metadata{ .honk_recursion = 1 };
362 from_buffer<std::vector<uint8_t>>(acir_vec)) };
363 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
365 }();
366 VerificationKey vk(proving_key.get_precomputed());
367 vinfo("Constructed UltraKeccakZKHonk verification key");
368 *out = to_heap_buffer(to_buffer(vk));
369}
370
371WASM_EXPORT void acir_write_vk_ultra_starknet_honk([[maybe_unused]] uint8_t const* acir_vec,
372 [[maybe_unused]] uint8_t** out)
373{
374#ifdef STARKNET_GARAGA_FLAVORS
376 using VerificationKey = UltraStarknetFlavor::VerificationKey;
377
378 // lambda to free the builder
379 DeciderProvingKey proving_key = [&] {
380 const acir_format::ProgramMetadata metadata{ .honk_recursion = 1 };
382 from_buffer<std::vector<uint8_t>>(acir_vec)) };
383 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
385 }();
386 VerificationKey vk(proving_key.get_precomputed());
387 vinfo("Constructed UltraStarknetHonk verification key");
388 *out = to_heap_buffer(to_buffer(vk));
389#else
390 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
391#endif
392}
393
394WASM_EXPORT void acir_write_vk_ultra_starknet_zk_honk([[maybe_unused]] uint8_t const* acir_vec,
395 [[maybe_unused]] uint8_t** out)
396{
397#ifdef STARKNET_GARAGA_FLAVORS
399 using VerificationKey = UltraStarknetZKFlavor::VerificationKey;
400
401 // lambda to free the builder
402 DeciderProvingKey proving_key = [&] {
403 const acir_format::ProgramMetadata metadata{ .honk_recursion = 1 };
405 from_buffer<std::vector<uint8_t>>(acir_vec)) };
406 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
408 }();
409 VerificationKey vk(proving_key.get_precomputed());
410 vinfo("Constructed UltraStarknetZKHonk verification key");
411 *out = to_heap_buffer(to_buffer(vk));
412#else
413 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
414#endif
415}
416
417WASM_EXPORT void acir_honk_solidity_verifier(uint8_t const* proof_buf, uint8_t const* vk_buf, uint8_t** out)
418{
419 using VerificationKey = UltraKeccakFlavor::VerificationKey;
420
421 auto proof = many_from_buffer<bb::fr>(from_buffer<std::vector<uint8_t>>(proof_buf));
422 auto verification_key = from_buffer<VerificationKey>(vk_buf);
423
424 auto str = get_honk_solidity_verifier(&verification_key);
425 *out = to_heap_buffer(str);
426}
427
429{
430 auto proof = many_from_buffer<bb::fr>(from_buffer<std::vector<uint8_t>>(proof_buf));
431 *out = to_heap_buffer(proof);
432}
433
434WASM_EXPORT void acir_vk_as_fields_ultra_honk(uint8_t const* vk_buf, fr::vec_out_buf out_vkey)
435{
437
438 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
439 std::vector<bb::fr> vkey_as_fields = verification_key->to_field_elements();
440 *out_vkey = to_heap_buffer(vkey_as_fields);
441}
442
443WASM_EXPORT void acir_vk_as_fields_mega_honk(uint8_t const* vk_buf, fr::vec_out_buf out_vkey)
444{
446
447 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
448 std::vector<bb::fr> vkey_as_fields = verification_key->to_field_elements();
449 *out_vkey = to_heap_buffer(vkey_as_fields);
450}
451
452WASM_EXPORT void acir_gates_aztec_client(uint8_t const* ivc_inputs_buf, uint8_t** out)
453{
454 auto ivc_inputs_vec = from_buffer<std::vector<uint8_t>>(ivc_inputs_buf);
455 // Note: we parse a stack, but only 'bytecode' needs to be set.
456 auto raw_steps = PrivateExecutionStepRaw::parse_uncompressed(ivc_inputs_vec);
457 std::vector<uint32_t> totals;
458
459 TraceSettings trace_settings{ AZTEC_TRACE_STRUCTURE };
460 auto ivc = std::make_shared<ClientIVC>(/*num_circuits=*/raw_steps.size(), trace_settings);
461 const acir_format::ProgramMetadata metadata{ ivc };
462
463 for (const PrivateExecutionStepRaw& step : raw_steps) {
464 std::vector<uint8_t> bytecode_vec(step.bytecode.begin(), step.bytecode.end());
465 const acir_format::AcirFormat constraint_system =
467
468 // Create an acir program from the constraint system
469 acir_format::AcirProgram program{ constraint_system };
470
471 auto builder = acir_format::create_circuit<MegaCircuitBuilder>(program);
472 builder.finalize_circuit(/*ensure_nonzero=*/true);
473 totals.push_back(static_cast<uint32_t>(builder.num_gates));
474 }
475
476 *out = to_heap_buffer(to_buffer(totals));
477}
static bool verify(const Proof &proof, const VerificationKey &vk)
A DeciderProvingKey is normally constructed from a finalized circuit and it contains all the informat...
Flavor::PrecomputedData get_precomputed()
The verification key is responsible for storing the commitments to the precomputed (non-witness) poly...
The verification key is responsible for storing the commitments to the precomputed (non-witnessk) pol...
void vinfo(Args... args)
Definition log.hpp:76
void info(Args... args)
Definition log.hpp:70
AluTraceBuilder builder
Definition alu.test.cpp:123
WASM_EXPORT void acir_prove_aztec_client(uint8_t const *ivc_inputs_buf, uint8_t **out_proof, uint8_t **out_vk)
Definition c_bind.cpp:82
WASM_EXPORT void acir_prove_ultra_starknet_honk(uint8_t const *acir_vec, uint8_t const *witness_vec, uint8_t const *vk_buf, uint8_t **out)
Definition c_bind.cpp:192
WASM_EXPORT void acir_honk_solidity_verifier(uint8_t const *proof_buf, uint8_t const *vk_buf, uint8_t **out)
Definition c_bind.cpp:417
WASM_EXPORT void acir_verify_ultra_keccak_zk_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
Definition c_bind.cpp:266
WASM_EXPORT void acir_gates_aztec_client(uint8_t const *ivc_inputs_buf, uint8_t **out)
Definition c_bind.cpp:452
WASM_EXPORT void acir_prove_ultra_keccak_honk(uint8_t const *acir_vec, uint8_t const *witness_vec, uint8_t const *vk_buf, uint8_t **out)
Definition c_bind.cpp:146
WASM_EXPORT void acir_verify_ultra_starknet_zk_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
Definition c_bind.cpp:299
WASM_EXPORT void acir_write_vk_ultra_starknet_zk_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:394
WASM_EXPORT void acir_prove_ultra_zk_honk(uint8_t const *acir_vec, uint8_t const *witness_vec, uint8_t const *vk_buf, uint8_t **out)
Definition c_bind.cpp:122
WASM_EXPORT void acir_prove_and_verify_ultra_honk(uint8_t const *acir_vec, uint8_t const *witness_vec, bool *result)
Construct and verify an UltraHonk proof.
Definition c_bind.cpp:40
WASM_EXPORT void acir_vk_as_fields_mega_honk(uint8_t const *vk_buf, fr::vec_out_buf out_vkey)
Definition c_bind.cpp:443
WASM_EXPORT void acir_write_vk_ultra_keccak_zk_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:353
WASM_EXPORT void acir_prove_ultra_starknet_zk_honk(uint8_t const *acir_vec, uint8_t const *witness_vec, uint8_t const *vk_buf, uint8_t **out)
Definition c_bind.cpp:216
WASM_EXPORT void acir_verify_ultra_zk_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
Definition c_bind.cpp:240
WASM_EXPORT void acir_verify_ultra_starknet_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
Definition c_bind.cpp:279
WASM_EXPORT void acir_proof_as_fields_ultra_honk(uint8_t const *proof_buf, fr::vec_out_buf out)
Definition c_bind.cpp:428
WASM_EXPORT void acir_get_circuit_sizes(uint8_t const *acir_vec, bool const *recursive, bool const *honk_recursion, uint32_t *total, uint32_t *subgroup)
Definition c_bind.cpp:26
WASM_EXPORT void acir_write_vk_ultra_keccak_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:335
WASM_EXPORT void acir_prove_ultra_keccak_zk_honk(uint8_t const *acir_vec, uint8_t const *witness_vec, uint8_t const *vk_buf, uint8_t **out)
Definition c_bind.cpp:169
WASM_EXPORT void acir_verify_ultra_keccak_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
Definition c_bind.cpp:253
WASM_EXPORT void acir_prove_and_verify_mega_honk(uint8_t const *acir_vec, uint8_t const *witness_vec, bool *result)
Construct and verify a ClientIVC proof.
Definition c_bind.cpp:61
WASM_EXPORT void acir_write_vk_ultra_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:318
WASM_EXPORT void acir_verify_aztec_client(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
Definition c_bind.cpp:114
WASM_EXPORT void acir_write_vk_ultra_starknet_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:371
WASM_EXPORT void acir_vk_as_fields_ultra_honk(uint8_t const *vk_buf, fr::vec_out_buf out_vkey)
Definition c_bind.cpp:434
std::string get_honk_solidity_verifier(auto const &verification_key)
UltraKeccakFlavor::VerificationKey VerificationKey
DeciderProvingKey_< UltraKeccakFlavor > DeciderProvingKey
WitnessVector witness_buf_to_witness_data(std::vector< uint8_t > &&buf)
Converts from the ACIR-native WitnessStack format to Barretenberg's internal WitnessVector format.
UltraCircuitBuilder create_circuit(AcirProgram &program, const ProgramMetadata &metadata)
Specialization for creating an Ultra circuit from an acir program.
AcirFormat circuit_buf_to_acir_format(std::vector< uint8_t > &&buf)
UltraProver_< UltraKeccakFlavor > UltraKeccakProver
UltraProver_< UltraKeccakZKFlavor > UltraKeccakZKProver
UltraProver_< UltraZKFlavor > UltraZKProver
VerifierCommitmentKey< Curve > vk
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
T from_buffer(B const &buffer, size_t offset=0)
std::vector< uint8_t > to_buffer(T const &value)
uint8_t * to_heap_buffer(T const &value)
A full proof for the IVC scheme containing a Mega proof showing correctness of the hiding circuit (wh...
static Proof from_msgpack_buffer(uint8_t const *&buffer)
uint8_t * to_msgpack_heap_buffer() const
Very quirky method to convert a msgpack buffer to a "heap" buffer.
This is the msgpack encoding of the objects returned by the following typescript: const stepToStruct ...
static std::vector< PrivateExecutionStepRaw > parse_uncompressed(const std::vector< uint8_t > &buf)
std::shared_ptr< ClientIVC > accumulate()
void parse(std::vector< PrivateExecutionStepRaw > &&steps)
uint8_t ** vec_out_buf
void throw_or_abort(std::string const &err)
#define WASM_EXPORT