barretenberg
Loading...
Searching...
No Matches
sha256.hpp
1#pragma once
2#include "barretenberg/stdlib/primitives/byte_array/byte_array.hpp"
3#include "barretenberg/stdlib/primitives/circuit_builders/circuit_builders_fwd.hpp"
4#include "barretenberg/stdlib/primitives/packed_byte_array/packed_byte_array.hpp"
5#include "barretenberg/stdlib/primitives/uint/uint.hpp"
6#include "sha256_plookup.hpp"
7#include <array>
8// namespace proof_system::plonk
9
10namespace proof_system::plonk {
11namespace stdlib {
12template <typename Builder> class bit_array;
13
14template <typename Builder>
15std::array<uint32<Builder>, 8> sha256_block(const std::array<uint32<Builder>, 8>& h_init,
16 const std::array<uint32<Builder>, 16>& input);
17
18template <typename Builder> byte_array<Builder> sha256_block(const byte_array<Builder>& input);
19template <typename Builder> packed_byte_array<Builder> sha256(const packed_byte_array<Builder>& input);
20
21template <typename Builder> field_t<Builder> sha256_to_field(const packed_byte_array<Builder>& input)
22{
23 std::vector<field_t<Builder>> slices = stdlib::sha256<Builder>(input).to_unverified_byte_slices(16);
24 return slices[1] + (slices[0] * (uint256_t(1) << 128));
25}
26
27#define SHA256_BLOCK(circuit_type) byte_array<circuit_type> sha256_block(const byte_array<circuit_type>& input)
28#define SHA256(circuit_type) packed_byte_array<circuit_type> sha256(const packed_byte_array<circuit_type>& input)
29
30EXTERN_STDLIB_METHOD(SHA256_BLOCK)
31EXTERN_STDLIB_METHOD(SHA256)
32
33} // namespace stdlib
34} // namespace proof_system::plonk
Definition: uint256.hpp:25
Definition: field.hpp:10
Definition: widget.bench.cpp:13