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 from_buffer<std::vector<uint8_t>>(acir_vec)) };
27 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program, metadata);
28 builder.finalize_circuit(/*ensure_nonzero=*/true);
29 *total = htonl((uint32_t)builder.get_finalized_total_circuit_size());
30 *subgroup = htonl((uint32_t)builder.get_circuit_subgroup_size(builder.get_finalized_total_circuit_size()));
31}
32
33WASM_EXPORT void acir_prove_and_verify_ultra_honk(uint8_t const* acir_vec, uint8_t const* witness_vec, bool* result)
34{
36 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
37 acir_format::witness_buf_to_witness_vector(from_buffer<std::vector<uint8_t>>(witness_vec))
38 };
39
40 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
41
43 auto verification_key = std::make_shared<UltraFlavor::VerificationKey>(prover_instance->get_precomputed());
44 UltraProver prover{ prover_instance, verification_key };
45 auto proof = prover.construct_proof();
46
47 UltraVerifier verifier{ std::make_shared<UltraFlavor::VKAndHash>(verification_key) };
48
49 *result = verifier.verify_proof(proof).result;
50 info("verified: ", *result);
51}
52
53WASM_EXPORT void acir_prove_and_verify_mega_honk(uint8_t const* acir_vec, uint8_t const* witness_vec, bool* result)
54{
56 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
57 acir_format::witness_buf_to_witness_vector(from_buffer<std::vector<uint8_t>>(witness_vec))
58 };
59
60 auto builder = acir_format::create_circuit<MegaCircuitBuilder>(program);
61
63 auto verification_key = std::make_shared<MegaFlavor::VerificationKey>(prover_instance->get_precomputed());
64 MegaProver prover{ prover_instance, verification_key };
65 auto proof = prover.construct_proof();
66
67 MegaVerifier verifier{ std::make_shared<MegaFlavor::VKAndHash>(verification_key) };
68
69 *result = verifier.verify_proof(proof).result;
70}
71
72WASM_EXPORT void acir_prove_aztec_client(uint8_t const* ivc_inputs_buf, uint8_t** out_proof, uint8_t** out_vk)
73{
74 auto ivc_inputs_vec = from_buffer<std::vector<uint8_t>>(ivc_inputs_buf);
75 // Accumulate the entire program stack into the IVC
76 auto start = std::chrono::steady_clock::now();
80 auto end = std::chrono::steady_clock::now();
81 auto diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
82 vinfo("time to construct and accumulate all circuits: ", diff.count());
83
84 vinfo("calling ivc.prove ...");
85 ChonkProof proof = ivc->prove();
86 end = std::chrono::steady_clock::now();
87
88 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
89 vinfo("time to construct, accumulate, prove all circuits: ", diff.count());
90
91 start = std::chrono::steady_clock::now();
92 *out_proof = proof.to_msgpack_heap_buffer();
93 end = std::chrono::steady_clock::now();
94 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
95 vinfo("time to serialize proof: ", diff.count());
96
97 start = std::chrono::steady_clock::now();
98 auto vk_and_hash = ivc->get_hiding_kernel_vk_and_hash();
99 *out_vk = to_heap_buffer(to_buffer(*vk_and_hash->vk));
100 end = std::chrono::steady_clock::now();
101 diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
102 vinfo("time to serialize hiding kernel vk: ", diff.count());
103}
104
105WASM_EXPORT void acir_verify_aztec_client(uint8_t const* proof_buf, uint8_t const* vk_buf, bool* result)
106{
107 using HidingKernelVK = Chonk::MegaVerificationKey;
108 using HidingKernelVKAndHash = ChonkNativeVerifier::VKAndHash;
109
110 const auto proof = ChonkProof::from_msgpack_buffer(proof_buf);
111 auto hiding_kernel_vk = from_buffer<HidingKernelVK>(from_buffer<std::vector<uint8_t>>(vk_buf));
113
114 ChonkNativeVerifier verifier(vk_and_hash);
115 *result = verifier.verify(proof);
116}
117
118WASM_EXPORT void acir_prove_ultra_zk_honk(uint8_t const* acir_vec,
119 uint8_t const* witness_vec,
120 uint8_t const* vk_buf,
121 uint8_t** out)
122{
123 // Lambda function to ensure things get freed before proving.
124 UltraZKProver prover = [&] {
126 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
127 acir_format::witness_buf_to_witness_vector(from_buffer<std::vector<uint8_t>>(witness_vec))
128 };
129 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
131 auto verification_key =
132 std::make_shared<UltraZKFlavor::VerificationKey>(from_buffer<UltraZKFlavor::VerificationKey>(vk_buf));
133
134 return UltraZKProver(prover_instance, verification_key);
135 }();
136
137 auto proof = prover.construct_proof();
138 *out = to_heap_buffer(to_buffer(proof));
139}
140
141WASM_EXPORT void acir_prove_ultra_keccak_honk(uint8_t const* acir_vec,
142 uint8_t const* witness_vec,
143 uint8_t const* vk_buf,
144 uint8_t** out)
145{
146 // Lambda function to ensure things get freed before proving.
147 UltraKeccakProver prover = [&] {
149 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
150 acir_format::witness_buf_to_witness_vector(from_buffer<std::vector<uint8_t>>(witness_vec))
151 };
152 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
153
156 from_buffer<UltraKeccakFlavor::VerificationKey>(vk_buf));
157 return UltraKeccakProver(prover_instance, verification_key);
158 }();
159 auto proof = prover.construct_proof();
160 *out = to_heap_buffer(to_buffer(proof));
161}
162
163WASM_EXPORT void acir_prove_ultra_keccak_zk_honk(uint8_t const* acir_vec,
164 uint8_t const* witness_vec,
165 uint8_t const* vk_buf,
166 uint8_t** out)
167{
168 // Lambda function to ensure things get freed before proving.
169 UltraKeccakZKProver prover = [&] {
171 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
172 acir_format::witness_buf_to_witness_vector(from_buffer<std::vector<uint8_t>>(witness_vec))
173 };
174 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
175
178 from_buffer<UltraKeccakZKFlavor::VerificationKey>(vk_buf));
179 return UltraKeccakZKProver(prover_instance, verification_key);
180 }();
181 auto proof = prover.construct_proof();
182 *out = to_heap_buffer(to_buffer(proof));
183}
184
185WASM_EXPORT void acir_prove_ultra_starknet_honk([[maybe_unused]] uint8_t const* acir_vec,
186 [[maybe_unused]] uint8_t const* witness_vec,
187 [[maybe_unused]] uint8_t const* vk_buf,
188 [[maybe_unused]] uint8_t** out)
189{
190#ifdef STARKNET_GARAGA_FLAVORS
191 // Lambda function to ensure things get freed before proving.
192 UltraStarknetProver prover = [&] {
194 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
195 acir_format::witness_buf_to_witness_vector(from_buffer<std::vector<uint8_t>>(witness_vec))
196 };
197 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
198
199 return UltraStarknetProver(builder);
200 }();
201 auto proof = prover.construct_proof();
202 *out = to_heap_buffer(to_buffer(proof));
203#else
204 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
205#endif
206}
207
208WASM_EXPORT void acir_prove_ultra_starknet_zk_honk([[maybe_unused]] uint8_t const* acir_vec,
209 [[maybe_unused]] uint8_t const* witness_vec,
210 [[maybe_unused]] uint8_t const* vk_buf,
211 [[maybe_unused]] uint8_t** out)
212{
213#ifdef STARKNET_GARAGA_FLAVORS
214 // Lambda function to ensure things get freed before proving.
215 UltraStarknetZKProver prover = [&] {
217 acir_format::circuit_buf_to_acir_format(from_buffer<std::vector<uint8_t>>(acir_vec)),
218 acir_format::witness_buf_to_witness_vector(from_buffer<std::vector<uint8_t>>(witness_vec))
219 };
220 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
221
222 return UltraStarknetZKProver(builder);
223 }();
224 auto proof = prover.construct_proof();
225 *out = to_heap_buffer(to_buffer(proof));
226#else
227 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
228#endif
229}
230
231WASM_EXPORT void acir_verify_ultra_zk_honk(uint8_t const* proof_buf, uint8_t const* vk_buf, bool* result)
232{
233 using VerificationKey = UltraZKFlavor::VerificationKey;
235
236 auto proof = many_from_buffer<bb::fr>(from_buffer<std::vector<uint8_t>>(proof_buf));
237 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
238
239 Verifier verifier{ std::make_shared<UltraZKFlavor::VKAndHash>(verification_key) };
240
241 *result = verifier.verify_proof(proof).result;
242}
243
244WASM_EXPORT void acir_verify_ultra_keccak_honk(uint8_t const* proof_buf, uint8_t const* vk_buf, bool* result)
245{
248
249 auto proof = many_from_buffer<uint256_t>(from_buffer<std::vector<uint8_t>>(proof_buf));
250 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
251
252 Verifier verifier{ std::make_shared<UltraKeccakFlavor::VKAndHash>(verification_key) };
253
254 *result = verifier.verify_proof(proof).result;
255}
256
257WASM_EXPORT void acir_verify_ultra_keccak_zk_honk(uint8_t const* proof_buf, uint8_t const* vk_buf, bool* result)
258{
259 using VerificationKey = UltraKeccakZKFlavor::VerificationKey;
261
262 auto proof = many_from_buffer<uint256_t>(from_buffer<std::vector<uint8_t>>(proof_buf));
263 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
264
265 Verifier verifier{ std::make_shared<UltraKeccakZKFlavor::VKAndHash>(verification_key) };
266
267 *result = verifier.verify_proof(proof).result;
268}
269
270WASM_EXPORT void acir_verify_ultra_starknet_honk([[maybe_unused]] uint8_t const* proof_buf,
271 [[maybe_unused]] uint8_t const* vk_buf,
272 [[maybe_unused]] bool* result)
273{
274#ifdef STARKNET_GARAGA_FLAVORS
275 using VerificationKey = UltraStarknetFlavor::VerificationKey;
277
278 auto proof = from_buffer<std::vector<bb::fr>>(from_buffer<std::vector<uint8_t>>(proof_buf));
279 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
280
281 Verifier verifier{ std::make_shared<UltraStarknetFlavor::VKAndHash>(verification_key) };
282
283 *result = verifier.verify_proof(proof).result;
284#else
285 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
286#endif
287}
288
289WASM_EXPORT void acir_verify_ultra_starknet_zk_honk([[maybe_unused]] uint8_t const* proof_buf,
290 [[maybe_unused]] uint8_t const* vk_buf,
291 [[maybe_unused]] bool* result)
292{
293#ifdef STARKNET_GARAGA_FLAVORS
294 using VerificationKey = UltraStarknetZKFlavor::VerificationKey;
296
297 auto proof = many_from_buffer<bb::fr>(from_buffer<std::vector<uint8_t>>(proof_buf));
298 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
299 Verifier verifier{ std::make_shared<UltraStarknetZKFlavor::VKAndHash>(verification_key) };
300
301 *result = verifier.verify_proof(proof).result;
302#else
303 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
304#endif
305}
306
307WASM_EXPORT void acir_write_vk_ultra_honk(uint8_t const* acir_vec, uint8_t** out)
308{
311 // lambda to free the builder
312 ProverInstance prover_instance = [&] {
314 from_buffer<std::vector<uint8_t>>(acir_vec)) };
315 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
316 return ProverInstance(builder);
317 }();
318 VerificationKey vk(prover_instance.get_precomputed());
319 vinfo("Constructed UltraHonk verification key");
320 *out = to_heap_buffer(to_buffer(vk));
321}
322
323WASM_EXPORT void acir_write_vk_ultra_keccak_honk(uint8_t const* acir_vec, uint8_t** out)
324{
327
328 // lambda to free the builder
329 ProverInstance prover_instance = [&] {
331 from_buffer<std::vector<uint8_t>>(acir_vec)) };
332 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
333 return ProverInstance(builder);
334 }();
335 VerificationKey vk(prover_instance.get_precomputed());
336 vinfo("Constructed UltraKeccakHonk verification key");
337 *out = to_heap_buffer(to_buffer(vk));
338}
339
340WASM_EXPORT void acir_write_vk_ultra_keccak_zk_honk(uint8_t const* acir_vec, uint8_t** out)
341{
343 using VerificationKey = UltraKeccakZKFlavor::VerificationKey;
344
345 // lambda to free the builder
346 ProverInstance prover_instance = [&] {
348 from_buffer<std::vector<uint8_t>>(acir_vec)) };
349 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
350 return ProverInstance(builder);
351 }();
352 VerificationKey vk(prover_instance.get_precomputed());
353 vinfo("Constructed UltraKeccakZKHonk verification key");
354 *out = to_heap_buffer(to_buffer(vk));
355}
356
357WASM_EXPORT void acir_write_vk_ultra_starknet_honk([[maybe_unused]] uint8_t const* acir_vec,
358 [[maybe_unused]] uint8_t** out)
359{
360#ifdef STARKNET_GARAGA_FLAVORS
362 using VerificationKey = UltraStarknetFlavor::VerificationKey;
363
364 // lambda to free the builder
365 ProverInstance prover_instance = [&] {
367 from_buffer<std::vector<uint8_t>>(acir_vec)) };
368 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
369 return ProverInstance(builder);
370 }();
371 VerificationKey vk(prover_instance.get_precomputed());
372 vinfo("Constructed UltraStarknetHonk verification key");
373 *out = to_heap_buffer(to_buffer(vk));
374#else
375 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
376#endif
377}
378
379WASM_EXPORT void acir_write_vk_ultra_starknet_zk_honk([[maybe_unused]] uint8_t const* acir_vec,
380 [[maybe_unused]] uint8_t** out)
381{
382#ifdef STARKNET_GARAGA_FLAVORS
384 using VerificationKey = UltraStarknetZKFlavor::VerificationKey;
385
386 // lambda to free the builder
387 ProverInstance prover_instance = [&] {
389 from_buffer<std::vector<uint8_t>>(acir_vec)) };
390 auto builder = acir_format::create_circuit<UltraCircuitBuilder>(program);
391 return ProverInstance(builder);
392 }();
393 VerificationKey vk(prover_instance.get_precomputed());
394 vinfo("Constructed UltraStarknetZKHonk verification key");
395 *out = to_heap_buffer(to_buffer(vk));
396#else
397 throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
398#endif
399}
400
401WASM_EXPORT void acir_honk_solidity_verifier(uint8_t const* proof_buf, uint8_t const* vk_buf, uint8_t** out)
402{
404
405 auto proof = many_from_buffer<bb::fr>(from_buffer<std::vector<uint8_t>>(proof_buf));
406 auto verification_key = from_buffer<VerificationKey>(vk_buf);
407
408 auto str = get_honk_solidity_verifier(&verification_key);
409 *out = to_heap_buffer(str);
410}
411
413{
414 auto proof = many_from_buffer<bb::fr>(from_buffer<std::vector<uint8_t>>(proof_buf));
415 *out = to_heap_buffer(proof);
416}
417
418WASM_EXPORT void acir_vk_as_fields_ultra_honk(uint8_t const* vk_buf, fr::vec_out_buf out_vkey)
419{
421
422 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
423 std::vector<bb::fr> vkey_as_fields = verification_key->to_field_elements();
424 *out_vkey = to_heap_buffer(vkey_as_fields);
425}
426
427WASM_EXPORT void acir_vk_as_fields_mega_honk(uint8_t const* vk_buf, fr::vec_out_buf out_vkey)
428{
430
431 auto verification_key = std::make_shared<VerificationKey>(from_buffer<VerificationKey>(vk_buf));
432 std::vector<bb::fr> vkey_as_fields = verification_key->to_field_elements();
433 *out_vkey = to_heap_buffer(vkey_as_fields);
434}
435
436WASM_EXPORT void acir_gates_aztec_client(uint8_t const* ivc_inputs_buf, uint8_t** out)
437{
438 auto ivc_inputs_vec = from_buffer<std::vector<uint8_t>>(ivc_inputs_buf);
439 // Note: we parse a stack, but only 'bytecode' needs to be set.
440 auto raw_steps = PrivateExecutionStepRaw::parse_uncompressed(ivc_inputs_vec);
441 std::vector<uint32_t> totals;
442
443 auto ivc = std::make_shared<Chonk>(/*num_circuits=*/raw_steps.size());
444 const acir_format::ProgramMetadata metadata{ ivc };
445
446 for (const PrivateExecutionStepRaw& step : raw_steps) {
447 std::vector<uint8_t> bytecode_vec(step.bytecode.begin(), step.bytecode.end());
448 const acir_format::AcirFormat constraint_system =
450
451 // Create an acir program from the constraint system
452 acir_format::AcirProgram program{ constraint_system };
453
454 auto builder = acir_format::create_circuit<MegaCircuitBuilder>(program);
455 builder.finalize_circuit(/*ensure_nonzero=*/true);
456 totals.push_back(static_cast<uint32_t>(builder.num_gates()));
457 }
458
459 *out = to_heap_buffer(to_buffer(totals));
460}
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:141
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 vinfo(...)
Definition log.hpp:94
void info(Args... args)
Definition log.hpp:89
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:72
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:185
WASM_EXPORT void acir_honk_solidity_verifier(uint8_t const *proof_buf, uint8_t const *vk_buf, uint8_t **out)
Definition c_bind.cpp:401
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:257
WASM_EXPORT void acir_gates_aztec_client(uint8_t const *ivc_inputs_buf, uint8_t **out)
Definition c_bind.cpp:436
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:141
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:289
WASM_EXPORT void acir_write_vk_ultra_starknet_zk_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:379
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:118
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:33
WASM_EXPORT void acir_vk_as_fields_mega_honk(uint8_t const *vk_buf, fr::vec_out_buf out_vkey)
Definition c_bind.cpp:427
WASM_EXPORT void acir_write_vk_ultra_keccak_zk_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:340
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:208
WASM_EXPORT void acir_verify_ultra_zk_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
Definition c_bind.cpp:231
WASM_EXPORT void acir_verify_ultra_starknet_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
Definition c_bind.cpp:270
WASM_EXPORT void acir_proof_as_fields_ultra_honk(uint8_t const *proof_buf, fr::vec_out_buf out)
Definition c_bind.cpp:412
WASM_EXPORT void acir_write_vk_ultra_keccak_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:323
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:163
WASM_EXPORT void acir_verify_ultra_keccak_honk(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
Definition c_bind.cpp:244
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:53
WASM_EXPORT void acir_write_vk_ultra_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:307
WASM_EXPORT void acir_verify_aztec_client(uint8_t const *proof_buf, uint8_t const *vk_buf, bool *result)
Definition c_bind.cpp:105
WASM_EXPORT void acir_write_vk_ultra_starknet_honk(uint8_t const *acir_vec, uint8_t **out)
Definition c_bind.cpp:357
WASM_EXPORT void acir_vk_as_fields_ultra_honk(uint8_t const *vk_buf, fr::vec_out_buf out_vkey)
Definition c_bind.cpp:418
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