Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
sha256_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
10#include "round.hpp"
11
12namespace acir_format {
13
14template <typename Builder>
16{
18
20 std::array<field_ct, 8> hash_inputs;
21
22 // Get the witness assignment for each witness index
23 // Note that we do not range-check the inputs, which should be 32 bits,
24 // because of the lookup-tables.
25 size_t i = 0;
26 for (const auto& witness_index_num_bits : constraint.inputs) {
27 inputs[i] = to_field_ct(witness_index_num_bits, builder);
28 ++i;
29 }
30 i = 0;
31 for (const auto& witness_index_num_bits : constraint.hash_values) {
32 hash_inputs[i] = to_field_ct(witness_index_num_bits, builder);
33 ++i;
34 }
35
36 // Compute sha256 compression
37 auto output_bytes = bb::stdlib::SHA256<Builder>::sha256_block(hash_inputs, inputs);
38
39 // Constrain outputs to match expected witness indices
40 for (size_t i = 0; i < 8; ++i) {
41 field_ct result_witness = field_ct::from_witness_index(&builder, constraint.result[i]);
42 output_bytes[i].assert_equal(result_witness);
43 }
44}
45
47 const Sha256Compression& constraint);
49 const Sha256Compression& constraint);
50
51} // namespace acir_format
static std::array< field_ct, 8 > sha256_block(const std::array< field_ct, 8 > &h_init, const std::array< field_ct, 16 > &input)
Apply the SHA-256 compression function to a single 512-bit message block.
Definition sha256.cpp:248
static field_t from_witness_index(Builder *ctx, uint32_t witness_index)
Definition field.cpp:62
AluTraceBuilder builder
Definition alu.test.cpp:124
AvmProvingInputs inputs
template void create_sha256_compression_constraints< bb::MegaCircuitBuilder >(bb::MegaCircuitBuilder &builder, const Sha256Compression &constraint)
void create_sha256_compression_constraints(Builder &builder, const Sha256Compression &constraint)
template void create_sha256_compression_constraints< bb::UltraCircuitBuilder >(bb::UltraCircuitBuilder &builder, const Sha256Compression &constraint)
bb::stdlib::field_t< Builder > to_field_ct(const WitnessOrConstant< typename Builder::FF > &input, Builder &builder)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
std::array< WitnessOrConstant< bb::fr >, 8 > hash_values
std::array< uint32_t, 8 > result
std::array< WitnessOrConstant< bb::fr >, 16 > inputs