5#include <gtest/gtest.h>
23 size_t start_idx = selector.start_index();
24 size_t end_idx = selector.end_index();
27 for (
size_t idx = start_idx; idx < end_idx; idx++) {
28 if (selector.at(idx) == 1) {
37 size_t start_idx = selector.start_index();
38 size_t end_idx = selector.end_index();
40 size_t selector_enabled_idx{ 0 };
42 for (
size_t idx = start_idx; idx < end_idx; idx++) {
43 if (selector.at(idx) == 1) {
44 selector_enabled_idx = idx;
49 witness.at(selector_enabled_idx) += 1;
53 size_t start_idx = selector.start_index();
54 size_t end_idx = selector.end_index();
56 size_t selector_enabled_idx{ 0 };
58 for (
size_t idx = start_idx; idx < end_idx; idx++) {
59 if (selector.at(idx) == 1) {
60 selector_enabled_idx = idx;
64 const size_t round_size = external ? 4 : 56;
65 size_t shift_idx = selector_enabled_idx + round_size;
67 EXPECT_EQ(selector.at(shift_idx), 0);
70 witness.at(shift_idx) += 1;
87 for (
auto& alpha : subrelation_separators) {
91 std::vector<FF> gate_challenges(virtual_log_n);
94 for (
auto& beta : gate_challenges) {
100 for (
auto& rel_param : relation_parameters.
get_to_fold()) {
106 prover_instance->polynomials,
108 subrelation_separators,
112 auto proof = sumcheck_prover.
prove();
115 verifier_transcript->load_proof(prover_transcript->export_proof());
117 SumcheckVerifier verifier(verifier_transcript, subrelation_separators, virtual_log_n);
118 auto result = verifier.
verify(relation_parameters, gate_challenges, std::vector<FF>(virtual_log_n, 1));
134 modify_selector(prover_instance->polynomials.q_poseidon2_external);
137 prove_and_verify(prover_instance,
false);
141 modify_selector(prover_instance->polynomials.q_poseidon2_internal);
144 prove_and_verify(prover_instance,
false);
156 modify_witness(prover_instance->polynomials.q_poseidon2_external, prover_instance->polynomials.w_l);
157 prove_and_verify(prover_instance,
false);
160 modify_witness(prover_instance->polynomials.q_poseidon2_internal, prover_instance->polynomials.w_r);
161 prove_and_verify(prover_instance,
false);
173 bool external_round =
true;
175 prover_instance->polynomials.q_poseidon2_external, prover_instance->polynomials.w_l, external_round);
176 prove_and_verify(prover_instance,
false);
180 bool external_round =
false;
182 prover_instance->polynomials.q_poseidon2_internal, prover_instance->polynomials.w_l, external_round);
183 prove_and_verify(prover_instance,
false);
void tamper_with_shifts(const auto &selector, auto &witness, bool external)
void modify_witness(const auto &selector, auto &witness)
Flavor::SubrelationSeparators SubrelationSeparators
void prove_and_verify(const std::shared_ptr< ProverInstance > &prover_instance, bool expected_result)
void hash_single_input(Builder &builder)
void modify_selector(auto &selector)
SumcheckVerifier< Flavor > SumcheckVerifier
SumcheckProver< Flavor > SumcheckProver
A ProverInstance is normally constructed from a finalized circuit and it contains all the information...
SumcheckOutput< Flavor > prove()
Non-ZK version: Compute round univariate, place it in transcript, compute challenge,...
SumcheckOutput< Flavor > verify(const bb::RelationParameters< FF > &relation_parameters, std::vector< FF > &gate_challenges, const std::vector< FF > &padding_indicator_array)
Extract round univariate, check sum, generate challenge, compute next target sum.....
Derived class that defines proof structure for Ultra proofs, as well as supporting functions.
std::array< FF, NUM_SUBRELATIONS - 1 > SubrelationSeparators
UltraCircuitBuilder CircuitBuilder
static constexpr size_t VIRTUAL_LOG_N
Transcript_< FrCodec, crypto::Poseidon2< crypto::Poseidon2Bn254ScalarFieldParams > > Transcript
static FF hash(const std::vector< FF > &input)
Hashes a vector of field elements.
void hash(State &state) noexcept
Entry point for Barretenberg command-line interface.
TEST_F(IPATest, ChallengesAreZero)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
RefArray< T, NUM_TO_FOLD > get_to_fold()
static field random_element(numeric::RNG *engine=nullptr) noexcept