Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
bacs.hpp
Go to the documentation of this file.
1 
19 #ifndef BACS_HPP_
20 #define BACS_HPP_
21 
23 #include <vector>
24 
25 namespace libsnark
26 {
27 
28 /*********************** BACS variable assignment ****************************/
29 
33 template<typename FieldT> using bacs_variable_assignment = std::vector<FieldT>;
34 
35 /**************************** BACS gate **************************************/
36 
37 template<typename FieldT> struct bacs_gate;
38 
39 template<typename FieldT>
40 std::ostream &operator<<(std::ostream &out, const bacs_gate<FieldT> &g);
41 
42 template<typename FieldT>
43 std::istream &operator>>(std::istream &in, bacs_gate<FieldT> &g);
44 
52 template<typename FieldT> struct bacs_gate {
53 
56 
59 
60  FieldT evaluate(const bacs_variable_assignment<FieldT> &input) const;
61  void print(
62  const std::map<size_t, std::string> &variable_annotations =
63  std::map<size_t, std::string>()) const;
64 
65  bool operator==(const bacs_gate<FieldT> &other) const;
66 
67  friend std::ostream &operator<<<FieldT>(
68  std::ostream &out, const bacs_gate<FieldT> &g);
69  friend std::istream &operator>>
70  <FieldT>(std::istream &in, bacs_gate<FieldT> &g);
71 };
72 
73 /****************************** BACS inputs **********************************/
74 
78 template<typename FieldT>
80 
84 template<typename FieldT>
86 
87 /************************** BACS circuit *************************************/
88 
89 template<typename FieldT> class bacs_circuit;
90 
91 template<typename FieldT>
92 std::ostream &operator<<(
93  std::ostream &out, const bacs_circuit<FieldT> &circuit);
94 
95 template<typename FieldT>
96 std::istream &operator>>(std::istream &in, bacs_circuit<FieldT> &circuit);
97 
108 template<typename FieldT> class bacs_circuit
109 {
110 public:
113  std::vector<bacs_gate<FieldT>> gates;
114 
116 
117  size_t num_inputs() const;
118  size_t num_gates() const;
119  size_t num_wires() const;
120 
121  std::vector<size_t> wire_depths() const;
122  size_t depth() const;
123 
124 #ifdef DEBUG
125  std::map<size_t, std::string> gate_annotations;
126  std::map<size_t, std::string> variable_annotations;
127 #endif
128 
129  bool is_valid() const;
130  bool is_satisfied(
131  const bacs_primary_input<FieldT> &primary_input,
132  const bacs_auxiliary_input<FieldT> &auxiliary_input) const;
133 
135  const bacs_primary_input<FieldT> &primary_input,
136  const bacs_auxiliary_input<FieldT> &auxiliary_input) const;
138  const bacs_primary_input<FieldT> &primary_input,
139  const bacs_auxiliary_input<FieldT> &auxiliary_input) const;
140 
141  void add_gate(const bacs_gate<FieldT> &g);
142  void add_gate(const bacs_gate<FieldT> &g, const std::string &annotation);
143 
144  bool operator==(const bacs_circuit<FieldT> &other) const;
145 
146  void print() const;
147  void print_info() const;
148 
149  friend std::ostream &operator<<<FieldT>(
150  std::ostream &out, const bacs_circuit<FieldT> &circuit);
151  friend std::istream &operator>>
152  <FieldT>(std::istream &in, bacs_circuit<FieldT> &circuit);
153 };
154 
155 } // namespace libsnark
156 
158 
159 #endif // BACS_HPP_
libsnark::linear_combination
Definition: variable.hpp:40
libsnark::bacs_circuit::primary_input_size
size_t primary_input_size
Definition: bacs.hpp:111
libsnark::bacs_circuit
Definition: bacs.hpp:89
libsnark
Definition: accumulation_vector.hpp:18
libsnark::operator<<
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
libsnark::bacs_gate
Definition: bacs.hpp:37
bacs.tcc
libsnark::bacs_circuit::depth
size_t depth() const
libsnark::bacs_circuit::num_wires
size_t num_wires() const
libsnark::variable
Definition: variable.hpp:47
libsnark::bacs_gate::rhs
linear_combination< FieldT > rhs
Definition: bacs.hpp:55
libsnark::bacs_circuit::get_all_outputs
bacs_variable_assignment< FieldT > get_all_outputs(const bacs_primary_input< FieldT > &primary_input, const bacs_auxiliary_input< FieldT > &auxiliary_input) const
libsnark::bacs_circuit::gates
std::vector< bacs_gate< FieldT > > gates
Definition: bacs.hpp:113
libsnark::bacs_circuit::num_inputs
size_t num_inputs() const
libsnark::bacs_circuit::get_all_wires
bacs_variable_assignment< FieldT > get_all_wires(const bacs_primary_input< FieldT > &primary_input, const bacs_auxiliary_input< FieldT > &auxiliary_input) const
libsnark::bacs_circuit::num_gates
size_t num_gates() const
libsnark::bacs_gate::print
void print(const std::map< size_t, std::string > &variable_annotations=std::map< size_t, std::string >()) const
libsnark::bacs_gate::operator==
bool operator==(const bacs_gate< FieldT > &other) const
variable.hpp
libsnark::bacs_circuit::print
void print() const
libsnark::bacs_circuit::bacs_circuit
bacs_circuit()
Definition: bacs.hpp:115
libsnark::bacs_circuit::operator==
bool operator==(const bacs_circuit< FieldT > &other) const
libsnark::bacs_circuit::is_satisfied
bool is_satisfied(const bacs_primary_input< FieldT > &primary_input, const bacs_auxiliary_input< FieldT > &auxiliary_input) const
libsnark::bacs_circuit::add_gate
void add_gate(const bacs_gate< FieldT > &g)
libsnark::operator>>
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
libsnark::bacs_circuit::wire_depths
std::vector< size_t > wire_depths() const
libsnark::bacs_gate::lhs
linear_combination< FieldT > lhs
Definition: bacs.hpp:54
libsnark::bacs_variable_assignment
std::vector< FieldT > bacs_variable_assignment
Definition: bacs.hpp:33
libsnark::bacs_circuit::is_valid
bool is_valid() const
libsnark::bacs_circuit::auxiliary_input_size
size_t auxiliary_input_size
Definition: bacs.hpp:112
libsnark::bacs_circuit::print_info
void print_info() const
libsnark::bacs_gate::output
variable< FieldT > output
Definition: bacs.hpp:57
libsnark::bacs_gate::is_circuit_output
bool is_circuit_output
Definition: bacs.hpp:58
libsnark::bacs_gate::evaluate
FieldT evaluate(const bacs_variable_assignment< FieldT > &input) const
libsnark::bacs_auxiliary_input
bacs_variable_assignment< FieldT > bacs_auxiliary_input
Definition: bacs.hpp:85
libsnark::bacs_primary_input
bacs_variable_assignment< FieldT > bacs_primary_input
Definition: bacs.hpp:79