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__