Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
sha256_aux.hpp
Go to the documentation of this file.
1 
12 #ifndef SHA256_AUX_HPP_
13 #define SHA256_AUX_HPP_
14 
16 
17 namespace libsnark
18 {
19 
20 template<typename FieldT> class lastbits_gadget : public gadget<FieldT>
21 {
22 public:
24  size_t X_bits;
27 
29  std::shared_ptr<packing_gadget<FieldT>> unpack_bits;
30  std::shared_ptr<packing_gadget<FieldT>> pack_result;
31 
34  const pb_variable<FieldT> &X,
35  const size_t X_bits,
38  const std::string &annotation_prefix);
39 
41  void generate_r1cs_witness();
42 };
43 
44 template<typename FieldT> class XOR3_gadget : public gadget<FieldT>
45 {
46 private:
48 
49 public:
55 
61  const bool assume_C_is_zero,
63  const std::string &annotation_prefix);
64 
66  void generate_r1cs_witness();
67 };
68 
69 /* Page 10 of http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf */
70 template<typename FieldT> class small_sigma_gadget : public gadget<FieldT>
71 {
72 private:
74  pb_variable<FieldT> result;
75 
76 public:
78  std::vector<std::shared_ptr<XOR3_gadget<FieldT>>> compute_bits;
79  std::shared_ptr<packing_gadget<FieldT>> pack_result;
80 
84  const pb_variable<FieldT> &result,
85  const size_t rot1,
86  const size_t rot2,
87  const size_t shift,
88  const std::string &annotation_prefix);
89 
91  void generate_r1cs_witness();
92 };
93 
94 /* Page 10 of http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf */
95 template<typename FieldT> class big_sigma_gadget : public gadget<FieldT>
96 {
97 private:
99  pb_variable<FieldT> result;
100 
101 public:
103  std::vector<std::shared_ptr<XOR3_gadget<FieldT>>> compute_bits;
104  std::shared_ptr<packing_gadget<FieldT>> pack_result;
105 
109  const pb_variable<FieldT> &result,
110  const size_t rot1,
111  const size_t rot2,
112  const size_t rot3,
113  const std::string &annotation_prefix);
114 
116  void generate_r1cs_witness();
117 };
118 
119 /* Page 10 of http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf */
120 template<typename FieldT> class choice_gadget : public gadget<FieldT>
121 {
122 private:
123  pb_variable_array<FieldT> result_bits;
124 
125 public:
130  std::shared_ptr<packing_gadget<FieldT>> pack_result;
131 
138  const std::string &annotation_prefix);
139 
141  void generate_r1cs_witness();
142 };
143 
144 /* Page 10 of http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf */
145 template<typename FieldT> class majority_gadget : public gadget<FieldT>
146 {
147 private:
148  pb_variable_array<FieldT> result_bits;
149  std::shared_ptr<packing_gadget<FieldT>> pack_result;
150 
151 public:
156 
163  const std::string &annotation_prefix);
164 
166  void generate_r1cs_witness();
167 };
168 
169 } // namespace libsnark
170 
172 
173 #endif // SHA256_AUX_HPP_
libsnark::small_sigma_gadget::small_sigma_gadget
small_sigma_gadget(protoboard< FieldT > &pb, const pb_variable_array< FieldT > &W, const pb_variable< FieldT > &result, const size_t rot1, const size_t rot2, const size_t shift, const std::string &annotation_prefix)
libsnark::choice_gadget::choice_gadget
choice_gadget(protoboard< FieldT > &pb, const pb_linear_combination_array< FieldT > &X, const pb_linear_combination_array< FieldT > &Y, const pb_linear_combination_array< FieldT > &Z, const pb_variable< FieldT > &result, const std::string &annotation_prefix)
libsnark::choice_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::lastbits_gadget
Definition: sha256_aux.hpp:20
libsnark::gadget::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark::choice_gadget::X
pb_linear_combination_array< FieldT > X
Definition: sha256_aux.hpp:126
libsnark::XOR3_gadget::assume_C_is_zero
bool assume_C_is_zero
Definition: sha256_aux.hpp:53
libsnark::majority_gadget::X
pb_linear_combination_array< FieldT > X
Definition: sha256_aux.hpp:152
libsnark::small_sigma_gadget::result_bits
pb_variable_array< FieldT > result_bits
Definition: sha256_aux.hpp:77
libsnark::XOR3_gadget
Definition: sha256_aux.hpp:44
libsnark
Definition: accumulation_vector.hpp:18
libsnark::big_sigma_gadget::big_sigma_gadget
big_sigma_gadget(protoboard< FieldT > &pb, const pb_linear_combination_array< FieldT > &W, const pb_variable< FieldT > &result, const size_t rot1, const size_t rot2, const size_t rot3, const std::string &annotation_prefix)
libsnark::small_sigma_gadget
Definition: sha256_aux.hpp:70
libsnark::XOR3_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::small_sigma_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::gadget::pb
protoboard< FieldT > & pb
Definition: gadget.hpp:19
libsnark::choice_gadget::Y
pb_linear_combination_array< FieldT > Y
Definition: sha256_aux.hpp:127
libsnark::big_sigma_gadget
Definition: sha256_aux.hpp:95
libsnark::choice_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::choice_gadget
Definition: sha256_aux.hpp:120
libsnark::small_sigma_gadget::compute_bits
std::vector< std::shared_ptr< XOR3_gadget< FieldT > > > compute_bits
Definition: sha256_aux.hpp:78
libsnark::XOR3_gadget::C
pb_linear_combination< FieldT > C
Definition: sha256_aux.hpp:52
libsnark::choice_gadget::pack_result
std::shared_ptr< packing_gadget< FieldT > > pack_result
Definition: sha256_aux.hpp:130
libsnark::gadget
Definition: gadget.hpp:16
libsnark::lastbits_gadget::unpack_bits
std::shared_ptr< packing_gadget< FieldT > > unpack_bits
Definition: sha256_aux.hpp:29
libsnark::lastbits_gadget::pack_result
std::shared_ptr< packing_gadget< FieldT > > pack_result
Definition: sha256_aux.hpp:30
libsnark::lastbits_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::majority_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::XOR3_gadget::out
pb_linear_combination< FieldT > out
Definition: sha256_aux.hpp:54
libsnark::majority_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::big_sigma_gadget::pack_result
std::shared_ptr< packing_gadget< FieldT > > pack_result
Definition: sha256_aux.hpp:104
libsnark::majority_gadget::Z
pb_linear_combination_array< FieldT > Z
Definition: sha256_aux.hpp:154
libsnark::small_sigma_gadget::pack_result
std::shared_ptr< packing_gadget< FieldT > > pack_result
Definition: sha256_aux.hpp:79
libsnark::big_sigma_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::pb_linear_combination_array
Definition: pb_variable.hpp:118
libsnark::XOR3_gadget::XOR3_gadget
XOR3_gadget(protoboard< FieldT > &pb, const pb_linear_combination< FieldT > &A, const pb_linear_combination< FieldT > &B, const pb_linear_combination< FieldT > &C, const bool assume_C_is_zero, const pb_linear_combination< FieldT > &out, const std::string &annotation_prefix)
libsnark::lastbits_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::pb_linear_combination
Definition: pb_variable.hpp:101
libsnark::lastbits_gadget::X
pb_variable< FieldT > X
Definition: sha256_aux.hpp:23
libsnark::big_sigma_gadget::compute_bits
std::vector< std::shared_ptr< XOR3_gadget< FieldT > > > compute_bits
Definition: sha256_aux.hpp:103
libsnark::pb_variable
Definition: pb_variable.hpp:24
libsnark::lastbits_gadget::result_bits
pb_linear_combination_array< FieldT > result_bits
Definition: sha256_aux.hpp:26
basic_gadgets.hpp
libsnark::pb_variable_array
Definition: pb_variable.hpp:44
libsnark::lastbits_gadget::lastbits_gadget
lastbits_gadget(protoboard< FieldT > &pb, const pb_variable< FieldT > &X, const size_t X_bits, const pb_variable< FieldT > &result, const pb_linear_combination_array< FieldT > &result_bits, const std::string &annotation_prefix)
libsnark::XOR3_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::choice_gadget::result
pb_variable< FieldT > result
Definition: sha256_aux.hpp:129
libsnark::XOR3_gadget::A
pb_linear_combination< FieldT > A
Definition: sha256_aux.hpp:50
libsnark::majority_gadget::majority_gadget
majority_gadget(protoboard< FieldT > &pb, const pb_linear_combination_array< FieldT > &X, const pb_linear_combination_array< FieldT > &Y, const pb_linear_combination_array< FieldT > &Z, const pb_variable< FieldT > &result, const std::string &annotation_prefix)
libsnark::majority_gadget::Y
pb_linear_combination_array< FieldT > Y
Definition: sha256_aux.hpp:153
libsnark::lastbits_gadget::full_bits
pb_linear_combination_array< FieldT > full_bits
Definition: sha256_aux.hpp:28
libsnark::XOR3_gadget::B
pb_linear_combination< FieldT > B
Definition: sha256_aux.hpp:51
sha256_aux.tcc
libsnark::big_sigma_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::choice_gadget::Z
pb_linear_combination_array< FieldT > Z
Definition: sha256_aux.hpp:128
libsnark::majority_gadget
Definition: sha256_aux.hpp:145
libsnark::majority_gadget::result
pb_variable< FieldT > result
Definition: sha256_aux.hpp:155
libsnark::big_sigma_gadget::result_bits
pb_variable_array< FieldT > result_bits
Definition: sha256_aux.hpp:102
libsnark::small_sigma_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::lastbits_gadget::result
pb_variable< FieldT > result
Definition: sha256_aux.hpp:25
libsnark::lastbits_gadget::X_bits
size_t X_bits
Definition: sha256_aux.hpp:24
libsnark::protoboard
Definition: pb_variable.hpp:22