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
12#include <cstddef>
13
14namespace bb::ProofLength {
15
23template <typename Flavor> struct CodecConstants {
24 using Codec = typename Flavor::Codec;
26 using FF = typename Flavor::FF;
27
28 static constexpr size_t num_frs_in_comm = Codec::template calc_num_fields<Commitment>();
29 static constexpr size_t num_frs_in_scalar = Codec::template calc_num_fields<FF>();
30};
31
37template <typename Flavor> struct Oink : CodecConstants<Flavor> {
39
41};
42
48template <typename Flavor> struct Sumcheck : CodecConstants<Flavor> {
51
52 static constexpr size_t LENGTH(size_t log_n)
53 {
54 size_t base_length =
56 /* evaluations */ (Flavor::NUM_ALL_ENTITIES * num_frs_in_scalar);
57
58 if constexpr (Flavor::HasZK) {
59 // Libra adds: concatenation_commitment, grand_sum_commitment, quotient_commitment (3 comms)
60 // + Sum, claimed_evaluation (2 scalars)
61 return base_length + (3 * num_frs_in_comm) + (2 * num_frs_in_scalar);
62 } else {
63 return base_length;
64 }
65 }
66};
67
74template <typename Flavor> struct Shplemini : CodecConstants<Flavor> {
77
78 static constexpr size_t LENGTH(size_t log_n)
79 {
80 size_t base_length =
81 /* Gemini:FOLD_1..FOLD_{log_n-1} */ ((log_n - 1) * num_frs_in_comm) +
82 /* Gemini:a_1..a_{log_n} */ (log_n * num_frs_in_scalar) +
83 /* Shplonk:Q */ num_frs_in_comm +
84 /* KZG:W */ num_frs_in_comm;
85
86 if constexpr (Flavor::HasZK) {
87 // ZK adds: Libra evaluations (concatenation, shifted_grand_sum, grand_sum, quotient)
88 return base_length + (NUM_SMALL_IPA_EVALUATIONS * num_frs_in_scalar);
89 } else {
90 return base_length;
91 }
92 }
93};
94
100template <typename Flavor> struct Honk {
101 static constexpr size_t LENGTH_WITHOUT_PUB_INPUTS(size_t log_n)
102 {
105 }
106
112 static constexpr size_t derive_num_public_inputs(size_t proof_size, size_t log_n)
113 {
114 return proof_size - LENGTH_WITHOUT_PUB_INPUTS(log_n);
115 }
116
122 template <typename IO> static constexpr size_t expected_proof_size(size_t log_n)
123 {
124 size_t size = IO::PUBLIC_INPUTS_SIZE + LENGTH_WITHOUT_PUB_INPUTS(log_n);
125 if constexpr (IO::HasIPA) {
126 size += IPA_PROOF_LENGTH;
127 }
128 return size;
129 }
130};
131
138template <typename Flavor> struct HypernovaInstanceToAccum {
139 static constexpr size_t LENGTH_WITHOUT_PUB_INPUTS(size_t log_n)
140 {
142 }
143
144 static constexpr size_t derive_num_public_inputs(size_t proof_size, size_t log_n)
145 {
146 return proof_size - LENGTH_WITHOUT_PUB_INPUTS(log_n);
147 }
148};
149
156template <typename Flavor> struct MultilinearBatching : CodecConstants<Flavor> {
159
160 static constexpr size_t LENGTH =
161 /* accumulator commitments (non_shifted + shifted) */ (Flavor::NUM_ACCUMULATOR_COMMITMENTS * num_frs_in_comm) +
162 /* multivariate challenges */ (Flavor::VIRTUAL_LOG_N * num_frs_in_scalar) +
163 /* accumulator evaluations (non_shifted + shifted) */
164 (Flavor::NUM_ACCUMULATOR_EVALUATIONS * num_frs_in_scalar) + Sumcheck<Flavor>::LENGTH(Flavor::VIRTUAL_LOG_N);
165};
166
175template <typename Flavor, typename BatchingFlavor> struct HypernovaFolding {
181
182 static constexpr size_t derive_num_public_inputs(size_t proof_size, size_t log_n)
183 {
184 return proof_size - LENGTH_WITHOUT_PUB_INPUTS(log_n);
185 }
186};
187
188} // namespace bb::ProofLength
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.
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 constexpr 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 folding proof layout.
static constexpr size_t LENGTH_WITHOUT_PUB_INPUTS(size_t log_n)
static constexpr size_t derive_num_public_inputs(size_t proof_size, size_t log_n)
Hypernova instance-to-accumulator proof layout.
static constexpr 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)