5 #ifndef __ZETH_CIRCUITS_G_PRIMITIVE_HPP__
6 #define __ZETH_CIRCUITS_G_PRIMITIVE_HPP__
12 #include <libsnark/gadgetlib1/gadget.hpp>
13 #include <libsnark/gadgetlib1/gadgets/basic_gadgets.hpp>
20 template<
typename FieldT>
class g_primitive :
public libsnark::gadget<FieldT>
24 static const int rotation_constant_r1 = 16;
25 static const int rotation_constant_r2 = 12;
26 static const int rotation_constant_r3 = 8;
27 static const int rotation_constant_r4 = 7;
29 libsnark::pb_variable_array<FieldT> a1;
30 libsnark::pb_variable_array<FieldT> a1_temp;
31 libsnark::pb_variable_array<FieldT> a2_temp;
32 libsnark::pb_variable_array<FieldT> b1;
33 libsnark::pb_variable_array<FieldT> c1;
34 libsnark::pb_variable_array<FieldT> d1;
36 libsnark::pb_variable_array<FieldT> a2;
37 libsnark::pb_variable_array<FieldT> b2;
38 libsnark::pb_variable_array<FieldT> c2;
39 libsnark::pb_variable_array<FieldT> d2;
41 std::shared_ptr<xor_rot_gadget<FieldT>> d1_xor_gadget;
42 std::shared_ptr<xor_rot_gadget<FieldT>> b1_xor_gadget;
43 std::shared_ptr<xor_rot_gadget<FieldT>> d2_xor_gadget;
44 std::shared_ptr<xor_rot_gadget<FieldT>> b2_xor_gadget;
45 std::shared_ptr<double_bit32_sum_eq_gadget<FieldT>> a1_1_sum_gadget;
46 std::shared_ptr<double_bit32_sum_eq_gadget<FieldT>> a1_2_sum_gadget;
47 std::shared_ptr<double_bit32_sum_eq_gadget<FieldT>> c1_sum_gadget;
48 std::shared_ptr<double_bit32_sum_eq_gadget<FieldT>> a2_1_sum_gadget;
49 std::shared_ptr<double_bit32_sum_eq_gadget<FieldT>> a2_2_sum_gadget;
50 std::shared_ptr<double_bit32_sum_eq_gadget<FieldT>> c2_sum_gadget;
54 libsnark::protoboard<FieldT> &pb,
55 libsnark::pb_variable_array<FieldT> a,
56 libsnark::pb_variable_array<FieldT> b,
57 libsnark::pb_variable_array<FieldT> c,
58 libsnark::pb_variable_array<FieldT> d,
59 libsnark::pb_variable_array<FieldT> x,
60 libsnark::pb_variable_array<FieldT> y,
61 libsnark::pb_variable_array<FieldT> a2,
62 libsnark::pb_variable_array<FieldT> b2,
63 libsnark::pb_variable_array<FieldT> c2,
64 libsnark::pb_variable_array<FieldT> d2,
65 const std::string &annotation_prefix =
"g_primitive_gadget");
75 #endif // __ZETH_CIRCUITS_G_PRIMITIVE_HPP__