Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
merkle_tree_check_read_gadget.hpp
Go to the documentation of this file.
1 
16 #ifndef MERKLE_TREE_CHECK_READ_GADGET_HPP_
17 #define MERKLE_TREE_CHECK_READ_GADGET_HPP_
18 
25 
26 namespace libsnark
27 {
28 
29 template<typename FieldT, typename HashT>
30 class merkle_tree_check_read_gadget : public gadget<FieldT>
31 {
32 private:
33  std::vector<HashT> hashers;
34  std::vector<block_variable<FieldT>> hasher_inputs;
35  std::vector<digest_selector_gadget<FieldT>> propagators;
36  std::vector<digest_variable<FieldT>> internal_output;
37 
38  std::shared_ptr<digest_variable<FieldT>> computed_root;
39  std::shared_ptr<bit_vector_copy_gadget<FieldT>> check_root;
40 
41 public:
42  const size_t digest_size;
43  const size_t tree_depth;
49 
52  const size_t tree_depth,
54  const digest_variable<FieldT> &leaf_digest,
55  const digest_variable<FieldT> &root_digest,
58  const std::string &annotation_prefix);
59 
61  void generate_r1cs_witness();
62 
63  static size_t root_size_in_bits();
64  /* for debugging purposes */
65  static size_t expected_constraints(const size_t tree_depth);
66 };
67 
68 template<typename FieldT, typename HashT>
70 
71 } // namespace libsnark
72 
74 
75 #endif // MERKLE_TREE_CHECK_READ_GADGET_HPP_
libsnark::gadget::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark
Definition: accumulation_vector.hpp:18
libsnark::merkle_tree_check_read_gadget::leaf
digest_variable< FieldT > leaf
Definition: merkle_tree_check_read_gadget.hpp:45
libsnark::merkle_tree_check_read_gadget::path
merkle_authentication_path_variable< FieldT, HashT > path
Definition: merkle_tree_check_read_gadget.hpp:47
libsnark::merkle_tree_check_read_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::gadget::pb
protoboard< FieldT > & pb
Definition: gadget.hpp:19
libsnark::merkle_tree_check_read_gadget::root
digest_variable< FieldT > root
Definition: merkle_tree_check_read_gadget.hpp:46
crh_gadget.hpp
gadget.hpp
libsnark::gadget
Definition: gadget.hpp:16
hash_io.hpp
libsnark::merkle_tree_check_read_gadget::read_successful
pb_linear_combination< FieldT > read_successful
Definition: merkle_tree_check_read_gadget.hpp:48
merkle_tree.hpp
libsnark::merkle_tree_check_read_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::pb_linear_combination_array
Definition: pb_variable.hpp:118
libsnark::merkle_tree_check_read_gadget
Definition: merkle_tree_check_read_gadget.hpp:30
libsnark::merkle_tree_check_read_gadget::address_bits
pb_linear_combination_array< FieldT > address_bits
Definition: merkle_tree_check_read_gadget.hpp:44
libsnark::merkle_tree_check_read_gadget::root_size_in_bits
static size_t root_size_in_bits()
libsnark::digest_variable
Definition: hash_io.hpp:16
libsnark::merkle_tree_check_read_gadget::tree_depth
const size_t tree_depth
Definition: merkle_tree_check_read_gadget.hpp:43
libsnark::pb_linear_combination
Definition: pb_variable.hpp:101
libsnark::test_merkle_tree_check_read_gadget
void test_merkle_tree_check_read_gadget()
merkle_tree_check_read_gadget.tcc
digest_selector_gadget.hpp
merkle_authentication_path_variable.hpp
libsnark::merkle_tree_check_read_gadget::digest_size
const size_t digest_size
Definition: merkle_tree_check_read_gadget.hpp:42
libsnark::merkle_tree_check_read_gadget::expected_constraints
static size_t expected_constraints(const size_t tree_depth)
libsnark::merkle_authentication_path_variable
Definition: merkle_authentication_path_variable.hpp:19
libsnark::merkle_tree_check_read_gadget::merkle_tree_check_read_gadget
merkle_tree_check_read_gadget(protoboard< FieldT > &pb, const size_t tree_depth, const pb_linear_combination_array< FieldT > &address_bits, const digest_variable< FieldT > &leaf_digest, const digest_variable< FieldT > &root_digest, const merkle_authentication_path_variable< FieldT, HashT > &path, const pb_linear_combination< FieldT > &read_successful, const std::string &annotation_prefix)
libsnark::protoboard
Definition: pb_variable.hpp:22