Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
chonk.test.cpp
Go to the documentation of this file.
1#include <ranges>
2
19#include "gtest/gtest.h"
20
21using namespace bb;
22
23static constexpr size_t SMALL_LOG_2_NUM_GATES = 5;
24
25class ChonkTests : public ::testing::Test {
26 protected:
28
30 using FF = typename Flavor::FF;
37 using CircuitProducer = PrivateFunctionExecutionMockCircuitProducer;
39
40 public:
47 static void tamper_with_proof(HonkProof& proof, size_t public_inputs_offset)
48 {
49 // Tamper with the commitment in the proof
50 Commitment commitment = FrCodec::deserialize_from_fields<Commitment>(
51 std::span{ proof }.subspan(public_inputs_offset, FrCodec::template calc_num_fields<Commitment>()));
52 commitment = commitment + Commitment::one();
53 auto commitment_frs = FrCodec::serialize_to_fields<Commitment>(commitment);
54 for (size_t idx = 0; idx < 4; ++idx) {
55 proof[public_inputs_offset + idx] = commitment_frs[idx];
56 }
57 }
58
60 size_t num_app_circuits, TestSettings settings = {}, bool check_circuit_sizes = false)
61 {
62 CircuitProducer circuit_producer(num_app_circuits);
63 const size_t num_circuits = circuit_producer.total_num_circuits;
64 Chonk ivc{ num_circuits };
65
66 for (size_t j = 0; j < num_circuits; ++j) {
67 circuit_producer.construct_and_accumulate_next_circuit(ivc, settings, check_circuit_sizes);
68 }
69 return { ivc.prove(), ivc.get_hiding_kernel_vk_and_hash() };
70 };
71
72 static bool verify_chonk(const ChonkProof& proof, const std::shared_ptr<MegaZKFlavor::VKAndHash>& vk_and_hash)
73 {
74 ChonkVerifier verifier(vk_and_hash);
75 return verifier.verify(proof);
76 }
77
82
87
94 {
96
97 const size_t NUM_APP_CIRCUITS = 2;
98 CircuitProducer circuit_producer(NUM_APP_CIRCUITS);
99 const size_t NUM_CIRCUITS = circuit_producer.total_num_circuits;
100 Chonk ivc{ NUM_CIRCUITS };
101 TestSettings settings{ .log2_num_gates = SMALL_LOG_2_NUM_GATES };
102
103 for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) {
104 auto [circuit, vk] = circuit_producer.create_next_circuit_and_vk(ivc, settings);
105 ivc.accumulate(circuit, vk);
106
107 // After accumulating 3 circuits (app, kernel, app), we have 2 proofs in the queue
108 if (idx == 2) {
109 EXPECT_EQ(ivc.verification_queue.size(), 2);
110
111 auto& app_entry = ivc.verification_queue[1];
112 ASSERT_FALSE(app_entry.is_kernel) << "Expected second queue entry to be an app";
113
115 size_t num_public_inputs = app_entry.honk_vk->num_public_inputs;
116 AppIOSerde app_io = AppIOSerde::from_proof(app_entry.proof, num_public_inputs);
117
118 // Double the pairing points (multiply by 2) - creates valid but different points
119 app_io.pairing_inputs.P0() = app_io.pairing_inputs.P0() + app_io.pairing_inputs.P0();
120 app_io.pairing_inputs.P1() = app_io.pairing_inputs.P1() + app_io.pairing_inputs.P1();
121
122 EXPECT_TRUE(app_io.pairing_inputs.check());
123
124 app_io.to_proof(app_entry.proof, num_public_inputs);
125 }
126 }
127
128 auto proof = ivc.prove();
129 EXPECT_FALSE(verify_chonk(proof, ivc.get_hiding_kernel_vk_and_hash()));
130 }
131
137 static void test_kernel_io_tampering(KernelIOField field_to_tamper)
138 {
140
141 const size_t NUM_APP_CIRCUITS = 2;
142 CircuitProducer circuit_producer(NUM_APP_CIRCUITS);
143 const size_t NUM_CIRCUITS = circuit_producer.total_num_circuits;
144 Chonk ivc{ NUM_CIRCUITS };
145 TestSettings settings{ .log2_num_gates = SMALL_LOG_2_NUM_GATES };
146
147 for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) {
148 auto [circuit, vk] = circuit_producer.create_next_circuit_and_vk(ivc, settings);
149 ivc.accumulate(circuit, vk);
150
151 // After accumulating 3 circuits (app, kernel, app), we have 2 proofs in the queue
152 if (idx == 2) {
153 EXPECT_EQ(ivc.verification_queue.size(), 2);
154
155 auto& kernel_entry = ivc.verification_queue[0];
156 ASSERT_TRUE(kernel_entry.is_kernel) << "Expected first queue entry to be a kernel";
157
158 using KernelIOSerde = bb::stdlib::recursion::honk::KernelIOSerde;
159 size_t num_public_inputs = kernel_entry.honk_vk->num_public_inputs;
160 KernelIOSerde kernel_io = KernelIOSerde::from_proof(kernel_entry.proof, num_public_inputs);
161
162 // Tamper with the specified field
163 switch (field_to_tamper) {
165 // Replace with valid pairing points at infinity (different from actual accumulated values)
166 kernel_io.pairing_inputs.P0() = Commitment::infinity();
167 kernel_io.pairing_inputs.P1() = Commitment::infinity();
168 EXPECT_TRUE(kernel_io.pairing_inputs.check());
169 break;
170 }
172 kernel_io.output_hn_accum_hash += FF(1);
173 break;
175 kernel_io.kernel_return_data = kernel_io.kernel_return_data + Commitment::one();
176 break;
178 kernel_io.app_return_data = kernel_io.app_return_data + Commitment::one();
179 break;
181 kernel_io.ecc_op_tables[0] = kernel_io.ecc_op_tables[0] + Commitment::one();
182 break;
183 }
184
185 kernel_io.to_proof(kernel_entry.proof, num_public_inputs);
186 }
187 }
188
189 auto proof = ivc.prove();
190 EXPECT_FALSE(verify_chonk(proof, ivc.get_hiding_kernel_vk_and_hash()));
191 }
192
204 {
205 using HidingKernelIOSerde = bb::stdlib::recursion::honk::HidingKernelIOSerde;
206
207 const size_t NUM_APP_CIRCUITS = 2;
208 CircuitProducer circuit_producer(NUM_APP_CIRCUITS);
209 const size_t NUM_CIRCUITS = circuit_producer.total_num_circuits;
210 Chonk ivc{ NUM_CIRCUITS };
211 TestSettings settings{ .log2_num_gates = SMALL_LOG_2_NUM_GATES };
212
213 // Accumulate all circuits
214 for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) {
215 auto [circuit, vk] = circuit_producer.create_next_circuit_and_vk(ivc, settings);
216 ivc.accumulate(circuit, vk);
217 }
218
219 // Extract field from Tail kernel's proof before prove() generates HidingKernel
220 HidingKernelIOSerde tail_io;
221 for (auto& it : std::ranges::reverse_view(ivc.verification_queue)) {
222 if (it.is_kernel) {
223 size_t num_public_inputs = it.honk_vk->num_public_inputs;
224 ASSERT_EQ(num_public_inputs, HidingKernelIOSerde::PUBLIC_INPUTS_SIZE)
225 << "Tail kernel should use HidingKernelIO format";
226 tail_io = HidingKernelIOSerde::from_proof(it.proof, num_public_inputs);
227 break;
228 }
229 }
230
231 // Generate the final proof (creates HidingKernel)
232 auto proof = ivc.prove();
233 auto vk_and_hash = ivc.get_hiding_kernel_vk_and_hash();
234
235 // Extract field from HidingKernel's proof (final mega_proof)
236 size_t hiding_kernel_pub_inputs = vk_and_hash->vk->num_public_inputs;
237 ASSERT_EQ(hiding_kernel_pub_inputs, HidingKernelIOSerde::PUBLIC_INPUTS_SIZE)
238 << "HidingKernel should use HidingKernelIO format";
239 HidingKernelIOSerde hiding_io = HidingKernelIOSerde::from_proof(proof.mega_proof, hiding_kernel_pub_inputs);
240
241 // Verify field propagated correctly from Tail kernel to HidingKernel
242 switch (field_to_test) {
244 EXPECT_EQ(tail_io.pairing_inputs.P0(), hiding_io.pairing_inputs.P0())
245 << "P0 mismatch: Tail has " << tail_io.pairing_inputs.P0() << " but HidingKernel has "
246 << hiding_io.pairing_inputs.P0();
247 EXPECT_EQ(tail_io.pairing_inputs.P1(), hiding_io.pairing_inputs.P1())
248 << "P1 mismatch: Tail has " << tail_io.pairing_inputs.P1() << " but HidingKernel has "
249 << hiding_io.pairing_inputs.P1();
250 break;
252 EXPECT_EQ(tail_io.kernel_return_data, hiding_io.kernel_return_data)
253 << "kernel_return_data mismatch: Tail has " << tail_io.kernel_return_data << " but HidingKernel has "
254 << hiding_io.kernel_return_data;
255 break;
257 for (size_t i = 0; i < tail_io.ecc_op_tables.size(); ++i) {
258 EXPECT_EQ(tail_io.ecc_op_tables[i], hiding_io.ecc_op_tables[i])
259 << "M_tail[" << i << "] mismatch: Tail has " << tail_io.ecc_op_tables[i] << " but HidingKernel has "
260 << hiding_io.ecc_op_tables[i];
261 }
262 break;
263 }
264 }
265};
266
274TEST_F(ChonkTests, TestCircuitSizes)
275{
276 const size_t NUM_APP_CIRCUITS = 2;
277
278 // Check circuit sizes when no settings are passed
279 {
280 auto [proof, vk] = accumulate_and_prove_ivc(NUM_APP_CIRCUITS, {}, true);
281 EXPECT_TRUE(verify_chonk(proof, vk));
282 }
283
284 // Check circuit sizes when no settings are passed
285 {
286 auto [proof, vk] =
287 accumulate_and_prove_ivc(NUM_APP_CIRCUITS, { .log2_num_gates = SMALL_LOG_2_NUM_GATES }, true);
288 EXPECT_TRUE(verify_chonk(proof, vk));
289 }
290};
291
299{
300 const size_t NUM_APP_CIRCUITS = 2;
301 auto [proof, vk] = accumulate_and_prove_ivc(NUM_APP_CIRCUITS);
302
303 EXPECT_TRUE(verify_chonk(proof, vk));
304};
305
313TEST_F(ChonkTests, BadProofFailure)
314{
315 BB_DISABLE_ASSERTS(); // Disable assert in HN prover
316
317 const size_t NUM_APP_CIRCUITS = 2;
318 // Confirm that the IVC verifies if nothing is tampered with
319 {
320
321 CircuitProducer circuit_producer(NUM_APP_CIRCUITS);
322 const size_t NUM_CIRCUITS = circuit_producer.total_num_circuits;
323 Chonk ivc{ NUM_CIRCUITS };
324 TestSettings settings{ .log2_num_gates = SMALL_LOG_2_NUM_GATES };
325
326 // Construct and accumulate a set of mocked private function execution circuits
327 for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) {
328 circuit_producer.construct_and_accumulate_next_circuit(ivc, settings);
329 }
330 auto proof = ivc.prove();
331 EXPECT_TRUE(verify_chonk(proof, ivc.get_hiding_kernel_vk_and_hash()));
332 }
333
334 // The IVC throws an exception if the FIRST fold proof is tampered with
335 {
336 CircuitProducer circuit_producer(NUM_APP_CIRCUITS);
337 const size_t NUM_CIRCUITS = circuit_producer.total_num_circuits;
338 Chonk ivc{ NUM_CIRCUITS };
339
340 size_t num_public_inputs = 0;
341
342 // Construct and accumulate a set of mocked private function execution circuits
343 for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) {
344 auto [circuit, vk] =
345 circuit_producer.create_next_circuit_and_vk(ivc, { .log2_num_gates = SMALL_LOG_2_NUM_GATES });
346 ivc.accumulate(circuit, vk);
347
348 if (idx == 1) {
349 num_public_inputs = circuit.num_public_inputs();
350 }
351
352 if (idx == 2) {
353 EXPECT_EQ(ivc.verification_queue.size(), 2); // two proofs after 3 calls to accumulation
354 tamper_with_proof(ivc.verification_queue[0].proof,
355 num_public_inputs); // tamper with first proof
356 }
357 }
358 auto proof = ivc.prove();
359 EXPECT_FALSE(verify_chonk(proof, ivc.get_hiding_kernel_vk_and_hash()));
360 }
361
362 // The IVC fails if the SECOND fold proof is tampered with
363 {
364 CircuitProducer circuit_producer(NUM_APP_CIRCUITS);
365 const size_t NUM_CIRCUITS = circuit_producer.total_num_circuits;
366 Chonk ivc{ NUM_CIRCUITS };
367
368 // Construct and accumulate a set of mocked private function execution circuits
369 for (size_t idx = 0; idx < NUM_CIRCUITS; ++idx) {
370 auto [circuit, vk] =
371 circuit_producer.create_next_circuit_and_vk(ivc, { .log2_num_gates = SMALL_LOG_2_NUM_GATES });
372 ivc.accumulate(circuit, vk);
373
374 if (idx == 2) {
375 EXPECT_EQ(ivc.verification_queue.size(), 2); // two proofs after 3 calls to accumulation
376 tamper_with_proof(ivc.verification_queue[1].proof,
377 circuit.num_public_inputs()); // tamper with second proof
378 }
379 }
380 auto proof = ivc.prove();
381 EXPECT_FALSE(verify_chonk(proof, ivc.get_hiding_kernel_vk_and_hash()));
382 }
383};
384
389TEST_F(ChonkTests, VKIndependenceFromNumberOfCircuits)
390{
391 const TestSettings settings{ .log2_num_gates = SMALL_LOG_2_NUM_GATES };
392
393 auto [unused_1, vk_and_hash_1] = accumulate_and_prove_ivc(/*num_app_circuits=*/1, settings);
394 auto [unused_2, vk_and_hash_2] = accumulate_and_prove_ivc(/*num_app_circuits=*/3, settings);
395
396 // Check the equality of the hiding kernel VKeys
397 EXPECT_EQ(*vk_and_hash_1->vk.get(), *vk_and_hash_2->vk.get());
398};
399
404TEST_F(ChonkTests, VKIndependenceFromCircuitSize)
405{
406 // Run IVC for two sets of circuits
407 const size_t NUM_APP_CIRCUITS = 1;
408 const size_t log2_num_gates_small = 5;
409 const size_t log2_num_gates_big = 18;
410
411 const TestSettings settings_1{ .log2_num_gates = log2_num_gates_small };
412 const TestSettings settings_2{ .log2_num_gates = log2_num_gates_big };
413
414 auto [unused_1, vk_and_hash_1] = accumulate_and_prove_ivc(NUM_APP_CIRCUITS, settings_1);
415 auto [unused_2, vk_and_hash_2] = accumulate_and_prove_ivc(NUM_APP_CIRCUITS, settings_2);
416
417 // Check the equality of the hiding kernel VKeys
418 EXPECT_EQ(*vk_and_hash_1->vk.get(), *vk_and_hash_2->vk.get());
419};
420
425HEAVY_TEST(ChonkKernelCapacity, MaxCapacityPassing)
426{
428
429 const size_t NUM_APP_CIRCUITS = 17;
430 auto [proof, vk] = ChonkTests::accumulate_and_prove_ivc(NUM_APP_CIRCUITS);
431
432 bool verified = ChonkTests::verify_chonk(proof, vk);
433 EXPECT_TRUE(verified);
434};
435
440TEST_F(ChonkTests, MsgpackProofFromFileOrBuffer)
441{
442 // Generate an arbitrary valid CICV proof
443 TestSettings settings{ .log2_num_gates = SMALL_LOG_2_NUM_GATES };
444 auto [proof, vk] = accumulate_and_prove_ivc(/*num_app_circuits=*/1, settings);
445
446 { // Serialize/deserialize the proof to/from a file, check that it verifies
447 const std::string filename = "proof.msgpack";
448 proof.to_file_msgpack(filename);
449 auto proof_deserialized = ChonkProof::from_file_msgpack(filename);
450
451 EXPECT_TRUE(verify_chonk(proof_deserialized, vk));
452 }
453
454 { // Serialize/deserialize proof to/from a heap buffer, check that it verifies
455 uint8_t* buffer = proof.to_msgpack_heap_buffer();
456 auto uint8_buffer = from_buffer<std::vector<uint8_t>>(buffer);
457 uint8_t const* uint8_ptr = uint8_buffer.data();
458 auto proof_deserialized = ChonkProof::from_msgpack_buffer(uint8_ptr);
459
460 EXPECT_TRUE(verify_chonk(proof_deserialized, vk));
461 }
462
463 { // Check that attempting to deserialize a proof from a buffer with random bytes fails gracefully
464 msgpack::sbuffer buffer = proof.to_msgpack_buffer();
465 auto proof_deserialized = ChonkProof::from_msgpack_buffer(buffer);
466 EXPECT_TRUE(verify_chonk(proof_deserialized, vk));
467
468 std::vector<uint8_t> random_bytes(buffer.size());
469 std::generate(random_bytes.begin(), random_bytes.end(), []() { return static_cast<uint8_t>(rand() % 256); });
470 std::copy(random_bytes.begin(), random_bytes.end(), buffer.data());
471
472 // Expect deserialization to fail with error msgpack::v1::type_error with description "std::bad_cast"
473 EXPECT_THROW(ChonkProof::from_msgpack_buffer(buffer), msgpack::v1::type_error);
474 }
475};
476
482TEST_F(ChonkTests, KernelPairingInputsTamperingFailure)
483{
484 ChonkTests::test_kernel_io_tampering(KernelIOField::PAIRING_INPUTS);
485}
486
492TEST_F(ChonkTests, AppPairingInputsTamperingFailure)
493{
495}
496
503TEST_F(ChonkTests, AccumulatorHashTamperingFailure)
504{
505 ChonkTests::test_kernel_io_tampering(KernelIOField::ACCUMULATOR_HASH);
506}
507
513TEST_F(ChonkTests, KernelReturnDataTamperingFailure)
514{
515 ChonkTests::test_kernel_io_tampering(KernelIOField::KERNEL_RETURN_DATA);
516}
517
523TEST_F(ChonkTests, AppReturnDataTamperingFailure)
524{
525 ChonkTests::test_kernel_io_tampering(KernelIOField::APP_RETURN_DATA);
526}
527
533TEST_F(ChonkTests, EccOpTablesTamperingFailure)
534{
535 ChonkTests::test_kernel_io_tampering(KernelIOField::ECC_OP_TABLES);
536}
537
544TEST_F(ChonkTests, PairingPointsPropagationConsistency)
545{
546 ChonkTests::test_hiding_kernel_io_propagation(HidingKernelIOField::PAIRING_INPUTS);
547}
548
554TEST_F(ChonkTests, KernelReturnDataPropagationConsistency)
555{
556 ChonkTests::test_hiding_kernel_io_propagation(HidingKernelIOField::KERNEL_RETURN_DATA);
557}
558
564TEST_F(ChonkTests, MTailPropagationConsistency)
565{
566 ChonkTests::test_hiding_kernel_io_propagation(HidingKernelIOField::ECC_OP_TABLES);
567}
568
569TEST_F(ChonkTests, ProofCompressionRoundtrip)
570{
571 TestSettings settings{ .log2_num_gates = SMALL_LOG_2_NUM_GATES };
572 auto [proof, vk_and_hash] = accumulate_and_prove_ivc(/*num_app_circuits=*/1, settings);
573
574 auto original_flat = proof.to_field_elements();
575 info("Original proof size: ", original_flat.size(), " Fr elements (", original_flat.size() * 32, " bytes)");
576
577 auto compressed = ProofCompressor::compress_chonk_proof(proof);
578 double ratio = static_cast<double>(original_flat.size() * 32) / static_cast<double>(compressed.size());
579 info("Compressed proof size: ", compressed.size(), " bytes");
580 info("Compression ratio: ", ratio, "x");
581
582 // Compression should achieve at least 1.5x (commitments 4 Fr → 32 bytes, scalars 1:1)
583 EXPECT_GE(ratio, 1.5) << "Compression ratio " << ratio << "x is below the expected minimum of 1.5x";
584
585 size_t mega_num_pub_inputs = proof.mega_proof.size() - ChonkProof::HIDING_KERNEL_PROOF_LENGTH_WITHOUT_PUBLIC_INPUTS;
586 ChonkProof decompressed = ProofCompressor::decompress_chonk_proof(compressed, mega_num_pub_inputs);
587
588 // Verify element-by-element roundtrip
589 auto decompressed_flat = decompressed.to_field_elements();
590 ASSERT_EQ(decompressed_flat.size(), original_flat.size());
591 for (size_t i = 0; i < original_flat.size(); i++) {
592 ASSERT_EQ(decompressed_flat[i], original_flat[i]) << "Mismatch at element " << i;
593 }
594
595 // Verify the decompressed proof
596 EXPECT_TRUE(verify_chonk(decompressed, vk_and_hash));
597}
#define BB_DISABLE_ASSERTS()
Definition assert.hpp:33
TEST_F(ChonkTests, TestCircuitSizes)
Test sizes of the circuits generated by MockCircuitProducer.
PrivateFunctionExecutionMockCircuitProducer CircuitProducer
static void test_hiding_kernel_io_propagation(HidingKernelIOField field_to_test)
Helper function to test HidingKernelIO field propagation consistency.
static bool verify_chonk(const ChonkProof &proof, const std::shared_ptr< MegaZKFlavor::VKAndHash > &vk_and_hash)
static void tamper_with_proof(HonkProof &proof, size_t public_inputs_offset)
Tamper with a proof.
HidingKernelIOField
Enum for specifying which HidingKernelIO field to test for propagation consistency.
Flavor::Commitment Commitment
static void test_kernel_io_tampering(KernelIOField field_to_tamper)
Helper function to test tampering with KernelIO fields.
static void SetUpTestSuite()
typename Flavor::FF FF
static std::pair< ChonkProof, std::shared_ptr< MegaZKFlavor::VKAndHash > > accumulate_and_prove_ivc(size_t num_app_circuits, TestSettings settings={}, bool check_circuit_sizes=false)
static void test_app_io_tampering()
Helper function to test tampering with AppIO pairing inputs.
KernelIOField
Enum for specifying which KernelIO field to tamper with in tests.
The IVC scheme used by the aztec client for private function execution.
Definition chonk.hpp:38
HypernovaDeciderProver DeciderProver
Definition chonk.hpp:77
ChonkProof prove()
Construct Chonk proof, which, if verified, fully establishes the correctness of RCG.
Definition chonk.cpp:554
ProverInstance_< Flavor > ProverInstance
Definition chonk.hpp:49
MegaFlavor Flavor
Definition chonk.hpp:42
VerifierInstance_< Flavor > VerifierInstance
Definition chonk.hpp:51
void accumulate(ClientCircuit &circuit, const std::shared_ptr< MegaVerificationKey > &precomputed_vk) override
Perform prover work for accumulation (e.g. HN folding, merge proving)
Definition chonk.cpp:391
MegaCircuitBuilder ClientCircuit
Definition chonk.hpp:52
Verifier for Chonk IVC proofs (both native and recursive).
Output verify(const Proof &proof)
Verify a Chonk proof.
HyperNova decider prover. Produces final opening proof for the accumulated claim.
Curve::ScalarField FF
Curve::AffineElement Commitment
NativeVerificationKey_< PrecomputedEntities< Commitment >, Codec, HashFunction, CommitmentKey > VerificationKey
The verification key stores commitments to the precomputed (non-witness) polynomials used by the veri...
Base Native verification key class.
Definition flavor.hpp:135
static std::vector< uint8_t > compress_chonk_proof(const ChonkProof &proof)
static ChonkProof decompress_chonk_proof(const std::vector< uint8_t > &compressed, size_t mega_num_public_inputs)
Contains all the information required by a Honk prover to create a proof, constructed from a finalize...
The VerifierInstance encapsulates all the necessary information for a Honk Verifier to verify a proof...
Native representation and serde for AppIO public inputs.
Native representation and serde for HidingKernelIO public inputs.
For test purposes only: Native representation and serde for KernelIO public inputs
#define info(...)
Definition log.hpp:93
std::unique_ptr< uint8_t[]> buffer
Definition engine.cpp:50
std::filesystem::path bb_crs_path()
void init_file_crs_factory(const std::filesystem::path &path)
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
std::vector< fr > HonkProof
Definition proof.hpp:15
::testing::Types< BN254Settings, GrumpkinSettings > TestSettings
ChonkVerifier< false > ChonkNativeVerifier
VerifierCommitmentKey< Curve > vk
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
static ChonkProof_ from_msgpack_buffer(uint8_t const *&buffer)
static constexpr size_t HIDING_KERNEL_PROOF_LENGTH_WITHOUT_PUBLIC_INPUTS
std::vector< FF > to_field_elements() const
Serialize proof to field elements (native mode)
static ChonkProof_ from_file_msgpack(const std::string &filename)
#define HEAVY_TEST(x, y)
Definition test.hpp:9