54 for (
int i = 31; i >= 0; --i) {
55 out.push_back(
static_cast<uint8_t
>(val.
data[i / 8] >> (8 * (i % 8))));
62 for (
int i = 31; i >= 0; --i) {
63 val.
data[i / 8] |=
static_cast<uint64_t
>(
data[pos++]) << (8 * (i % 8));
88 template <
typename ScalarFn,
typename CommitmentFn>
90 CommitmentFn&& process_commitment,
91 size_t num_public_inputs)
96 for (
size_t i = 0; i < num_public_inputs; i++) {
101 process_commitment();
104 process_commitment();
118 process_commitment();
119 process_commitment();
121 for (
size_t i = 0; i < log_n - 1; i++) {
122 process_commitment();
125 for (
size_t i = 0; i < log_n; i++) {
129 for (
size_t i = 0; i < NUM_SMALL_IPA_EVALUATIONS; i++) {
133 process_commitment();
134 process_commitment();
141 template <
typename ScalarFn,
typename CommitmentFn>
147 for (
size_t i = 0; i < 4; i++) {
148 process_commitment();
151 process_commitment();
153 for (
size_t i = 0; i < 13; i++) {
157 process_commitment();
158 process_commitment();
167 template <
typename ScalarFn,
typename CommitmentFn>
170 constexpr size_t log_n = CONST_ECCVM_LOG_N;
174 for (
size_t i = 0; i < num_witness; i++) {
175 process_commitment();
178 process_commitment();
182 for (
size_t i = 0; i < log_n; i++) {
183 process_commitment();
194 process_commitment();
195 process_commitment();
197 for (
size_t i = 0; i < log_n - 1; i++) {
198 process_commitment();
201 for (
size_t i = 0; i < log_n; i++) {
205 for (
size_t i = 0; i < NUM_SMALL_IPA_EVALUATIONS; i++) {
209 process_commitment();
213 process_commitment();
215 for (
size_t i = 0; i < NUM_TRANSLATION_EVALUATIONS; i++) {
221 process_commitment();
222 process_commitment();
224 for (
size_t i = 0; i < NUM_SMALL_IPA_EVALUATIONS; i++) {
228 process_commitment();
235 template <
typename ScalarFn,
typename CommitmentFn>
236 static void walk_ipa_proof(ScalarFn&& process_scalar, CommitmentFn&& process_commitment)
239 for (
size_t i = 0; i < CONST_ECCVM_LOG_N; i++) {
240 process_commitment();
241 process_commitment();
244 process_commitment();
253 template <
typename ScalarFn,
typename CommitmentFn>
259 process_commitment();
262 process_commitment();
265 process_commitment();
267 process_commitment();
281 process_commitment();
282 process_commitment();
284 for (
size_t i = 0; i < log_n - 1; i++) {
285 process_commitment();
288 for (
size_t i = 0; i < log_n; i++) {
292 for (
size_t i = 0; i < NUM_SMALL_IPA_EVALUATIONS; i++) {
296 process_commitment();
297 process_commitment();
303 template <
typename BN254ScalarFn,
typename BN254CommFn,
typename GrumpkinScalarFn,
typename GrumpkinCommFn>
305 BN254CommFn&& bn254_comm,
306 GrumpkinScalarFn&& grumpkin_scalar,
307 GrumpkinCommFn&& grumpkin_comm,
308 size_t mega_num_public_inputs)
408 auto counter = [&]() { count++; };
409 walk_chonk_proof(counter, counter, counter, counter, mega_num_public_inputs);
420 size_t total_elements = compressed_bytes / 32;
422 BB_ASSERT(total_elements >= fixed_elements);
423 return total_elements - fixed_elements;
433 std::vector<uint8_t> out;
434 out.reserve(flat.size() * 32);
440 auto bn254_comm = [&]() {
441 bool is_infinity = flat[
offset].is_zero() && flat[
offset + 1].is_zero() && flat[
offset + 2].is_zero() &&
442 flat[
offset + 3].is_zero();
462 auto grumpkin_comm = [&]() {
480 auto grumpkin_scalar = [&]() {
486 size_t mega_num_pub_inputs =
488 walk_chonk_proof(bn254_scalar, bn254_comm, grumpkin_scalar, grumpkin_comm, mega_num_pub_inputs);
499 auto bn254_scalar = [&]() { flat.emplace_back(
read_u256(compressed, pos)); };
501 auto bn254_comm = [&]() {
507 for (
int j = 0; j < 4; j++) {
515 auto [is_square, y] = y_squared.
sqrt();
524 flat.emplace_back(x_lo);
525 flat.emplace_back(x_hi);
526 flat.emplace_back(y_lo);
527 flat.emplace_back(y_hi);
531 auto grumpkin_comm = [&]() {
545 auto [is_square, y] = y_squared.
sqrt();
552 flat.emplace_back(x);
553 flat.emplace_back(y);
556 auto grumpkin_scalar = [&]() {
560 flat.emplace_back(lo);
561 flat.emplace_back(hi);
564 walk_chonk_proof(bn254_scalar, bn254_comm, grumpkin_scalar, grumpkin_comm, mega_num_public_inputs);
#define BB_ASSERT(expression,...)
static constexpr size_t NUM_MASKING_POLYNOMIALS
static constexpr size_t NUM_ALL_ENTITIES
static constexpr size_t PROOF_LENGTH
static constexpr size_t NUM_WITNESS_ENTITIES
static constexpr size_t NUM_WITNESS_ENTITIES
static constexpr size_t NUM_ALL_ENTITIES
static constexpr size_t BATCHED_RELATION_PARTIAL_LENGTH
static constexpr size_t VIRTUAL_LOG_N
Compresses Chonk proofs from vector<fr> to compact byte representations.
static void walk_translator_proof(ScalarFn &&process_scalar, CommitmentFn &&process_commitment)
Walk a Translator proof (all BN254).
static constexpr size_t BN254_FRS_PER_COMM
static constexpr size_t EXPECTED_MERGE_FRS
static constexpr uint64_t FQ_SPLIT_BITS
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)
static constexpr size_t EXPECTED_ECCVM_FRS
static size_t compressed_element_count(size_t mega_num_public_inputs=0)
Count the total compressed elements for a Chonk proof. Each element (scalar or commitment,...
static void walk_eccvm_proof(ScalarFn &&process_scalar, CommitmentFn &&process_commitment)
Walk an ECCVM proof (all Grumpkin).
static constexpr size_t EXPECTED_TRANSLATOR_FRS
curve::BN254::ScalarField Fr
static constexpr uint256_t SIGN_BIT_MASK
curve::BN254::BaseField Fq
static constexpr size_t GRUMPKIN_FRS_PER_SCALAR
static void write_u256(std::vector< uint8_t > &out, const uint256_t &val)
static constexpr size_t EXPECTED_MEGA_ZK_FRS
static constexpr size_t EXPECTED_IPA_FRS
static bool y_is_negative(const Field &y)
True if y is in the "upper half" of its field, used for point compression sign bit.
static void walk_merge_proof(ScalarFn &&process_scalar, CommitmentFn &&process_commitment)
Walk a Merge proof (42 Fr, all BN254).
static void walk_mega_zk_proof(ScalarFn &&process_scalar, CommitmentFn &&process_commitment, size_t num_public_inputs)
Walk a MegaZK proof (BN254, ZK sumcheck).
static constexpr size_t GRUMPKIN_FRS_PER_COMM
static size_t compressed_mega_num_public_inputs(size_t compressed_bytes)
Derive mega_num_public_inputs from compressed proof size.
static void walk_chonk_proof(BN254ScalarFn &&bn254_scalar, BN254CommFn &&bn254_comm, GrumpkinScalarFn &&grumpkin_scalar, GrumpkinCommFn &&grumpkin_comm, size_t mega_num_public_inputs)
Walk a full Chonk proof (5 sub-proofs across two curves).
static Fq reconstruct_fq(const Fr &lo, const Fr &hi)
static void walk_ipa_proof(ScalarFn &&process_scalar, CommitmentFn &&process_commitment)
Walk an IPA proof (64 Fr, all Grumpkin).
static uint256_t read_u256(const std::vector< uint8_t > &data, size_t &pos)
static constexpr uint64_t NUM_LIMB_BITS
static std::pair< Fr, Fr > split_fq(const Fq &val)
static constexpr size_t BN254_FRS_PER_SCALAR
static constexpr size_t NUM_SENT_EVALUATIONS
static constexpr size_t CONST_TRANSLATOR_LOG_N
static constexpr size_t PROOF_LENGTH
static constexpr size_t NUM_COMMITMENTS_IN_PROOF
static constexpr size_t BATCHED_RELATION_PARTIAL_LENGTH
const std::vector< MemoryValue > data
Entry point for Barretenberg command-line interface.
std::vector< fr > HonkProof
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static ChonkProof_ from_field_elements(const std::vector< FF > &fields)
Common logic to reconstruct proof from field elements.
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)
constexpr std::pair< bool, field > sqrt() const noexcept
Compute square root of the field element.
BB_INLINE constexpr bool is_zero() const noexcept
static constexpr field zero()
static constexpr bb::fr b