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;
88 std::vector<FF> gate_challenges(virtual_log_n);
91 for (
auto& beta : gate_challenges) {
97 for (
auto& rel_param : relation_parameters.
get_to_fold()) {
103 prover_instance->polynomials,
105 subrelation_separator,
109 auto proof = sumcheck_prover.
prove();
113 SumcheckVerifier verifier(verifier_transcript, subrelation_separator, virtual_log_n);
114 auto result = verifier.
verify(relation_parameters, gate_challenges, std::vector<FF>(virtual_log_n, 1));
130 modify_selector(prover_instance->polynomials.q_poseidon2_external);
133 prove_and_verify(prover_instance,
false);
137 modify_selector(prover_instance->polynomials.q_poseidon2_internal);
140 prove_and_verify(prover_instance,
false);
152 modify_witness(prover_instance->polynomials.q_poseidon2_external, prover_instance->polynomials.w_l);
153 prove_and_verify(prover_instance,
false);
156 modify_witness(prover_instance->polynomials.q_poseidon2_internal, prover_instance->polynomials.w_r);
157 prove_and_verify(prover_instance,
false);
169 bool external_round =
true;
171 prover_instance->polynomials.q_poseidon2_external, prover_instance->polynomials.w_l, external_round);
172 prove_and_verify(prover_instance,
false);
176 bool external_round =
false;
178 prover_instance->polynomials.q_poseidon2_internal, prover_instance->polynomials.w_l, external_round);
179 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)
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, const std::vector< FF > &gate_challenges, const std::vector< FF > &padding_indicator_array)
The Sumcheck verification method. First it extracts round univariate, checks sum (the sumcheck univar...
Derived class that defines proof structure for Ultra proofs, as well as supporting functions.
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