Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
set_commitment.cpp
Go to the documentation of this file.
1 
8 #include <libff/common/serialization.hpp>
10 
11 namespace libsnark
12 {
13 
15 {
16  return (
17  this->address == other.address &&
18  this->merkle_path == other.merkle_path);
19 }
20 
22 {
23  if (merkle_path.empty()) {
24  return (8 * sizeof(address));
25  } else {
26  return (
27  8 * sizeof(address) + merkle_path[0].size() * merkle_path.size());
28  }
29 }
30 
31 std::ostream &operator<<(std::ostream &out, const set_membership_proof &proof)
32 {
33  out << proof.address << "\n";
34  out << proof.merkle_path.size() << "\n";
35  for (size_t i = 0; i < proof.merkle_path.size(); ++i) {
36  libff::output_bool_vector(out, proof.merkle_path[i]);
37  }
38 
39  return out;
40 }
41 
42 std::istream &operator>>(std::istream &in, set_membership_proof &proof)
43 {
44  in >> proof.address;
45  libff::consume_newline(in);
46  size_t tree_depth;
47  in >> tree_depth;
48  libff::consume_newline(in);
49  proof.merkle_path.resize(tree_depth);
50 
51  for (size_t i = 0; i < tree_depth; ++i) {
52  libff::input_bool_vector(in, proof.merkle_path[i]);
53  }
54 
55  return in;
56 }
57 
58 } // namespace libsnark
libsnark
Definition: accumulation_vector.hpp:18
libsnark::set_membership_proof::address
size_t address
Definition: set_commitment.hpp:25
libsnark::operator<<
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
set_commitment.hpp
libsnark::set_membership_proof::size_in_bits
size_t size_in_bits() const
Definition: set_commitment.cpp:21
libsnark::operator>>
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
libsnark::set_membership_proof::merkle_path
merkle_authentication_path merkle_path
Definition: set_commitment.hpp:26
libsnark::set_membership_proof
Definition: set_commitment.hpp:24
libsnark::set_membership_proof::operator==
bool operator==(const set_membership_proof &other) const
Definition: set_commitment.cpp:14