Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
merkle_tree.hpp
Go to the documentation of this file.
1 
12 #ifndef MERKLE_TREE_HPP_
13 #define MERKLE_TREE_HPP_
14 
15 #include <libff/common/utils.hpp>
16 #include <map>
17 #include <vector>
18 
19 namespace libsnark
20 {
21 
35 typedef libff::bit_vector merkle_authentication_node;
36 typedef std::vector<merkle_authentication_node> merkle_authentication_path;
37 
38 template<typename HashT> class merkle_tree
39 {
40 private:
41  typedef typename HashT::hash_value_type hash_value_type;
42  typedef typename HashT::merkle_authentication_path_type
43  merkle_authentication_path_type;
44 
45 public:
46  std::vector<hash_value_type> hash_defaults;
47  std::map<size_t, libff::bit_vector> values;
48  std::map<size_t, hash_value_type> hashes;
49 
50  size_t depth;
51  size_t value_size;
52  size_t digest_size;
53 
54  merkle_tree(const size_t depth, const size_t value_size);
56  const size_t depth,
57  const size_t value_size,
58  const std::vector<libff::bit_vector> &contents_as_vector);
60  const size_t depth,
61  const size_t value_size,
62  const std::map<size_t, libff::bit_vector> &contents);
63 
64  libff::bit_vector get_value(const size_t address) const;
65  void set_value(const size_t address, const libff::bit_vector &value);
66 
67  hash_value_type get_root() const;
68  merkle_authentication_path_type get_path(const size_t address) const;
69 
70  void dump() const;
71 };
72 
73 } // namespace libsnark
74 
76 
77 #endif // MERKLE_TREE_HPP_
libsnark::merkle_tree::get_path
merkle_authentication_path_type get_path(const size_t address) const
libsnark::merkle_tree::set_value
void set_value(const size_t address, const libff::bit_vector &value)
libsnark::merkle_tree::values
std::map< size_t, libff::bit_vector > values
Definition: merkle_tree.hpp:47
libsnark
Definition: accumulation_vector.hpp:18
libsnark::merkle_tree::hashes
std::map< size_t, hash_value_type > hashes
Definition: merkle_tree.hpp:48
libsnark::merkle_tree::merkle_tree
merkle_tree(const size_t depth, const size_t value_size)
libsnark::merkle_tree::depth
size_t depth
Definition: merkle_tree.hpp:50
libsnark::merkle_tree::digest_size
size_t digest_size
Definition: merkle_tree.hpp:52
libsnark::merkle_tree::value_size
size_t value_size
Definition: merkle_tree.hpp:51
libsnark::merkle_tree::get_root
hash_value_type get_root() const
libsnark::merkle_authentication_node
libff::bit_vector merkle_authentication_node
Definition: merkle_tree.hpp:35
merkle_tree.tcc
libsnark::merkle_tree::dump
void dump() const
libsnark::merkle_tree::hash_defaults
std::vector< hash_value_type > hash_defaults
Definition: merkle_tree.hpp:46
libsnark::merkle_tree::get_value
libff::bit_vector get_value(const size_t address) const
libsnark::merkle_authentication_path
std::vector< merkle_authentication_node > merkle_authentication_path
Definition: merkle_tree.hpp:36
libsnark::merkle_tree
Definition: merkle_tree.hpp:38