5 #ifndef __ZETH_CIRCUITS_BINARY_OPERATION_HPP__
6 #define __ZETH_CIRCUITS_BINARY_OPERATION_HPP__
12 #include <libsnark/gadgetlib1/gadget.hpp>
13 #include <libsnark/gadgetlib1/gadgets/basic_gadgets.hpp>
21 template<
typename FieldT>
class xor_gadget :
public libsnark::gadget<FieldT>
25 const libsnark::pb_variable_array<FieldT> a;
26 const libsnark::pb_variable_array<FieldT> b;
29 libsnark::pb_variable_array<FieldT>
res;
32 libsnark::protoboard<FieldT> &pb,
33 const libsnark::pb_variable_array<FieldT> &a,
34 const libsnark::pb_variable_array<FieldT> &b,
35 const libsnark::pb_variable_array<FieldT> &
res,
36 const std::string &annotation_prefix =
"xor_gadget");
45 template<
typename FieldT>
49 const libsnark::pb_variable_array<FieldT> a;
50 const libsnark::pb_variable_array<FieldT> b;
51 const std::vector<FieldT> c;
54 libsnark::pb_variable_array<FieldT>
res;
57 libsnark::protoboard<FieldT> &pb,
58 const libsnark::pb_variable_array<FieldT> &a,
59 const libsnark::pb_variable_array<FieldT> &b,
60 const std::vector<FieldT> &c,
61 const libsnark::pb_variable_array<FieldT> &
res,
62 const std::string &annotation_prefix =
"xor_constant_gadget");
71 template<
typename FieldT>
class xor_rot_gadget :
public libsnark::gadget<FieldT>
74 const libsnark::pb_variable_array<FieldT> a;
75 const libsnark::pb_variable_array<FieldT> b;
79 libsnark::pb_variable_array<FieldT>
res;
82 libsnark::protoboard<FieldT> &pb,
83 const libsnark::pb_variable_array<FieldT> &a,
84 const libsnark::pb_variable_array<FieldT> &b,
86 const libsnark::pb_variable_array<FieldT> &
res,
87 const std::string &annotation_prefix =
"xor_rot_gadget");
97 template<
typename FieldT>
101 libsnark::pb_variable_array<FieldT> a;
102 libsnark::pb_variable_array<FieldT> b;
105 libsnark::pb_variable_array<FieldT>
res;
108 libsnark::protoboard<FieldT> &pb,
109 const libsnark::pb_variable_array<FieldT> &a,
110 const libsnark::pb_variable_array<FieldT> &b,
111 const libsnark::pb_variable_array<FieldT> &
res,
112 const std::string &annotation_prefix =
"double_bit32_sum_eq_gadget");
122 #endif // __ZETH_CIRCUITS_BINARY_OPERATION_HPP__