Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bb::stdlib::recursion::honk::RecursiveVerifierTest< Params > 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< Params >:

Public Types

enum class  TamperType {
  MODIFY_SUMCHECK_UNIVARIATE , MODIFY_SUMCHECK_EVAL , MODIFY_KZG_WITNESS , MODIFY_LIBRA_EVAL ,
  END
}
 

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 tamper_honk_proof (InnerProver &inner_prover, typename InnerFlavor::Transcript::Proof &inner_proof, TamperType type)
 
static void test_recursive_verification_fails ()
 
static void test_recursive_verification_with_graph_analysis ()
 Test recursive verification with static graph analysis to detect unconstrained variables.
 

Private Types

using RecursiveFlavor = typename Params::RecursiveFlavor
 
using IO = typename Params::IO
 
using InnerFlavor = typename RecursiveFlavor::NativeFlavor
 
using InnerProver = UltraProver_< InnerFlavor >
 
using InnerBuilder = typename InnerFlavor::CircuitBuilder
 
using InnerProverInstance = ProverInstance_< InnerFlavor >
 
using InnerCommitment = InnerFlavor::Commitment
 
using InnerFF = InnerFlavor::FF
 
using InnerProof = std::vector< InnerFF >
 
using NativeIO = std::conditional_t< IO::HasIPA, bb::RollupIO, bb::DefaultIO >
 
using InnerVerifier = bb::UltraVerifier_< InnerFlavor, NativeIO >
 
using InnerIO = std::conditional_t< IO::HasIPA, RollupIO, DefaultIO< InnerBuilder > >
 
using OuterBuilder = typename RecursiveFlavor::CircuitBuilder
 
using OuterFlavor = std::conditional_t< IsMegaBuilder< OuterBuilder >, MegaFlavor, UltraFlavor >
 
using OuterProver = UltraProver_< OuterFlavor >
 
using OuterVerifier = bb::UltraVerifier_< OuterFlavor, NativeIO >
 
using OuterProverInstance = ProverInstance_< OuterFlavor >
 
using OuterStdlibProof = bb::stdlib::Proof< OuterBuilder >
 
using OuterIO = IO
 
using RecursiveVerifier = bb::UltraVerifier_< RecursiveFlavor, IO >
 
using VerificationKey = typename RecursiveVerifier::VerificationKey
 
using PairingObject = PairingPoints< OuterBuilder >
 
using VerifierOutput = bb::stdlib::recursion::honk::UltraRecursiveVerifierOutput< OuterBuilder >
 

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 Params>
class bb::stdlib::recursion::honk::RecursiveVerifierTest< Params >

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
Paramscontains RecursiveFlavor and IO type for the test

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

Member Typedef Documentation

◆ InnerBuilder

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

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

◆ InnerCommitment

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

Definition at line 53 of file honk_recursive_verifier.test.cpp.

◆ InnerFF

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

Definition at line 54 of file honk_recursive_verifier.test.cpp.

◆ InnerFlavor

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

Definition at line 49 of file honk_recursive_verifier.test.cpp.

◆ InnerIO

Definition at line 60 of file honk_recursive_verifier.test.cpp.

◆ InnerProof

template<typename Params >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< Params >::InnerProof = std::vector<InnerFF>
private

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

◆ InnerProver

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

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

◆ InnerProverInstance

template<typename Params >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< Params >::InnerProverInstance = ProverInstance_<InnerFlavor>
private

Definition at line 52 of file honk_recursive_verifier.test.cpp.

◆ InnerVerifier

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

◆ IO

template<typename Params >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< Params >::IO = typename Params::IO
private

Definition at line 46 of file honk_recursive_verifier.test.cpp.

◆ NativeIO

template<typename Params >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< Params >::NativeIO = std::conditional_t<IO::HasIPA, bb::RollupIO, bb::DefaultIO>
private

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

◆ OuterBuilder

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

Definition at line 63 of file honk_recursive_verifier.test.cpp.

◆ OuterFlavor

◆ OuterIO

template<typename Params >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< Params >::OuterIO = IO
private

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

◆ OuterProver

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

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

◆ OuterProverInstance

template<typename Params >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< Params >::OuterProverInstance = ProverInstance_<OuterFlavor>
private

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

◆ OuterStdlibProof

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

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

◆ OuterVerifier

Definition at line 66 of file honk_recursive_verifier.test.cpp.

◆ PairingObject

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

Definition at line 75 of file honk_recursive_verifier.test.cpp.

◆ RecursiveFlavor

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

Definition at line 45 of file honk_recursive_verifier.test.cpp.

◆ RecursiveVerifier

template<typename Params >
using bb::stdlib::recursion::honk::RecursiveVerifierTest< Params >::RecursiveVerifier = bb::UltraVerifier_<RecursiveFlavor, IO>
private

Definition at line 72 of file honk_recursive_verifier.test.cpp.

◆ VerificationKey

◆ VerifierOutput

Member Enumeration Documentation

◆ TamperType

Enumerator
MODIFY_SUMCHECK_UNIVARIATE 
MODIFY_SUMCHECK_EVAL 
MODIFY_KZG_WITNESS 
MODIFY_LIBRA_EVAL 
END 

Definition at line 300 of file honk_recursive_verifier.test.cpp.

Member Function Documentation

◆ create_inner_circuit()

template<typename Params >
static InnerBuilder bb::stdlib::recursion::honk::RecursiveVerifierTest< Params >::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 84 of file honk_recursive_verifier.test.cpp.

◆ SetUpTestSuite()

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

Definition at line 110 of file honk_recursive_verifier.test.cpp.

◆ tamper_honk_proof()

template<typename Params >
static void bb::stdlib::recursion::honk::RecursiveVerifierTest< Params >::tamper_honk_proof ( InnerProver inner_prover,
typename InnerFlavor::Transcript::Proof &  inner_proof,
TamperType  type 
)
inlinestatic

Definition at line 308 of file honk_recursive_verifier.test.cpp.

◆ test_independent_vk_hash()

template<typename Params >
static void bb::stdlib::recursion::honk::RecursiveVerifierTest< Params >::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 162 of file honk_recursive_verifier.test.cpp.

◆ test_inner_circuit()

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

Create inner circuit and call check_circuit on it.

Definition at line 116 of file honk_recursive_verifier.test.cpp.

◆ test_recursive_verification()

template<typename Params >
static void bb::stdlib::recursion::honk::RecursiveVerifierTest< Params >::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 218 of file honk_recursive_verifier.test.cpp.

◆ test_recursive_verification_fails()

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

Definition at line 348 of file honk_recursive_verifier.test.cpp.

◆ test_recursive_verification_key_creation()

template<typename Params >
static void bb::stdlib::recursion::honk::RecursiveVerifierTest< Params >::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 130 of file honk_recursive_verifier.test.cpp.

◆ test_recursive_verification_with_graph_analysis()

template<typename Params >
static void bb::stdlib::recursion::honk::RecursiveVerifierTest< Params >::test_recursive_verification_with_graph_analysis ( )
inlinestatic

Test recursive verification with static graph analysis to detect unconstrained variables.

This test constructs a recursive verification circuit and uses the StaticAnalyzer to verify that all variables are properly constrained, with the expected exception of variables that appear in only one gate (e.g., unused Shplonk powers due to PCS structure).

This test was moved from graph_description_ultra_recursive_verifier.test.cpp to consolidate recursive verifier testing.

Definition at line 398 of file honk_recursive_verifier.test.cpp.


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