5 #ifndef __ZETH_CIRCUITS_MIMC_ROUND_HPP__
6 #define __ZETH_CIRCUITS_MIMC_ROUND_HPP__
11 #include <libsnark/gadgetlib1/gadget.hpp>
16 template<
typename FieldT,
size_t Exponent>
20 static_assert((Exponent & 1) == 1,
"MiMC Exponent must be odd");
23 static constexpr
size_t NUM_CONDITIONS =
28 const libsnark::pb_linear_combination<FieldT> msg;
31 const libsnark::pb_linear_combination<FieldT> key;
34 const FieldT round_const;
37 const libsnark::pb_variable<FieldT> result;
40 const libsnark::pb_linear_combination<FieldT> add_to_result;
43 const bool add_to_result_is_valid;
46 std::vector<libsnark::pb_variable<FieldT>> exponents;
53 libsnark::protoboard<FieldT> &pb,
54 const libsnark::pb_linear_combination<FieldT> &msg,
55 const libsnark::pb_linear_combination<FieldT> &key,
56 const FieldT &round_const,
57 libsnark::pb_variable<FieldT> &result,
58 const std::string &annotation_prefix =
"MiMC_round_gadget");
63 libsnark::protoboard<FieldT> &pb,
64 const libsnark::pb_linear_combination<FieldT> &msg,
65 const libsnark::pb_linear_combination<FieldT> &key,
66 const FieldT &round_const,
67 libsnark::pb_variable<FieldT> &result,
68 const libsnark::pb_linear_combination<FieldT> &add_to_result,
69 const std::string &annotation_prefix =
"MiMC_round_gadget");
79 #endif // __ZETH_CIRCUITS_MIMC_ROUND_HPP__