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
12
13namespace acir_format {
14
15using namespace bb;
16
17template <typename Builder> void create_poseidon2_permutations(Builder& builder, const Poseidon2Constraint& constraint)
18{
20 using Poseidon2Params = crypto::Poseidon2Bn254ScalarFieldParams;
22
23 BB_ASSERT_EQ(constraint.state.size(), constraint.len);
24 BB_ASSERT_EQ(constraint.result.size(), constraint.len);
25 // Get the witness assignment for each witness index
26 // Write the witness assignment to the byte array state
27 State state;
28 for (size_t i = 0; i < constraint.state.size(); ++i) {
29 state[i] = to_field_ct(constraint.state[i], builder);
30 }
31 State output_state;
33 for (size_t i = 0; i < output_state.size(); ++i) {
34 poly_triple assert_equal{
35 .a = output_state[i].normalize().witness_index,
36 .b = constraint.result[i],
37 .c = 0,
38 .q_m = 0,
39 .q_l = 1,
40 .q_r = -1,
41 .q_o = 0,
42 .q_c = 0,
43 };
44 builder.create_poly_gate(assert_equal);
45 }
46}
47
49 const Poseidon2Constraint& constraint);
50
52 const Poseidon2Constraint& constraint);
53} // namespace acir_format
#define BB_ASSERT_EQ(actual, expected,...)
Definition assert.hpp:59
static State permutation(Builder *builder, const State &input)
Circuit form of Poseidon2 permutation from https://eprint.iacr.org/2023/323.
AluTraceBuilder builder
Definition alu.test.cpp:123
template void create_poseidon2_permutations< MegaCircuitBuilder >(MegaCircuitBuilder &builder, const Poseidon2Constraint &constraint)
bb::stdlib::field_t< Builder > to_field_ct(const WitnessOrConstant< FF > &input, Builder &builder)
template void create_poseidon2_permutations< UltraCircuitBuilder >(UltraCircuitBuilder &builder, const Poseidon2Constraint &constraint)
void create_poseidon2_permutations(Builder &builder, const Poseidon2Constraint &constraint)
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
std::vector< WitnessOrConstant< bb::fr > > state