Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor > Class Template Reference

Test suite for recursive verification of Honk proofs for both Ultra and Mega arithmetisation. More...

Inheritance diagram for bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >:

Static Public Member Functions

static void SetUpTestSuite ()
 
static void test_inner_circuit ()
 Create inner circuit and call check_circuit on it.
 
static void test_recursive_verification_key_creation ()
 Instantiate a recursive verification key from the native verification key produced by the inner cicuit builder. Check consistency between the native and stdlib types.
 
static void test_independent_vk_hash ()
 Ensures that the recursive verifier circuit for two inner circuits of different size is the same as the proofs are currently constant. This is done by taking each trace block in part and checking all its selector values.
 
static void test_recursive_verification ()
 Construct a recursive verification circuit for the proof of an inner circuit then call check_circuit on it.
 
static void test_recursive_verification_fails ()
 Construct verifier circuits for proofs whose data have been tampered with. Expect failure.
 
static void test_recursive_verification_fails ()
 Tamper with a MegaZK proof in two ways. First, we modify the first non-zero value in the proof, which has to lead to a CircuitChecker failure. Then we also modify the last commitment ("KZG:W") in the proof, in this case, CircuitChecker succeeds, but the pairing check must fail.
 

Private Types

using InnerFlavor = typename RecursiveFlavor::NativeFlavor
 
using InnerProver = UltraProver_< InnerFlavor >
 
using InnerVerifier = UltraVerifier_< InnerFlavor >
 
using InnerBuilder = typename InnerFlavor::CircuitBuilder
 
using InnerDeciderProvingKey = DeciderProvingKey_< InnerFlavor >
 
using InnerCommitment = InnerFlavor::Commitment
 
using InnerFF = InnerFlavor::FF
 
using InnerIO = std::conditional_t< HasIPAAccumulator< RecursiveFlavor >, bb::stdlib::recursion::honk::RollupIO, bb::stdlib::recursion::honk::DefaultIO< InnerBuilder > >
 
using OuterBuilder = typename RecursiveFlavor::CircuitBuilder
 
using OuterFlavor = std::conditional_t< IsMegaBuilder< OuterBuilder >, MegaFlavor, std::conditional_t< HasIPAAccumulator< RecursiveFlavor >, UltraRollupFlavor, UltraFlavor > >
 
using OuterProver = UltraProver_< OuterFlavor >
 
using OuterVerifier = UltraVerifier_< OuterFlavor >
 
using OuterDeciderProvingKey = DeciderProvingKey_< OuterFlavor >
 
using OuterStdlibProof = bb::stdlib::Proof< OuterBuilder >
 
using OuterIO = std::conditional_t< HasIPAAccumulator< RecursiveFlavor >, bb::stdlib::recursion::honk::RollupIO, bb::stdlib::recursion::honk::DefaultIO< OuterBuilder > >
 
using RecursiveVerifier = UltraRecursiveVerifier_< RecursiveFlavor >
 
using VerificationKey = typename RecursiveVerifier::VerificationKey
 
using PairingObject = PairingPoints< OuterBuilder >
 
using VerifierOutput = bb::stdlib::recursion::honk::UltraRecursiveVerifierOutput< OuterBuilder >
 
using NativeVerifierCommitmentKey = typename InnerFlavor::VerifierCommitmentKey
 

Static Private Member Functions

static InnerBuilder create_inner_circuit (size_t log_num_gates=10)
 Create a non-trivial arbitrary inner circuit, the proof of which will be recursively verified.
 

Detailed Description

template<typename RecursiveFlavor>
class bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >

Test suite for recursive verification of Honk proofs for both Ultra and Mega arithmetisation.

Inner* types describe the type of circuits (and everything else required to generate a proof) that we aim to recursively verify. Outer* describes the arithmetisation of the recursive verifier circuit and the types required to ensure the recursive verifier circuit is correct (i.e. by producing a proof and verifying it).

Template Parameters
RecursiveFlavordefines the recursive verifier, what the arithmetisation of its circuit should be and what types of proofs it recursively verifies.

Definition at line 34 of file ultra_recursive_verifier.test.cpp.

Member Typedef Documentation

◆ InnerBuilder

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::InnerBuilder = typename InnerFlavor::CircuitBuilder
private

Definition at line 40 of file ultra_recursive_verifier.test.cpp.

◆ InnerCommitment

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::InnerCommitment = InnerFlavor::Commitment
private

Definition at line 42 of file ultra_recursive_verifier.test.cpp.

◆ InnerDeciderProvingKey

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::InnerDeciderProvingKey = DeciderProvingKey_<InnerFlavor>
private

Definition at line 41 of file ultra_recursive_verifier.test.cpp.

◆ InnerFF

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::InnerFF = InnerFlavor::FF
private

Definition at line 43 of file ultra_recursive_verifier.test.cpp.

◆ InnerFlavor

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::InnerFlavor = typename RecursiveFlavor::NativeFlavor
private

Definition at line 37 of file ultra_recursive_verifier.test.cpp.

◆ InnerIO

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::InnerIO = std::conditional_t<HasIPAAccumulator<RecursiveFlavor>, bb::stdlib::recursion::honk::RollupIO, bb::stdlib::recursion::honk::DefaultIO<InnerBuilder> >
private

Definition at line 44 of file ultra_recursive_verifier.test.cpp.

◆ InnerProver

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::InnerProver = UltraProver_<InnerFlavor>
private

Definition at line 38 of file ultra_recursive_verifier.test.cpp.

◆ InnerVerifier

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::InnerVerifier = UltraVerifier_<InnerFlavor>
private

Definition at line 39 of file ultra_recursive_verifier.test.cpp.

◆ NativeVerifierCommitmentKey

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::NativeVerifierCommitmentKey = typename InnerFlavor::VerifierCommitmentKey
private

Definition at line 69 of file ultra_recursive_verifier.test.cpp.

◆ OuterBuilder

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::OuterBuilder = typename RecursiveFlavor::CircuitBuilder
private

Definition at line 50 of file ultra_recursive_verifier.test.cpp.

◆ OuterDeciderProvingKey

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::OuterDeciderProvingKey = DeciderProvingKey_<OuterFlavor>
private

Definition at line 57 of file ultra_recursive_verifier.test.cpp.

◆ OuterFlavor

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::OuterFlavor = std::conditional_t<IsMegaBuilder<OuterBuilder>, MegaFlavor, std::conditional_t<HasIPAAccumulator<RecursiveFlavor>, UltraRollupFlavor, UltraFlavor> >
private

Definition at line 51 of file ultra_recursive_verifier.test.cpp.

◆ OuterIO

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::OuterIO = std::conditional_t<HasIPAAccumulator<RecursiveFlavor>, bb::stdlib::recursion::honk::RollupIO, bb::stdlib::recursion::honk::DefaultIO<OuterBuilder> >
private

Definition at line 59 of file ultra_recursive_verifier.test.cpp.

◆ OuterProver

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::OuterProver = UltraProver_<OuterFlavor>
private

Definition at line 55 of file ultra_recursive_verifier.test.cpp.

◆ OuterStdlibProof

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::OuterStdlibProof = bb::stdlib::Proof<OuterBuilder>
private

Definition at line 58 of file ultra_recursive_verifier.test.cpp.

◆ OuterVerifier

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::OuterVerifier = UltraVerifier_<OuterFlavor>
private

Definition at line 56 of file ultra_recursive_verifier.test.cpp.

◆ PairingObject

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::PairingObject = PairingPoints<OuterBuilder>
private

Definition at line 67 of file ultra_recursive_verifier.test.cpp.

◆ RecursiveVerifier

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::RecursiveVerifier = UltraRecursiveVerifier_<RecursiveFlavor>
private

Definition at line 64 of file ultra_recursive_verifier.test.cpp.

◆ VerificationKey

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::VerificationKey = typename RecursiveVerifier::VerificationKey
private

Definition at line 65 of file ultra_recursive_verifier.test.cpp.

◆ VerifierOutput

template<typename RecursiveFlavor >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::VerifierOutput = bb::stdlib::recursion::honk::UltraRecursiveVerifierOutput<OuterBuilder>
private

Definition at line 68 of file ultra_recursive_verifier.test.cpp.

Member Function Documentation

◆ create_inner_circuit()

template<typename RecursiveFlavor >
static InnerBuilder bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::create_inner_circuit ( size_t  log_num_gates = 10)
inlinestaticprivate

Create a non-trivial arbitrary inner circuit, the proof of which will be recursively verified.

Parameters
builder
public_inputs
log_num_gates

Definition at line 77 of file ultra_recursive_verifier.test.cpp.

◆ SetUpTestSuite()

template<typename RecursiveFlavor >
static void bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::SetUpTestSuite ( )
inlinestatic

Definition at line 103 of file ultra_recursive_verifier.test.cpp.

◆ test_independent_vk_hash()

template<typename RecursiveFlavor >
static void bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::test_independent_vk_hash ( )
inlinestatic

Ensures that the recursive verifier circuit for two inner circuits of different size is the same as the proofs are currently constant. This is done by taking each trace block in part and checking all its selector values.

Definition at line 152 of file ultra_recursive_verifier.test.cpp.

◆ test_inner_circuit()

template<typename RecursiveFlavor >
static void bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::test_inner_circuit ( )
inlinestatic

Create inner circuit and call check_circuit on it.

Definition at line 109 of file ultra_recursive_verifier.test.cpp.

◆ test_recursive_verification()

template<typename RecursiveFlavor >
static void bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::test_recursive_verification ( )
inlinestatic

Construct a recursive verification circuit for the proof of an inner circuit then call check_circuit on it.

Definition at line 208 of file ultra_recursive_verifier.test.cpp.

◆ test_recursive_verification_fails() [1/2]

template<typename RecursiveFlavor >
static void bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::test_recursive_verification_fails ( )
inlinestatic

Construct verifier circuits for proofs whose data have been tampered with. Expect failure.

Definition at line 305 of file ultra_recursive_verifier.test.cpp.

◆ test_recursive_verification_fails() [2/2]

template<typename RecursiveFlavor >
static void bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::test_recursive_verification_fails ( )
inlinestatic

Tamper with a MegaZK proof in two ways. First, we modify the first non-zero value in the proof, which has to lead to a CircuitChecker failure. Then we also modify the last commitment ("KZG:W") in the proof, in this case, CircuitChecker succeeds, but the pairing check must fail.

Definition at line 353 of file ultra_recursive_verifier.test.cpp.

◆ test_recursive_verification_key_creation()

template<typename RecursiveFlavor >
static void bb::stdlib::recursion::honk::RecursiveVerifierTest< RecursiveFlavor >::test_recursive_verification_key_creation ( )
inlinestatic

Instantiate a recursive verification key from the native verification key produced by the inner cicuit builder. Check consistency between the native and stdlib types.

Definition at line 123 of file ultra_recursive_verifier.test.cpp.


The documentation for this class was generated from the following file: