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 "c_bind.hpp"
2#include "../acir_format/acir_to_constraint_buf.hpp"
12
15#include "honk_contract.hpp"
16#include <cstdint>
17#include <memory>
18
19WASM_EXPORT void acir_get_circuit_sizes(uint8_t const* acir_vec,
20 bool const* has_ipa_claim,
21 uint32_t* total,
22 uint32_t* subgroup)
23{
24 const acir_format::ProgramMetadata metadata{ .has_ipa_claim = *has_ipa_claim };
26 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)), {}
27 };
28 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
29 builder.finalize_circuit(/*ensure_nonzero=*/true);
30 *total = htonl((uint32_t)builder.get_finalized_total_circuit_size());
31 *subgroup = htonl((uint32_t)builder.get_circuit_subgroup_size(builder.get_finalized_total_circuit_size()));
32}
33
34WASM_EXPORT void acir_prove_and_verify_ultra_honk(uint8_t const* acir_vec, uint8_t const* witness_vec, bool* result)
35{
37 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
38 acir_format::witness_buf_to_witness_vector(from_buffer<std::vector<uint8_t>>(witness_vec))
39 };
40
41 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
42
44 auto verification_key = std::make_shared<UltraFlavor::VerificationKey>(prover_instance->get_precomputed());
45 UltraProver prover{ prover_instance, verification_key };
46 auto proof = prover.construct_proof();
47
48 UltraVerifier verifier{ std::make_shared<UltraFlavor::VKAndHash>(verification_key) };
49
50 *result = verifier.verify_proof(proof).result;
51 info("verified: ", *result);
52}
53
54WASM_EXPORT void acir_prove_and_verify_mega_honk(uint8_t const* acir_vec, uint8_t const* witness_vec, bool* result)
55{
57 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
58 acir_format::witness_buf_to_witness_vector(from_buffer<std::vector<uint8_t>>(witness_vec))
59 };
60
61 auto builder = acir_format::create_circuit<MegaCircuitBuilder>(program);
62
64 auto verification_key = std::make_shared<MegaFlavor::VerificationKey>(prover_instance->get_precomputed());
65 MegaProver prover{ prover_instance, verification_key };
66 auto proof = prover.construct_proof();
67
68 MegaVerifier verifier{ std::make_shared<MegaFlavor::VKAndHash>(verification_key) };
69
70 *result = verifier.verify_proof(proof).result;
71}
72
73WASM_EXPORT void acir_prove_aztec_client(uint8_t const* ivc_inputs_buf, uint8_t** out_proof, uint8_t** out_vk)
74{
75 auto ivc_inputs_vec = from_buffer<std::vector<uint8_t>>(ivc_inputs_buf);
76 // Accumulate the entire program stack into the IVC
77 auto start = std::chrono::steady_clock::now();
81 auto end = std::chrono::steady_clock::now();
82 auto diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
83 vinfo("time to construct and accumulate all circuits: ", diff.count());
84
85 vinfo("calling ivc.prove ...");
86 ChonkProof proof = ivc->prove();
87 end = std::chrono::steady_clock::now();
88
89 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
90 vinfo("time to construct, accumulate, prove all circuits: ", diff.count());
91
92 start = std::chrono::steady_clock::now();
93 *out_proof = proof.to_msgpack_heap_buffer();
94 end = std::chrono::steady_clock::now();
95 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
96 vinfo("time to serialize proof: ", diff.count());
97
98 start = std::chrono::steady_clock::now();
99 auto vk_and_hash = ivc->get_hiding_kernel_vk_and_hash();
100 *out_vk = to_heap_buffer(to_buffer(*vk_and_hash->vk));
101 end = std::chrono::steady_clock::now();
102 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
103 vinfo("time to serialize hiding kernel vk: ", diff.count());
104}
105
106WASM_EXPORT void acir_verify_aztec_client(uint8_t const* proof_buf, uint8_t const* vk_buf, bool* result)
107{
108 using HidingKernelVK = Chonk::MegaVerificationKey;
109 using HidingKernelVKAndHash = ChonkNativeVerifier::VKAndHash;
110
111 const auto proof = ChonkProof::from_msgpack_buffer(proof_buf);
112 auto hiding_kernel_vk = from_buffer<HidingKernelVK>(from_buffer<std::vector<uint8_t>>(vk_buf));
114
115 ChonkNativeVerifier verifier(vk_and_hash);
116 *result = verifier.verify(proof);
117}
118
119WASM_EXPORT void acir_prove_ultra_zk_honk(uint8_t const* acir_vec,
120 uint8_t const* witness_vec,
121 uint8_t const* vk_buf,
122 uint8_t** out)
123{
124 // Lambda function to ensure things get freed before proving.
125 UltraZKProver prover = [&] {
127 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
128 acir_format::witness_buf_to_witness_vector(from_buffer<std::vector<uint8_t>>(witness_vec))
129 };
130 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
132 auto verification_key =
133 std::make_shared<UltraZKFlavor::VerificationKey>(from_buffer<UltraZKFlavor::VerificationKey>(vk_buf));
134
135 return UltraZKProver(prover_instance, verification_key);
136 }();
137
138 auto proof = prover.construct_proof();
139 *out = to_heap_buffer(to_buffer(proof));
140}
141
142WASM_EXPORT void acir_prove_ultra_keccak_honk(uint8_t const* acir_vec,
143 uint8_t const* witness_vec,
144 uint8_t const* vk_buf,
145 uint8_t** out)
146{
147 // Lambda function to ensure things get freed before proving.
148 UltraKeccakProver prover = [&] {
150 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
151 acir_format::witness_buf_to_witness_vector(from_buffer<std::vector<uint8_t>>(witness_vec))
152 };
153 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
154
157 from_buffer<UltraKeccakFlavor::VerificationKey>(vk_buf));
158 return UltraKeccakProver(prover_instance, verification_key);
159 }();
160 auto proof = prover.construct_proof();
161 *out = to_heap_buffer(to_buffer(proof));
162}
163
164WASM_EXPORT void acir_prove_ultra_keccak_zk_honk(uint8_t const* acir_vec,
165 uint8_t const* witness_vec,
166 uint8_t const* vk_buf,
167 uint8_t** out)
168{
169 // Lambda function to ensure things get freed before proving.
170 UltraKeccakZKProver prover = [&] {
172 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
173 acir_format::witness_buf_to_witness_vector(from_buffer<std::vector<uint8_t>>(witness_vec))
174 };
175 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
176
179 from_buffer<UltraKeccakZKFlavor::VerificationKey>(vk_buf));
180 return UltraKeccakZKProver(prover_instance, verification_key);
181 }();
182 auto proof = prover.construct_proof();
183 *out = to_heap_buffer(to_buffer(proof));
184}
185
186WASM_EXPORT void acir_prove_ultra_starknet_honk([[maybe_unused]] uint8_t const* acir_vec,
187 [[maybe_unused]] uint8_t const* witness_vec,
188 [[maybe_unused]] uint8_t const* vk_buf,
189 [[maybe_unused]] uint8_t** out)
190{
191#ifdef STARKNET_GARAGA_FLAVORS
192 // Lambda function to ensure things get freed before proving.
193 UltraStarknetProver prover = [&] {
195 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
196 acir_format::witness_buf_to_witness_vector(from_buffer<std::vector<uint8_t>>(witness_vec))
197 };
198 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
199
200 return UltraStarknetProver(builder);
201 }();
202 auto proof = prover.construct_proof();
203 *out = to_heap_buffer(to_buffer(proof));
204#else
205 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
206#endif
207}
208
209WASM_EXPORT void acir_prove_ultra_starknet_zk_honk([[maybe_unused]] uint8_t const* acir_vec,
210 [[maybe_unused]] uint8_t const* witness_vec,
211 [[maybe_unused]] uint8_t const* vk_buf,
212 [[maybe_unused]] uint8_t** out)
213{
214#ifdef STARKNET_GARAGA_FLAVORS
215 // Lambda function to ensure things get freed before proving.
216 UltraStarknetZKProver prover = [&] {
218 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
219 acir_format::witness_buf_to_witness_vector(from_buffer<std::vector<uint8_t>>(witness_vec))
220 };
221 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
222
223 return UltraStarknetZKProver(builder);
224 }();
225 auto proof = prover.construct_proof();
226 *out = to_heap_buffer(to_buffer(proof));
227#else
228 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
229#endif
230}
231
232WASM_EXPORT void acir_verify_ultra_zk_honk(uint8_t const* proof_buf, uint8_t const* vk_buf, bool* result)
233{
234 using VerificationKey = UltraZKFlavor::VerificationKey;
236
237 auto proof = many_from_buffer<bb::fr>(from_buffer<std::vector<uint8_t>>(proof_buf));
238 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
239
240 Verifier verifier{ std::make_shared<UltraZKFlavor::VKAndHash>(verification_key) };
241
242 *result = verifier.verify_proof(proof).result;
243}
244
245WASM_EXPORT void acir_verify_ultra_keccak_honk(uint8_t const* proof_buf, uint8_t const* vk_buf, bool* result)
246{
249
250 auto proof = many_from_buffer<uint256_t>(from_buffer<std::vector<uint8_t>>(proof_buf));
251 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
252
253 Verifier verifier{ std::make_shared<UltraKeccakFlavor::VKAndHash>(verification_key) };
254
255 *result = verifier.verify_proof(proof).result;
256}
257
258WASM_EXPORT void acir_verify_ultra_keccak_zk_honk(uint8_t const* proof_buf, uint8_t const* vk_buf, bool* result)
259{
260 using VerificationKey = UltraKeccakZKFlavor::VerificationKey;
262
263 auto proof = many_from_buffer<uint256_t>(from_buffer<std::vector<uint8_t>>(proof_buf));
264 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
265
266 Verifier verifier{ std::make_shared<UltraKeccakZKFlavor::VKAndHash>(verification_key) };
267
268 *result = verifier.verify_proof(proof).result;
269}
270
271WASM_EXPORT void acir_verify_ultra_starknet_honk([[maybe_unused]] uint8_t const* proof_buf,
272 [[maybe_unused]] uint8_t const* vk_buf,
273 [[maybe_unused]] bool* result)
274{
275#ifdef STARKNET_GARAGA_FLAVORS
276 using VerificationKey = UltraStarknetFlavor::VerificationKey;
278
279 auto proof = from_buffer<std::vector<bb::fr>>(from_buffer<std::vector<uint8_t>>(proof_buf));
280 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
281
282 Verifier verifier{ std::make_shared<UltraStarknetFlavor::VKAndHash>(verification_key) };
283
284 *result = verifier.verify_proof(proof).result;
285#else
286 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
287#endif
288}
289
290WASM_EXPORT void acir_verify_ultra_starknet_zk_honk([[maybe_unused]] uint8_t const* proof_buf,
291 [[maybe_unused]] uint8_t const* vk_buf,
292 [[maybe_unused]] bool* result)
293{
294#ifdef STARKNET_GARAGA_FLAVORS
295 using VerificationKey = UltraStarknetZKFlavor::VerificationKey;
297
298 auto proof = many_from_buffer<bb::fr>(from_buffer<std::vector<uint8_t>>(proof_buf));
299 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
300 Verifier verifier{ std::make_shared<UltraStarknetZKFlavor::VKAndHash>(verification_key) };
301
302 *result = verifier.verify_proof(proof).result;
303#else
304 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
305#endif
306}
307
308WASM_EXPORT void acir_write_vk_ultra_honk(uint8_t const* acir_vec, uint8_t** out)
309{
312 // lambda to free the builder
313 ProverInstance prover_instance = [&] {
315 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)), {}
316 };
317 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
318 return ProverInstance(builder);
319 }();
320 VerificationKey vk(prover_instance.get_precomputed());
321 vinfo("Constructed UltraHonk verification key");
322 *out = to_heap_buffer(to_buffer(vk));
323}
324
325WASM_EXPORT void acir_write_vk_ultra_keccak_honk(uint8_t const* acir_vec, uint8_t** out)
326{
329
330 // lambda to free the builder
331 ProverInstance prover_instance = [&] {
333 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)), {}
334 };
335 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
336 return ProverInstance(builder);
337 }();
338 VerificationKey vk(prover_instance.get_precomputed());
339 vinfo("Constructed UltraKeccakHonk verification key");
340 *out = to_heap_buffer(to_buffer(vk));
341}
342
343WASM_EXPORT void acir_write_vk_ultra_keccak_zk_honk(uint8_t const* acir_vec, uint8_t** out)
344{
346 using VerificationKey = UltraKeccakZKFlavor::VerificationKey;
347
348 // lambda to free the builder
349 ProverInstance prover_instance = [&] {
351 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)), {}
352 };
353 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
354 return ProverInstance(builder);
355 }();
356 VerificationKey vk(prover_instance.get_precomputed());
357 vinfo("Constructed UltraKeccakZKHonk verification key");
358 *out = to_heap_buffer(to_buffer(vk));
359}
360
361WASM_EXPORT void acir_write_vk_ultra_starknet_honk([[maybe_unused]] uint8_t const* acir_vec,
362 [[maybe_unused]] uint8_t** out)
363{
364#ifdef STARKNET_GARAGA_FLAVORS
366 using VerificationKey = UltraStarknetFlavor::VerificationKey;
367
368 // lambda to free the builder
369 ProverInstance prover_instance = [&] {
371 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)), {}
372 };
373 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
374 return ProverInstance(builder);
375 }();
376 VerificationKey vk(prover_instance.get_precomputed());
377 vinfo("Constructed UltraStarknetHonk verification key");
378 *out = to_heap_buffer(to_buffer(vk));
379#else
380 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
381#endif
382}
383
384WASM_EXPORT void acir_write_vk_ultra_starknet_zk_honk([[maybe_unused]] uint8_t const* acir_vec,
385 [[maybe_unused]] uint8_t** out)
386{
387#ifdef STARKNET_GARAGA_FLAVORS
389 using VerificationKey = UltraStarknetZKFlavor::VerificationKey;
390
391 // lambda to free the builder
392 ProverInstance prover_instance = [&] {
394 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)), {}
395 };
396 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
397 return ProverInstance(builder);
398 }();
399 VerificationKey vk(prover_instance.get_precomputed());
400 vinfo("Constructed UltraStarknetZKHonk verification key");
401 *out = to_heap_buffer(to_buffer(vk));
402#else
403 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
404#endif
405}
406
407WASM_EXPORT void acir_honk_solidity_verifier(uint8_t const* proof_buf, uint8_t const* vk_buf, uint8_t** out)
408{
410
411 auto proof = many_from_buffer<bb::fr>(from_buffer<std::vector<uint8_t>>(proof_buf));
412 auto verification_key = from_buffer<VerificationKey>(vk_buf);
413
414 auto str = get_honk_solidity_verifier(&verification_key);
415 *out = to_heap_buffer(str);
416}
417
419{
420 auto proof = many_from_buffer<bb::fr>(from_buffer<std::vector<uint8_t>>(proof_buf));
421 *out = to_heap_buffer(proof);
422}
423
424WASM_EXPORT void acir_vk_as_fields_ultra_honk(uint8_t const* vk_buf, fr::vec_out_buf out_vkey)
425{
427
428 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
429 std::vector<bb::fr> vkey_as_fields = verification_key->to_field_elements();
430 *out_vkey = to_heap_buffer(vkey_as_fields);
431}
432
433WASM_EXPORT void acir_vk_as_fields_mega_honk(uint8_t const* vk_buf, fr::vec_out_buf out_vkey)
434{
436
437 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
438 std::vector<bb::fr> vkey_as_fields = verification_key->to_field_elements();
439 *out_vkey = to_heap_buffer(vkey_as_fields);
440}
441
442WASM_EXPORT void acir_gates_aztec_client(uint8_t const* ivc_inputs_buf, uint8_t** out)
443{
444 auto ivc_inputs_vec = from_buffer<std::vector<uint8_t>>(ivc_inputs_buf);
445 // Note: we parse a stack, but only 'bytecode' needs to be set.
446 auto raw_steps = PrivateExecutionStepRaw::parse_uncompressed(ivc_inputs_vec);
447 std::vector<uint32_t> totals;
448
449 auto ivc = std::make_shared<Chonk>(/*num_circuits=*/raw_steps.size());
450 const acir_format::ProgramMetadata metadata{ ivc };
451
452 for (const PrivateExecutionStepRaw& step : raw_steps) {
453 std::vector<uint8_t> bytecode_vec(step.bytecode.begin(), step.bytecode.end());
454 const acir_format::AcirFormat constraint_system =
456
457 // Create an acir program from the constraint system
458 acir_format::AcirProgram program{ constraint_system, {} };
459
460 auto builder = acir_format::create_circuit<MegaCircuitBuilder>(program);
461 builder.finalize_circuit(/*ensure_nonzero=*/true);
462 totals.push_back(static_cast<uint32_t>(builder.num_gates()));
463 }
464
465 *out = to_heap_buffer(to_buffer(totals));
466}
Flavor::VerificationKey MegaVerificationKey
Definition chonk.hpp:43
Verifier for Chonk IVC proofs (both native and recursive).
Output verify(const Proof &proof)
Verify a Chonk proof.
typename HidingKernelVerifier::VKAndHash VKAndHash
NativeVerificationKey_< PrecomputedEntities< Commitment >, Codec, HashFunction, CommitmentKey > VerificationKey
The verification key is responsible for storing the commitments to the precomputed (non-witness) poly...
Base Native verification key class.
Definition flavor.hpp:172
A ProverInstance is normally constructed from a finalized circuit and it contains all the information...
Flavor::PrecomputedData get_precomputed()
NativeVerificationKey_< PrecomputedEntities< Commitment >, Codec, HashFunction, CommitmentKey > VerificationKey
The verification key is responsible for storing the commitments to the precomputed (non-witnessk) pol...
NativeVerificationKey_< PrecomputedEntities< Commitment >, Codec, HashFunction, CommitmentKey > VerificationKey
Output verify_proof(const Proof &proof)
Perform ultra verification.
#define info(...)
Definition log.hpp:93
#define vinfo(...)
Definition log.hpp:94
AluTraceBuilder builder
Definition alu.test.cpp:124
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:73
WASM_EXPORT void acir_get_circuit_sizes(uint8_t const *acir_vec, bool const *has_ipa_claim, uint32_t *total, uint32_t *subgroup)
Definition c_bind.cpp:19
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:186
WASM_EXPORT void acir_honk_solidity_verifier(uint8_t const *proof_buf, uint8_t const *vk_buf, uint8_t **out)
Definition c_bind.cpp:407
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:258
WASM_EXPORT void acir_gates_aztec_client(uint8_t const *ivc_inputs_buf, uint8_t **out)
Definition c_bind.cpp:442
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:142
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:290
WASM_EXPORT void acir_write_vk_ultra_starknet_zk_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:384
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:119
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:34
WASM_EXPORT void acir_vk_as_fields_mega_honk(uint8_t const *vk_buf, fr::vec_out_buf out_vkey)
Definition c_bind.cpp:433
WASM_EXPORT void acir_write_vk_ultra_keccak_zk_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:343
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:209
WASM_EXPORT void acir_verify_ultra_zk_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
Definition c_bind.cpp:232
WASM_EXPORT void acir_verify_ultra_starknet_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
Definition c_bind.cpp:271
WASM_EXPORT void acir_proof_as_fields_ultra_honk(uint8_t const *proof_buf, fr::vec_out_buf out)
Definition c_bind.cpp:418
WASM_EXPORT void acir_write_vk_ultra_keccak_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:325
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:164
WASM_EXPORT void acir_verify_ultra_keccak_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
Definition c_bind.cpp:245
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 Chonk proof.
Definition c_bind.cpp:54
WASM_EXPORT void acir_write_vk_ultra_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:308
WASM_EXPORT void acir_verify_aztec_client(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
Definition c_bind.cpp:106
WASM_EXPORT void acir_write_vk_ultra_starknet_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:361
WASM_EXPORT void acir_vk_as_fields_ultra_honk(uint8_t const *vk_buf, fr::vec_out_buf out_vkey)
Definition c_bind.cpp:424
std::string get_honk_solidity_verifier(auto const &verification_key)
ProverInstance_< UltraKeccakFlavor > ProverInstance
WitnessVector witness_buf_to_witness_vector(std::vector< uint8_t > &&buf)
Convert a buffer representing a witness vector into Barretenberg's internal WitnessVector format.
AcirFormat circuit_buf_to_acir_format(std::vector< uint8_t > &&buf)
Convert a buffer representing a circuit into Barretenberg's internal AcirFormat representation.
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)
Barretenberg's representation of ACIR constraints.
Struct containing both the constraints to be added to the circuit and the witness vector.
Metadata required to create a circuit.
uint8_t * to_msgpack_heap_buffer() const
static ChonkProof_ from_msgpack_buffer(uint8_t const *&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)
Parsed private execution steps ready for Chonk accumulation.
std::shared_ptr< Chonk > accumulate()
Creates a Chonk instance and accumulates each circuit in the folding stack. Uses precomputed VKs when...
void parse(std::vector< PrivateExecutionStepRaw > &&steps)
Converts PrivateExecutionStepRaw entries (which contain raw bytecode/witness bytes) into structured A...
uint8_t ** vec_out_buf
void throw_or_abort(std::string const &err)
#define WASM_EXPORT