Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
proof_length.hpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: Planned, auditors: [], commit: }
3// external_1: { status: not started, auditors: [], commit: }
4// external_2: { status: not started, auditors: [], commit: }
5// =====================
6
7#pragma once
8
13#include <cstddef>
14
15namespace bb::ProofLength {
16
24template <typename Flavor> struct CodecConstants {
25 using Codec = typename Flavor::Codec;
27 using FF = typename Flavor::FF;
28
29 static constexpr size_t num_frs_in_comm = Codec::template calc_num_fields<Commitment>();
30 static constexpr size_t num_frs_in_scalar = Codec::template calc_num_fields<FF>();
31};
32
38template <typename Flavor> struct Oink : CodecConstants<Flavor> {
40
42};
43
49template <typename Flavor> struct Sumcheck : CodecConstants<Flavor> {
52
53 static constexpr size_t LENGTH(size_t log_n)
54 {
55 size_t base_length =
57 /* evaluations */ (Flavor::NUM_ALL_ENTITIES * num_frs_in_scalar);
58
59 if constexpr (Flavor::HasZK) {
60 // Libra adds: concatenation_commitment, grand_sum_commitment, quotient_commitment (3 comms)
61 // + Sum, claimed_evaluation (2 scalars)
62 return base_length + (3 * num_frs_in_comm) + (2 * num_frs_in_scalar);
63 } else {
64 return base_length;
65 }
66 }
67};
68
75template <typename Flavor> struct Shplemini : CodecConstants<Flavor> {
78
79 static constexpr size_t LENGTH(size_t log_n)
80 {
81 size_t base_length =
82 /* Gemini:FOLD_1..FOLD_{log_n-1} */ ((log_n - 1) * num_frs_in_comm) +
83 /* Gemini:a_1..a_{log_n} */ (log_n * num_frs_in_scalar) +
84 /* Shplonk:Q */ num_frs_in_comm +
85 /* KZG:W */ num_frs_in_comm;
86
87 if constexpr (Flavor::HasZK) {
88 // ZK adds: Libra evaluations (concatenation, shifted_grand_sum, grand_sum, quotient).
90 } else {
91 return base_length;
92 }
93 }
94};
95
101template <typename Flavor> struct Honk {
102 static constexpr size_t LENGTH_WITHOUT_PUB_INPUTS(size_t log_n)
103 {
106 }
107
113 static size_t derive_num_public_inputs(size_t proof_size, size_t log_n)
114 {
115 const size_t overhead = LENGTH_WITHOUT_PUB_INPUTS(log_n);
116 BB_ASSERT_GTE(proof_size, overhead, "Honk proof too short to derive num_public_inputs");
117 return proof_size - overhead;
118 }
119
125 template <typename IO> static constexpr size_t expected_proof_size(size_t log_n)
126 {
127 size_t size = IO::PUBLIC_INPUTS_SIZE + LENGTH_WITHOUT_PUB_INPUTS(log_n);
128 if constexpr (IO::HasIPA) {
129 size += IPA_PROOF_LENGTH;
130 }
131 return size;
132 }
133};
134
141template <typename Flavor> struct HypernovaInstanceToAccum {
142 static constexpr size_t LENGTH_WITHOUT_PUB_INPUTS(size_t log_n)
143 {
145 }
146
147 static size_t derive_num_public_inputs(size_t proof_size, size_t log_n)
148 {
149 const size_t overhead = LENGTH_WITHOUT_PUB_INPUTS(log_n);
150 BB_ASSERT_GTE(proof_size, overhead, "HypernovaInstanceToAccum proof too short to derive num_public_inputs");
151 return proof_size - overhead;
152 }
153};
154
160template <typename Flavor> struct MultilinearBatching : CodecConstants<Flavor> {
163
164 static constexpr size_t LENGTH = Sumcheck<Flavor>::LENGTH(Flavor::VIRTUAL_LOG_N);
165};
166
167} // namespace bb::ProofLength
#define BB_ASSERT_GTE(left, right,...)
Definition assert.hpp:128
static constexpr bool HasZK
typename Curve::ScalarField FF
static constexpr size_t NUM_ALL_ENTITIES
typename G1::affine_element Commitment
static constexpr size_t NUM_WITNESS_ENTITIES
static constexpr size_t BATCHED_RELATION_PARTIAL_LENGTH
Base class templates shared across Honk flavors.
constexpr size_t NUM_SMALL_IPA_TRANSCRIPT_EVALS
Codec constants computed from Flavor types.
typename Flavor::Commitment Commitment
static constexpr size_t num_frs_in_scalar
typename Flavor::Codec Codec
static constexpr size_t num_frs_in_comm
Full Honk proof layout (used by UltraVerifier).
static constexpr size_t LENGTH_WITHOUT_PUB_INPUTS(size_t log_n)
static size_t derive_num_public_inputs(size_t proof_size, size_t log_n)
Derive num_public_inputs from proof size.
static constexpr size_t expected_proof_size(size_t log_n)
Expected proof size for API-level validation (excludes user public inputs).
Hypernova instance-to-accumulator proof layout.
static size_t derive_num_public_inputs(size_t proof_size, size_t log_n)
static constexpr size_t LENGTH_WITHOUT_PUB_INPUTS(size_t log_n)
MultilinearBatching proof layout (used by HyperNova folding).
Computes Oink proof length from flavor traits.
static constexpr size_t LENGTH_WITHOUT_PUB_INPUTS
Computes Shplemini/PCS proof length from flavor traits.
static constexpr size_t LENGTH(size_t log_n)
Computes Sumcheck proof length from flavor traits.
static constexpr size_t LENGTH(size_t log_n)