7#include "gtest/gtest.h"
21 using Builder = RecursiveFlavor::CircuitBuilder;
67 if (challenge_lhs != challenge_rhs) {
68 info(
"Mismatch in the challenges at index ", idx);
73 info(
"Mismatch in the unshifted commitments");
77 info(
"Mismatch in the shifted commitments");
81 info(
"Mismatch in the unshifted evaluations");
85 info(
"Mismatch in the shifted evaluations");
100 accumulator.
challenge[0] = NativeFF::random_element();
120 instance->polynomials.w_l.at(1) = NativeFF::random_element();
144 auto [folding_proof, folded_accumulator] = folding_prover.
fold(accumulator, incoming_instance);
155 auto [first_sumcheck_native, second_sumcheck_native, folded_verifier_accumulator_native] =
160 auto native_pairing_points = decider_verifier.
verify_proof(folded_verifier_accumulator_native, decider_proof);
161 bool native_verified = native_pairing_points.check();
166 auto stdlib_incoming_instance =
171 auto [first_sumcheck_recursive, second_sumcheck_recursive, folded_verifier_accumulator] =
177 auto recursive_pairing_points =
178 recursive_decider_verifier.
verify_proof(folded_verifier_accumulator, stdlib_proof);
181 auto P0 = recursive_pairing_points.P0.get_value();
182 auto P1 = recursive_pairing_points.P1.get_value();
184 auto recursive_verified = pp.check();
192 EXPECT_EQ(recursive_verified, native_verified);
195 EXPECT_EQ(first_sumcheck_recursive, first_sumcheck_native);
198 EXPECT_EQ(second_sumcheck_recursive, second_sumcheck_native);
204 test_decider(TamperingMode::None);
210 test_decider(TamperingMode::Accumulator);
216 test_decider(TamperingMode::Instance);
221 test_decider(TamperingMode::FoldedAccumulator);
#define BB_DISABLE_ASSERTS()
NativeHypernovaDeciderVerifier::Flavor NativeFlavor
static std::shared_ptr< ProverInstance > generate_new_instance(size_t log_num_gates=4)
static void SetUpTestSuite()
RecursiveHypernovaDeciderVerifier::Proof RecursiveProof
NativeFlavor::VerificationKey NativeVerificationKey
NativeHypernovaVerifier::VerifierInstance NativeVerifierInstance
static void tamper_with_accumulator(NativeProverAccumulator &accumulator, const TamperingMode &mode)
RecursiveHypernovaVerifier::VerifierInstance RecursiveVerifierInstance
RecursiveFlavor::CircuitBuilder Builder
static bool compare_prover_verifier_accumulators(const NativeProverAccumulator &lhs, const NativeVerifierAccumulator &rhs)
NativeFlavor::FF NativeFF
NativeFlavor::CommitmentKey CommitmentKey
static void test_decider(const TamperingMode &mode)
RecursiveHypernovaDeciderVerifier::Flavor RecursiveFlavor
static void tamper_with_instance(std::shared_ptr< ProverInstance > &instance, const TamperingMode &mode)
Common transcript class for both parties. Stores the data for the current round, as well as the manif...
HonkProof construct_proof(const CommitmentKey &ck, Accumulator &accumulator)
HypernovaFoldingVerifier< Flavor >::Accumulator Accumulator
PairingPoints verify_proof(Accumulator &accumulator, const Proof &proof)
std::conditional_t< IsRecursiveFlavor< Flavor >, typename HypernovaRecursiveTypes::Proof, typename HypernovaNativeTypes::Proof > Proof
Flavor::Transcript Transcript
std::conditional_t< IsRecursiveFlavor< Flavor >, typename HypernovaRecursiveTypes::PairingPoints, typename HypernovaNativeTypes::PairingPoints > PairingPoints
MultilinearBatchingProverClaim Accumulator
std::pair< HonkProof, Accumulator > fold(const Accumulator &accumulator, const std::shared_ptr< ProverInstance > &instance)
Fold an instance into an accumulator. Folding happens in place.
ProverInstance_< Flavor > ProverInstance
Accumulator instance_to_accumulator(const std::shared_ptr< ProverInstance > &instance)
Turn an instance into an accumulator by running Sumcheck.
std::tuple< bool, bool, Accumulator > verify_folding_proof(const std::shared_ptr< typename HypernovaFoldingVerifier::VerifierInstance > &instance, const Proof &proof)
Verify folding proof. Return the new accumulator and the results of the two sumchecks.
std::conditional_t< IsRecursiveFlavor< Flavor >, typename HypernovaRecursiveTypes::VerifierInstance, typename HypernovaNativeTypes::VerifierInstance > VerifierInstance
static void add_arithmetic_gates_with_public_inputs(Builder &builder, const size_t num_gates=4)
Add a specified number of arithmetic gates (with public inputs) to the provided circuit.
static void add_lookup_gates(Builder &builder, size_t num_iterations=1)
Add lookup gates using the uint32 XOR lookup table (table size 4096)
static void add_arithmetic_gates(Builder &builder, const size_t num_gates=4)
Add a specified number of arithmetic gates to the provided circuit.
A ProverInstance is normally constructed from a finalized circuit and it contains all the information...
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
std::filesystem::path bb_crs_path()
void init_file_crs_factory(const std::filesystem::path &path)
Entry point for Barretenberg command-line interface.
TEST_F(IPATest, ChallengesAreZero)
CommitmentKey< Curve > ck
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
FF non_shifted_evaluation
std::vector< FF > challenge
Commitment shifted_commitment
Commitment non_shifted_commitment
Commitment non_shifted_commitment
Commitment shifted_commitment
std::vector< FF > challenge
FF non_shifted_evaluation