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__