15template <
typename Builder>
class StdlibPedersen :
public testing::Test {
47 fr_ct out = pedersen_hash::hash({ left, right });
49 info(
"num gates = ",
builder.get_estimated_num_finalized_gates());
52 EXPECT_EQ(result,
true);
74 fr_ct out_1_with_zero = pedersen_hash::hash({ zero, one });
75 fr_ct out_1_with_r = pedersen_hash::hash({ r, one });
76 fr_ct out_2 = pedersen_hash::hash({ r_minus_one, r_minus_two });
77 fr_ct out_with_zero = pedersen_hash::hash({ out_1_with_zero, out_2 });
78 fr_ct out_with_r = pedersen_hash::hash({ out_1_with_r, out_2 });
80 info(
"num gates = ",
builder.get_estimated_num_finalized_gates());
83 EXPECT_EQ(result,
true);
85 EXPECT_EQ(
bool(out_1_with_zero.
get_value() == out_1_with_r.get_value()),
true);
93 EXPECT_EQ(out_1_with_zero.
get_value(), hash_native_1_with_zero);
94 EXPECT_EQ(out_1_with_r.get_value(), hash_native_1_with_r);
95 EXPECT_EQ(out_2.get_value(), hash_native_2);
96 EXPECT_EQ(out_with_zero.get_value(), hash_native_with_zero);
97 EXPECT_EQ(out_with_r.get_value(), hash_native_with_r);
98 EXPECT_EQ(hash_native_with_zero, hash_native_with_r);
117 for (
size_t i = 0; i < 256; ++i) {
118 left = pedersen_hash::hash({ left, right });
123 info(
"num gates = ",
builder.get_estimated_num_finalized_gates());
126 EXPECT_EQ(result,
true);
131 const size_t num_input_bytes = 351;
135 std::vector<uint8_t> input;
136 input.reserve(num_input_bytes);
137 for (
size_t i = 0; i < num_input_bytes; ++i) {
144 auto result = pedersen_hash::hash_buffer(circuit_input);
146 EXPECT_EQ(result.get_value(), expected);
148 info(
"num gates = ",
builder.get_estimated_num_finalized_gates());
151 EXPECT_EQ(proof_result,
true);
158 for (
size_t i = 0; i < 7; ++i) {
159 std::vector<fr> inputs;
189 for (
auto input : inputs) {
195 fr_ct result = pedersen_hash::hash(witnesses);
199 info(
"num gates = ",
builder.get_estimated_num_finalized_gates());
202 EXPECT_EQ(proof_result,
true);
213 for (
size_t i = 0; i < 8; ++i) {
218 constexpr size_t hash_idx = 10;
220 auto result = pedersen_hash::hash(witness_inputs, hash_idx);
222 EXPECT_EQ(result.get_value(), expected);
229 std::vector<fr> inputs;
232 for (
size_t i = 0; i < 8; ++i) {
242 auto result = pedersen_hash::hash(witness_inputs);
244 EXPECT_EQ(result.get_value(), expected);
259 const size_t num_inputs = 10;
262 std::vector<fr> inputs_native;
264 for (
size_t i = 0; i < num_inputs; ++i) {
266 inputs_native.emplace_back(element);
273 EXPECT_EQ(result.get_value(), expected);
276 EXPECT_EQ(proof_result,
true);
281 TestFixture::test_pedersen();
286 TestFixture::test_pedersen_edge_cases();
291 TestFixture::test_pedersen_large();
296 TestFixture::test_hash_byte_array();
301 TestFixture::test_multi_hash();
306 TestFixture::test_hash_eight();
311 TestFixture::test_hash_constants();
static void test_pedersen_edge_cases()
typename _curve::witness_ct witness_ct
static void test_hash_eight()
static void test_hash_constants()
typename _curve::ScalarField fr_ct
static void test_hash_byte_array()
static void test_pedersen_large()
typename _curve::public_witness_ct public_witness_ct
typename stdlib::pedersen_hash< Builder > pedersen_hash
static void test_multi_hash()
typename _curve::byte_array_ct byte_array_ct
static void test_pedersen()
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
static Fq hash_buffer(const std::vector< uint8_t > &input, GeneratorContext context={})
Given an arbitrary length of bytes, convert them to fields and hash the result using the default gene...
static Fq hash(const std::vector< Fq > &inputs, GeneratorContext context={})
Given a vector of fields, generate a pedersen hash using generators from context.
virtual uint8_t get_random_uint8()=0
bb::fr get_value() const
Given a := *this, compute its value given by a.v * a.mul + a.add.
stdlib class that evaluates in-circuit pedersen hashes, consistent with behavior in crypto::pedersen_...
static field_ct hash(const std::vector< field_ct > &in, GeneratorContext context={})
ECCVMCircuitBuilder Builder
bn254::witness_ct witness_ct
stdlib::field_t< Builder > field_ct
RNG & get_debug_randomness(bool reset, std::uint_fast64_t seed)
Entry point for Barretenberg command-line interface.
TYPED_TEST_SUITE(ShpleminiTest, TestSettings)
field< Bn254FrParams > fr
TYPED_TEST(ShpleminiTest, CorrectnessOfMultivariateClaimBatching)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
testing::Types< bb::UltraCircuitBuilder > CircuitTypes
static constexpr field one()
static constexpr uint256_t modulus
static field random_element(numeric::RNG *engine=nullptr) noexcept
BB_INLINE constexpr field from_montgomery_form() const noexcept
static constexpr field zero()
field_t< CircuitBuilder > ScalarField
byte_array< CircuitBuilder > byte_array_ct
public_witness_t< CircuitBuilder > public_witness_ct
witness_t< CircuitBuilder > witness_ct
#define HEAVY_TYPED_TEST(x, y)