Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
poseidon2.test.cpp
Go to the documentation of this file.
1#include "poseidon2.hpp"
7
8using namespace bb;
9namespace {
11}
12
13template <typename Builder> class StdlibPoseidon2 : public testing::Test {
15
17 using fr_ct = typename _curve::ScalarField;
22
23 public:
29 static void test_hash(size_t num_inputs)
30 {
33 auto builder = Builder();
34
36 std::vector<fr> inputs_native;
37
38 for (size_t i = 0; i < num_inputs; ++i) {
39 const auto element = fr::random_element(&engine);
40 inputs_native.emplace_back(element);
41 inputs.emplace_back(field_ct(witness_ct(&builder, element)));
42 }
43
44 auto result = stdlib::poseidon2<Builder>::hash(builder, inputs);
46
47 EXPECT_EQ(result.get_value(), expected);
48
49 bool proof_result = CircuitChecker::check(builder);
50 EXPECT_EQ(proof_result, true);
51 }
52
58 static void test_hash_repeated_pairs(size_t num_inputs)
59 {
61
62 fr left_in = fr::random_element();
63 fr right_in = fr::random_element();
64
65 fr_ct left = witness_ct(&builder, left_in);
66 fr_ct right = witness_ct(&builder, right_in);
67
68 // num_inputs - 1 iterations since the first hash hashes two elements
69 for (size_t i = 0; i < num_inputs - 1; ++i) {
70 left = poseidon2::hash(builder, { left, right });
71 }
72
73 builder.set_public_input(left.witness_index);
74
75 info("num gates = ", builder.get_estimated_num_finalized_gates());
76
77 bool result = CircuitChecker::check(builder);
78 EXPECT_EQ(result, true);
79 }
80
81 static void test_hash_zeros(size_t num_inputs)
82 {
84
85 std::vector<fr> inputs;
86 inputs.reserve(num_inputs);
88
89 for (size_t i = 0; i < num_inputs; ++i) {
90 inputs.emplace_back(0);
91 witness_inputs.emplace_back(witness_ct(&builder, inputs[i]));
92 }
93
94 fr expected = native_poseidon2::hash(inputs);
95 auto result = poseidon2::hash(builder, witness_inputs);
96
97 EXPECT_EQ(result.get_value(), expected);
98 }
99
101 {
103
104 std::vector<fr> inputs;
106
107 for (size_t i = 0; i < 8; ++i) {
108 inputs.push_back(bb::fr::random_element());
109 if (i % 2 == 1) {
110 witness_inputs.push_back(witness_ct(&builder, inputs[i]));
111 } else {
112 witness_inputs.push_back(fr_ct(&builder, inputs[i]));
113 }
114 }
115
118 ".*Sponge inputs should not be stdlib constants.*");
119 }
120};
121
122using CircuitTypes = testing::Types<bb::MegaCircuitBuilder, bb::UltraCircuitBuilder>;
123
125
127{
128 TestFixture::test_hash_zeros(8);
129};
130
132{
133 TestFixture::test_hash(10);
134}
135
137{
138 TestFixture::test_hash(1000);
139}
140
141TYPED_TEST(StdlibPoseidon2, TestHashRepeatedPairs)
142{
143 TestFixture::test_hash_repeated_pairs(256);
144}
145
146TYPED_TEST(StdlibPoseidon2, TestHashConstants)
147{
148 TestFixture::test_hash_constants();
149};
#define EXPECT_THROW_OR_ABORT(statement, matcher)
Definition assert.hpp:150
static void test_hash_constants()
static void test_hash_zeros(size_t num_inputs)
static void test_hash_repeated_pairs(size_t num_inputs)
Call poseidon2 on two inputs repeatedly.
typename _curve::ScalarField fr_ct
typename _curve::public_witness_ct public_witness_ct
typename _curve::witness_ct witness_ct
typename stdlib::poseidon2< Builder > poseidon2
static void test_hash(size_t num_inputs)
Call poseidon2 on a vector of inputs.
typename _curve::byte_array_ct byte_array_ct
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
static FF hash(const std::vector< FF > &input)
Hashes a vector of field elements.
uint32_t witness_index
Definition field.hpp:132
stdlib class that evaluates in-circuit poseidon2 hashes, consistent with behavior in crypto::poseidon...
Definition poseidon2.hpp:23
void info(Args... args)
Definition log.hpp:70
AluTraceBuilder builder
Definition alu.test.cpp:123
ECCVMCircuitBuilder Builder
numeric::RNG & engine
stdlib::field_t< Builder > field_ct
RNG & get_debug_randomness(bool reset, std::uint_fast64_t seed)
Definition engine.cpp:190
Entry point for Barretenberg command-line interface.
TYPED_TEST_SUITE(ShpleminiTest, TestSettings)
TYPED_TEST(ShpleminiTest, CorrectnessOfMultivariateClaimBatching)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
testing::Types< bb::UltraCircuitBuilder > CircuitTypes
static field random_element(numeric::RNG *engine=nullptr) noexcept
field_t< CircuitBuilder > ScalarField
Definition bn254.hpp:33
byte_array< CircuitBuilder > byte_array_ct
Definition bn254.hpp:43
public_witness_t< CircuitBuilder > public_witness_ct
Definition bn254.hpp:42
witness_t< CircuitBuilder > witness_ct
Definition bn254.hpp:41