5 #ifndef __ZETH_CIRCUITS_MIMC_PERMUTATION_HPP__
6 #define __ZETH_CIRCUITS_MIMC_PERMUTATION_HPP__
19 template<
typename FieldT,
size_t Exponent,
size_t NumRounds>
28 static const size_t MaxRounds = 93;
30 NumRounds <= MaxRounds,
"NumRounds must be less than MaxRounds");
36 static std::vector<FieldT> round_constants;
37 static bool round_constants_initialized;
40 std::array<libsnark::pb_variable<FieldT>, NumRounds> round_results;
43 std::vector<RoundT> round_gadgets;
47 libsnark::protoboard<FieldT> &pb,
48 const libsnark::pb_linear_combination<FieldT> &msg,
49 const libsnark::pb_linear_combination<FieldT> &key,
50 const libsnark::pb_variable<FieldT> &result,
51 const libsnark::pb_linear_combination<FieldT> &add_to_result,
52 const bool add_to_result_is_valid,
53 const std::string &annotation_prefix);
57 libsnark::protoboard<FieldT> &pb,
58 const libsnark::pb_linear_combination<FieldT> &msg,
59 const libsnark::pb_linear_combination<FieldT> &key,
60 const libsnark::pb_variable<FieldT> &result,
61 const std::string &annotation_prefix =
"MiMC_permutation_gadget");
64 libsnark::protoboard<FieldT> &pb,
65 const libsnark::pb_linear_combination<FieldT> &msg,
66 const libsnark::pb_linear_combination<FieldT> &key,
67 const libsnark::pb_variable<FieldT> &result,
68 const libsnark::pb_linear_combination<FieldT> &add_to_result,
69 const std::string &annotation_prefix =
"MiMC_permutation_gadget");
82 #endif // __ZETH_CIRCUITS_MIMC_PERMUTATION_HPP__