30#include <gtest/gtest.h>
36class Poseidon2QuadInternalSoundnessTests :
public ::testing::Test {
45 static constexpr size_t quad_entry_row = 0;
46 static constexpr size_t quad_first_interior_row = 1;
65TEST_F(Poseidon2QuadInternalSoundnessTests, DoesNotMaterializeUnusedNonTerminalStateLimbs)
68 const size_t initial_num_variables =
builder->get_num_variables();
84 constexpr size_t input_witnesses = 4;
85 constexpr size_t initial_external_output_witnesses = 4;
86 constexpr size_t external_output_witnesses = 8 * 4;
87 constexpr size_t compressed_intermediate_witnesses = 14 * 3;
88 constexpr size_t compressed_next_state_zero_witnesses = 14;
89 constexpr size_t compressed_terminal_standard_limbs = 3;
90 constexpr size_t expected_num_variables = input_witnesses + initial_external_output_witnesses +
91 external_output_witnesses + compressed_intermediate_witnesses +
92 compressed_next_state_zero_witnesses + compressed_terminal_standard_limbs;
94 EXPECT_EQ(
builder->get_num_variables() - initial_num_variables, expected_num_variables);
102TEST_F(Poseidon2QuadInternalSoundnessTests, EntryBoundaryRejectsTamperedIntermediateS0)
107 auto& quad =
builder->blocks.poseidon2_quad_internal;
109 const uint32_t w_r_idx = quad.w_r()[quad_first_interior_row];
119TEST_F(Poseidon2QuadInternalSoundnessTests, EntryBoundaryRejectsTamperedStateOne)
124 auto& quad =
builder->blocks.poseidon2_quad_internal;
125 const uint32_t w_r_idx = quad.w_r()[quad_entry_row];
134TEST_F(Poseidon2QuadInternalSoundnessTests, ExitBoundaryRejectsTamperedStateOne)
139 auto& quad =
builder->blocks.poseidon2_quad_internal;
142 const size_t quad_std_transition_row = quad.size() - 1;
143 const uint32_t state1_idx = quad.w_r()[quad_std_transition_row];
144 builder->set_variable(state1_idx,
builder->get_variable(state1_idx) +
FF(1));
151TEST_F(Poseidon2QuadInternalSoundnessTests, InteriorRelationRejectsTamperedWire)
156 auto& quad =
builder->blocks.poseidon2_quad_internal;
158 const size_t interior_row = quad_first_interior_row + 5;
159 const uint32_t w_o_idx = quad.w_o()[interior_row];
173TEST_F(Poseidon2QuadInternalSoundnessTests, CrossRowVandermondeEncodingMismatchRejected)
178 auto& quad =
builder->blocks.poseidon2_quad_internal;
179 const size_t row_i_plus_1 = quad_first_interior_row + 6;
180 const uint32_t idx = quad.w_o()[row_i_plus_1];
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
Circuit form of Poseidon2 permutation from https://eprint.iacr.org/2023/323.
std::array< field_t< Builder >, t > State
Entry point for Barretenberg command-line interface.
TEST_F(IPATest, ChallengesAreZero)
MegaCircuitBuilder_< field< Bn254FrParams > > MegaCircuitBuilder
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static constexpr field zero()