5 #ifndef __ZETH_CIRCUITS_PRFS_PRF_HPP__ 
    6 #define __ZETH_CIRCUITS_PRFS_PRF_HPP__ 
   14 #include <libsnark/gadgetlib1/gadget.hpp> 
   15 #include <libsnark/gadgetlib1/gadgets/hashes/hash_io.hpp> 
   20 template<
typename FieldT, 
typename HashT>
 
   24     std::shared_ptr<libsnark::digest_variable<FieldT>> result;
 
   25     libsnark::block_variable<FieldT> block;
 
   30         libsnark::protoboard<FieldT> &pb,
 
   31         const libsnark::pb_variable_array<FieldT> &x,
 
   32         const libsnark::pb_variable_array<FieldT> &y,
 
   33         std::shared_ptr<libsnark::digest_variable<FieldT>>
 
   35         const std::string &annotation_prefix = 
"PRF_gadget");
 
   44 template<
typename FieldT, 
typename HashT>
 
   46     const libsnark::pb_variable<FieldT> &ZERO);
 
   48 template<
typename FieldT>
 
   50     const libsnark::pb_variable<FieldT> &ZERO,
 
   51     const libsnark::pb_variable_array<FieldT> &x);
 
   53 template<
typename FieldT>
 
   54 libsnark::pb_variable_array<FieldT> 
get_tag_nf(
 
   55     const libsnark::pb_variable<FieldT> &ZERO,
 
   56     const libsnark::pb_variable_array<FieldT> &a_sk);
 
   58 template<
typename FieldT>
 
   59 libsnark::pb_variable_array<FieldT> 
get_tag_pk(
 
   60     const libsnark::pb_variable<FieldT> &ZERO,
 
   61     const libsnark::pb_variable_array<FieldT> &a_sk,
 
   64 template<
typename FieldT>
 
   66     const libsnark::pb_variable<FieldT> &ZERO,
 
   67     const libsnark::pb_variable_array<FieldT> &phi,
 
   73 template<
typename FieldT, 
typename HashT>
 
   78         libsnark::protoboard<FieldT> &pb,
 
   79         const libsnark::pb_variable<FieldT> &ZERO,
 
   80         const libsnark::pb_variable_array<FieldT> &a_sk,
 
   81         std::shared_ptr<libsnark::digest_variable<FieldT>> result,
 
   82         const std::string &annotation_prefix = 
" add_PRF_gadget");
 
   88 template<
typename FieldT, 
typename HashT>
 
   93         libsnark::protoboard<FieldT> &pb,
 
   94         const libsnark::pb_variable<FieldT> &ZERO,
 
   95         const libsnark::pb_variable_array<FieldT> &a_sk,
 
   96         const libsnark::pb_variable_array<FieldT> &rho,
 
   97         std::shared_ptr<libsnark::digest_variable<FieldT>>
 
   99         const std::string &annotation_prefix = 
"PRF_nf_gadget");
 
  105 template<
typename FieldT, 
typename HashT>
 
  110         libsnark::protoboard<FieldT> &pb,
 
  111         const libsnark::pb_variable<FieldT> &ZERO,
 
  112         const libsnark::pb_variable_array<FieldT> &a_sk,
 
  113         const libsnark::pb_variable_array<FieldT> &h_sig,
 
  115         std::shared_ptr<libsnark::digest_variable<FieldT>> result,
 
  116         const std::string &annotation_prefix = 
" pk_PRF_gadget");
 
  122 template<
typename FieldT, 
typename HashT>
 
  127         libsnark::protoboard<FieldT> &pb,
 
  128         const libsnark::pb_variable<FieldT> &ZERO,
 
  129         const libsnark::pb_variable_array<FieldT> &phi,
 
  130         const libsnark::pb_variable_array<FieldT> &h_sig,
 
  132         std::shared_ptr<libsnark::digest_variable<FieldT>> result,
 
  133         const std::string &annotation_prefix = 
" rho_PRF_gadget");
 
  140 #endif // __ZETH_CIRCUITS_PRFS_PRF_HPP__