barretenberg
Loading...
Searching...
No Matches
sha256_plookup.hpp
1#pragma once
2#include "barretenberg/proof_system/plookup_tables/plookup_tables.hpp"
3#include "barretenberg/stdlib/primitives/uint/uint.hpp"
4#include <array>
5
6#include "barretenberg/numeric/bitop/sparse_form.hpp"
7#include "barretenberg/stdlib/primitives/circuit_builders/circuit_builders_fwd.hpp"
8
9#include "../../primitives/field/field.hpp"
10#include "../../primitives/packed_byte_array/packed_byte_array.hpp"
11
12namespace proof_system::plonk {
13namespace stdlib {
14namespace sha256_plookup {
15
16template <typename Builder> struct sparse_ch_value {
17 field_t<Builder> normal;
18 field_t<Builder> sparse;
20 field_t<Builder> rot11;
21 field_t<Builder> rot25;
22};
23
24template <typename Builder> struct sparse_maj_value {
25 field_t<Builder> normal;
26 field_t<Builder> sparse;
28 field_t<Builder> rot13;
29 field_t<Builder> rot22;
30};
31
32template <typename Builder> struct sparse_witness_limbs {
34 {
35 normal = in;
36 has_sparse_limbs = false;
37 }
38 sparse_witness_limbs(const sparse_witness_limbs& other) = default;
40
41 sparse_witness_limbs& operator=(const sparse_witness_limbs& other) = default;
42 sparse_witness_limbs& operator=(sparse_witness_limbs&& other) = default;
43
44 field_t<Builder> normal;
45
46 std::array<field_t<Builder>, 4> sparse_limbs;
47
48 std::array<field_t<Builder>, 4> rotated_limbs;
49
50 bool has_sparse_limbs = false;
51};
52
53template <typename Builder> struct sparse_value {
54 sparse_value(const field_t<Builder>& in = 0)
55 {
56 normal = in;
57 if (normal.witness_index == IS_CONSTANT) {
58 sparse = field_t<Builder>(
59 in.get_context(),
60 barretenberg::fr(numeric::map_into_sparse_form<16>(uint256_t(in.get_value()).data[0])));
61 }
62 }
63
64 sparse_value(const sparse_value& other) = default;
65 sparse_value(sparse_value&& other) = default;
66
67 sparse_value& operator=(const sparse_value& other) = default;
68 sparse_value& operator=(sparse_value&& other) = default;
69
70 field_t<Builder> normal;
71 field_t<Builder> sparse;
72};
73
74template <typename Builder> sparse_witness_limbs<Builder> convert_witness(const field_t<Builder>& w);
75
76template <typename Builder>
77std::array<field_t<Builder>, 64> extend_witness(const std::array<field_t<Builder>, 16>& w_in);
78
79template <typename Builder>
81template <typename Builder>
83
84template <typename Builder>
85std::array<field_t<Builder>, 8> sha256_block(const std::array<field_t<Builder>, 8>& h_init,
86 const std::array<field_t<Builder>, 16>& input);
87
88template <typename Builder> packed_byte_array<Builder> sha256(const packed_byte_array<Builder>& input);
89} // namespace sha256_plookup
90} // namespace stdlib
91} // namespace proof_system::plonk
Definition: uint256.hpp:25
Definition: field.hpp:10
Definition: packed_byte_array.hpp:10
Definition: widget.bench.cpp:13