Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
hypernova_decider_verifier.cpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: Complete, auditors: [Sergei], commit: }
3// external_1: { status: not started, auditors: [], commit: }
4// external_2: { status: not started, auditors: [], commit: }
5// =====================
6
10
11namespace bb {
12
13template <typename Flavor>
15 Accumulator& accumulator, const HypernovaDeciderVerifier::Proof& proof)
16{
17 using ShpleminiVerifier = bb::ShpleminiVerifier_<Curve, Flavor::HasZK>;
18 using ClaimBatcher = ClaimBatcher_<Curve>;
19 using ClaimBatch = ClaimBatcher::Batch;
20
21 vinfo("HypernovaDeciderVerifier: verifying PCS proof...");
22 transcript->load_proof(proof);
23
24 // Construct generator based on whether we are in-circuit or not
25 Commitment generator;
26 if constexpr (IsRecursiveFlavor<Flavor>) {
27 generator = Commitment::one(accumulator.non_shifted_commitment.get_context());
28 } else {
29 generator = Commitment::one();
30 }
31
32 // Execute Shplemini verifier
33 ClaimBatcher claim_batcher{ .unshifted = ClaimBatch{ RefVector(accumulator.non_shifted_commitment),
34 RefVector(accumulator.non_shifted_evaluation) },
35 .shifted = ClaimBatch{ RefVector(accumulator.shifted_commitment),
36 RefVector(accumulator.shifted_evaluation) } };
37 std::vector<FF> padding_indicator_array(Flavor::VIRTUAL_LOG_N, 1);
38 auto opening_claim = ShpleminiVerifier::compute_batch_opening_claim(
39 padding_indicator_array, claim_batcher, accumulator.challenge, generator, transcript)
40 .batch_opening_claim;
41
42 if constexpr (IsRecursiveFlavor<Flavor>) {
43 PairingPoints pairing_points(PCS::reduce_verify_batch_opening_claim(std::move(opening_claim), transcript));
44 return pairing_points;
45 } else {
46 auto pairing_points = PCS::reduce_verify_batch_opening_claim(std::move(opening_claim), transcript);
47 // Native pairing points contain affine elements
48 return { typename Curve::AffineElement(pairing_points[0]), typename Curve::AffineElement(pairing_points[1]) };
49 }
50};
51
54}; // namespace bb
HyperNova decider verifier (native + recursive). Verifies final opening proof.
PairingPoints verify_proof(Accumulator &accumulator, const Proof &proof)
std::conditional_t< Curve::is_stdlib_type, stdlib::recursion::PairingPoints< Curve >, bb::PairingPoints< Curve > > PairingPoints
HypernovaFoldingVerifier< Flavor >::Proof Proof
A template class for a reference vector. Behaves as if std::vector<T&> was possible.
typename Group::affine_element AffineElement
Definition grumpkin.hpp:63
#define vinfo(...)
Definition log.hpp:94
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
Logic to support batching opening claims for unshifted, shifted and interleaved polynomials in Shplem...
Verifier's claim for multilinear batching - contains commitments and evaluation claims.