Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
sha256_components.hpp
Go to the documentation of this file.
1 
13 #ifndef SHA256_COMPONENTS_HPP_
14 #define SHA256_COMPONENTS_HPP_
15 
19 
20 namespace libsnark
21 {
22 
23 const size_t SHA256_digest_size = 256;
24 const size_t SHA256_block_size = 512;
25 
26 template<typename FieldT>
28 
29 template<typename FieldT>
30 class sha256_message_schedule_gadget : public gadget<FieldT>
31 {
32 public:
33  std::vector<pb_variable_array<FieldT>> W_bits;
34  std::vector<std::shared_ptr<packing_gadget<FieldT>>> pack_W;
35 
36  std::vector<pb_variable<FieldT>> sigma0;
37  std::vector<pb_variable<FieldT>> sigma1;
38  std::vector<std::shared_ptr<small_sigma_gadget<FieldT>>> compute_sigma0;
39  std::vector<std::shared_ptr<small_sigma_gadget<FieldT>>> compute_sigma1;
40  std::vector<pb_variable<FieldT>> unreduced_W;
41  std::vector<std::shared_ptr<lastbits_gadget<FieldT>>> mod_reduce_W;
42 
43 public:
50  const std::string &annotation_prefix);
52  void generate_r1cs_witness();
53 };
54 
55 template<typename FieldT>
56 class sha256_round_function_gadget : public gadget<FieldT>
57 {
58 public:
61  std::shared_ptr<big_sigma_gadget<FieldT>> compute_sigma0;
62  std::shared_ptr<big_sigma_gadget<FieldT>> compute_sigma1;
65  std::shared_ptr<choice_gadget<FieldT>> compute_choice;
66  std::shared_ptr<majority_gadget<FieldT>> compute_majority;
68  std::shared_ptr<packing_gadget<FieldT>> pack_d;
70  std::shared_ptr<packing_gadget<FieldT>> pack_h;
73  std::shared_ptr<lastbits_gadget<FieldT>> mod_reduce_new_a;
74  std::shared_ptr<lastbits_gadget<FieldT>> mod_reduce_new_e;
77 
78 public:
88  long K;
91 
102  const pb_variable<FieldT> &W,
103  const long &K,
106  const std::string &annotation_prefix);
107 
109  void generate_r1cs_witness();
110 };
111 
112 } // namespace libsnark
113 
115 
116 #endif // SHA256_COMPONENTS_HPP_
libsnark::sha256_round_function_gadget::sigma1
pb_variable< FieldT > sigma1
Definition: sha256_components.hpp:60
libsnark::sha256_message_schedule_gadget
Definition: sha256_components.hpp:30
libsnark::sha256_round_function_gadget::compute_majority
std::shared_ptr< majority_gadget< FieldT > > compute_majority
Definition: sha256_components.hpp:66
libsnark::sha256_round_function_gadget::compute_sigma1
std::shared_ptr< big_sigma_gadget< FieldT > > compute_sigma1
Definition: sha256_components.hpp:62
libsnark::sha256_message_schedule_gadget::pack_W
std::vector< std::shared_ptr< packing_gadget< FieldT > > > pack_W
Definition: sha256_components.hpp:34
libsnark::gadget::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark::sha256_round_function_gadget::e
pb_linear_combination_array< FieldT > e
Definition: sha256_components.hpp:83
libsnark::sha256_message_schedule_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark
Definition: accumulation_vector.hpp:18
libsnark::sha256_round_function_gadget::sha256_round_function_gadget
sha256_round_function_gadget(protoboard< FieldT > &pb, const pb_linear_combination_array< FieldT > &a, const pb_linear_combination_array< FieldT > &b, const pb_linear_combination_array< FieldT > &c, const pb_linear_combination_array< FieldT > &d, const pb_linear_combination_array< FieldT > &e, const pb_linear_combination_array< FieldT > &f, const pb_linear_combination_array< FieldT > &g, const pb_linear_combination_array< FieldT > &h, const pb_variable< FieldT > &W, const long &K, const pb_linear_combination_array< FieldT > &new_a, const pb_linear_combination_array< FieldT > &new_e, const std::string &annotation_prefix)
libsnark::gadget::pb
protoboard< FieldT > & pb
Definition: gadget.hpp:19
libsnark::sha256_message_schedule_gadget::compute_sigma1
std::vector< std::shared_ptr< small_sigma_gadget< FieldT > > > compute_sigma1
Definition: sha256_components.hpp:39
libsnark::sha256_round_function_gadget::b
pb_linear_combination_array< FieldT > b
Definition: sha256_components.hpp:80
libsnark::sha256_round_function_gadget
Definition: sha256_components.hpp:56
libsnark::sha256_round_function_gadget::compute_choice
std::shared_ptr< choice_gadget< FieldT > > compute_choice
Definition: sha256_components.hpp:65
libsnark::sha256_message_schedule_gadget::mod_reduce_W
std::vector< std::shared_ptr< lastbits_gadget< FieldT > > > mod_reduce_W
Definition: sha256_components.hpp:41
libsnark::sha256_round_function_gadget::packed_h
pb_variable< FieldT > packed_h
Definition: sha256_components.hpp:69
libsnark::gadget
Definition: gadget.hpp:16
libsnark::SHA256_block_size
const size_t SHA256_block_size
Definition: sha256_components.hpp:24
hash_io.hpp
libsnark::sha256_round_function_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::sha256_round_function_gadget::f
pb_linear_combination_array< FieldT > f
Definition: sha256_components.hpp:84
libsnark::sha256_round_function_gadget::a
pb_linear_combination_array< FieldT > a
Definition: sha256_components.hpp:79
libsnark::sha256_round_function_gadget::d
pb_linear_combination_array< FieldT > d
Definition: sha256_components.hpp:82
libsnark::sha256_round_function_gadget::choice
pb_variable< FieldT > choice
Definition: sha256_components.hpp:63
libsnark::sha256_round_function_gadget::majority
pb_variable< FieldT > majority
Definition: sha256_components.hpp:64
libsnark::SHA256_default_IV
pb_linear_combination_array< FieldT > SHA256_default_IV(protoboard< FieldT > &pb)
libsnark::sha256_message_schedule_gadget::sigma0
std::vector< pb_variable< FieldT > > sigma0
Definition: sha256_components.hpp:36
libsnark::sha256_round_function_gadget::compute_sigma0
std::shared_ptr< big_sigma_gadget< FieldT > > compute_sigma0
Definition: sha256_components.hpp:61
libsnark::sha256_round_function_gadget::new_e
pb_linear_combination_array< FieldT > new_e
Definition: sha256_components.hpp:90
libsnark::sha256_message_schedule_gadget::compute_sigma0
std::vector< std::shared_ptr< small_sigma_gadget< FieldT > > > compute_sigma0
Definition: sha256_components.hpp:38
libsnark::pb_linear_combination_array
Definition: pb_variable.hpp:118
libsnark::sha256_round_function_gadget::packed_new_e
pb_variable< FieldT > packed_new_e
Definition: sha256_components.hpp:76
libsnark::sha256_message_schedule_gadget::packed_W
pb_variable_array< FieldT > packed_W
Definition: sha256_components.hpp:45
libsnark::sha256_round_function_gadget::pack_h
std::shared_ptr< packing_gadget< FieldT > > pack_h
Definition: sha256_components.hpp:70
libsnark::sha256_round_function_gadget::mod_reduce_new_a
std::shared_ptr< lastbits_gadget< FieldT > > mod_reduce_new_a
Definition: sha256_components.hpp:73
libsnark::sha256_message_schedule_gadget::M
pb_variable_array< FieldT > M
Definition: sha256_components.hpp:44
libsnark::sha256_round_function_gadget::sigma0
pb_variable< FieldT > sigma0
Definition: sha256_components.hpp:59
libsnark::sha256_round_function_gadget::h
pb_linear_combination_array< FieldT > h
Definition: sha256_components.hpp:86
libsnark::sha256_round_function_gadget::W
pb_variable< FieldT > W
Definition: sha256_components.hpp:87
sha256_components.tcc
libsnark::sha256_round_function_gadget::packed_d
pb_variable< FieldT > packed_d
Definition: sha256_components.hpp:67
libsnark::sha256_round_function_gadget::c
pb_linear_combination_array< FieldT > c
Definition: sha256_components.hpp:81
libsnark::sha256_round_function_gadget::new_a
pb_linear_combination_array< FieldT > new_a
Definition: sha256_components.hpp:89
libsnark::pb_variable
Definition: pb_variable.hpp:24
basic_gadgets.hpp
libsnark::pb_variable_array
Definition: pb_variable.hpp:44
libsnark::sha256_message_schedule_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::sha256_round_function_gadget::generate_r1cs_witness
void generate_r1cs_witness()
sha256_aux.hpp
libsnark::sha256_message_schedule_gadget::unreduced_W
std::vector< pb_variable< FieldT > > unreduced_W
Definition: sha256_components.hpp:40
libsnark::sha256_round_function_gadget::K
long K
Definition: sha256_components.hpp:88
libsnark::sha256_round_function_gadget::pack_d
std::shared_ptr< packing_gadget< FieldT > > pack_d
Definition: sha256_components.hpp:68
libsnark::sha256_round_function_gadget::g
pb_linear_combination_array< FieldT > g
Definition: sha256_components.hpp:85
libsnark::sha256_message_schedule_gadget::sha256_message_schedule_gadget
sha256_message_schedule_gadget(protoboard< FieldT > &pb, const pb_variable_array< FieldT > &M, const pb_variable_array< FieldT > &packed_W, const std::string &annotation_prefix)
libsnark::SHA256_digest_size
const size_t SHA256_digest_size
Definition: sha256_components.hpp:23
libsnark::sha256_message_schedule_gadget::sigma1
std::vector< pb_variable< FieldT > > sigma1
Definition: sha256_components.hpp:37
libsnark::sha256_round_function_gadget::packed_new_a
pb_variable< FieldT > packed_new_a
Definition: sha256_components.hpp:75
libsnark::sha256_round_function_gadget::mod_reduce_new_e
std::shared_ptr< lastbits_gadget< FieldT > > mod_reduce_new_e
Definition: sha256_components.hpp:74
libsnark::sha256_round_function_gadget::unreduced_new_a
pb_variable< FieldT > unreduced_new_a
Definition: sha256_components.hpp:71
libsnark::sha256_message_schedule_gadget::W_bits
std::vector< pb_variable_array< FieldT > > W_bits
Definition: sha256_components.hpp:33
libsnark::sha256_round_function_gadget::unreduced_new_e
pb_variable< FieldT > unreduced_new_e
Definition: sha256_components.hpp:72
libsnark::protoboard
Definition: pb_variable.hpp:22