Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
poseidon2_constraint.cpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: not started, auditors: [], date: YYYY-MM-DD }
3// external_1: { status: not started, auditors: [], date: YYYY-MM-DD }
4// external_2: { status: not started, auditors: [], date: YYYY-MM-DD }
5// =====================
6
13
14namespace acir_format {
15
16using namespace bb;
17
18template <typename Builder>
20{
23
24 BB_ASSERT_EQ(constraint.state.size(), 4U);
25 BB_ASSERT_EQ(constraint.result.size(), 4U);
26
27 // stdlib poseidon2 does not support hashing constants
28 for (const auto& input : constraint.state) {
29 BB_ASSERT(!input.is_constant, "Poseidon2 constraint does not support constant inputs");
30 }
31
32 // Get the witness assignment for each witness index
33 // Write the witness assignment to the byte array state
34 State state;
35 for (size_t i = 0; i < constraint.state.size(); ++i) {
36 state[i] = to_field_ct(constraint.state[i], builder);
37 }
38 State output_state;
40 for (size_t i = 0; i < output_state.size(); ++i) {
41 output_state[i].assert_equal(field_ct::from_witness_index(&builder, constraint.result[i]));
42 }
43}
44
46 const Poseidon2Constraint& constraint);
47
49 const Poseidon2Constraint& constraint);
50} // namespace acir_format
#define BB_ASSERT(expression,...)
Definition assert.hpp:67
#define BB_ASSERT_EQ(actual, expected,...)
Definition assert.hpp:77
std::array< field_t< Builder >, t > State
static State permutation(Builder *builder, const State &input)
Circuit form of Poseidon2 permutation from https://eprint.iacr.org/2023/323.
static field_t from_witness_index(Builder *ctx, uint32_t witness_index)
Definition field.cpp:62
AluTraceBuilder builder
Definition alu.test.cpp:124
template void create_poseidon2_permutations_constraints< MegaCircuitBuilder >(MegaCircuitBuilder &builder, const Poseidon2Constraint &constraint)
template void create_poseidon2_permutations_constraints< UltraCircuitBuilder >(UltraCircuitBuilder &builder, const Poseidon2Constraint &constraint)
void create_poseidon2_permutations_constraints(Builder &builder, const Poseidon2Constraint &constraint)
bb::stdlib::field_t< Builder > to_field_ct(const WitnessOrConstant< typename Builder::FF > &input, Builder &builder)
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
std::vector< WitnessOrConstant< bb::fr > > state