5 #ifndef __ZETH_CIRCUITS_BLAKE2S_COMP_HPP__
6 #define __ZETH_CIRCUITS_BLAKE2S_COMP_HPP__
14 #include <libsnark/gadgetlib1/gadget.hpp>
15 #include <libsnark/gadgetlib1/gadgets/basic_gadgets.hpp>
16 #include <libsnark/gadgetlib1/gadgets/hashes/hash_io.hpp>
32 template<
typename FieldT>
38 static const std::array<bits<BLAKE2s_word_size>, 8> BLAKE2s_IV;
42 static const int rounds = 10;
45 std::array<bits<BLAKE2s_word_size>, 2> t;
48 libsnark::digest_variable<FieldT> h;
49 std::array<libsnark::pb_variable_array<FieldT>, 8> h_array;
59 libsnark::block_variable<FieldT> input_block;
62 std::array<libsnark::pb_variable_array<FieldT>, 8> output_bytes;
63 std::array<libsnark::pb_variable_array<FieldT>, 8> out_temp;
67 std::array<std::vector<g_primitive<FieldT>>, rounds> g_arrays;
68 std::vector<xor_gadget<FieldT>> xor_vector;
71 libsnark::digest_variable<FieldT>
output;
74 libsnark::protoboard<FieldT> &pb,
75 const libsnark::digest_variable<FieldT> &h,
76 const libsnark::block_variable<FieldT> &input_block,
77 const libsnark::digest_variable<FieldT> &
output,
78 const std::string &annotation_prefix =
"BLAKE2sCompression_gadget");
88 size_t len_byte_total = 32,
bool is_last_block =
true);
92 static libff::bit_vector
get_hash(
const libff::bit_vector &input);
99 void setup_v(
bool is_last_block);
108 #endif // __ZETH_CIRCUITS_BLAKE2S_COMP_HPP__