Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
protoboard.hpp
Go to the documentation of this file.
1 
8 #ifndef PROTOBOARD_HPP_
9 #define PROTOBOARD_HPP_
10 
11 #include <algorithm>
12 #include <cassert>
13 #include <cstdio>
14 #include <libff/common/utils.hpp>
17 #include <string>
18 #include <vector>
19 
20 namespace libsnark
21 {
22 
23 template<typename FieldT> class r1cs_constraint;
24 
25 template<typename FieldT> class r1cs_constraint_system;
26 
27 template<typename FieldT> class protoboard
28 {
29 private:
30  // only here, because pb.val() needs to be able to return
31  // reference to the constant 1 term
32  FieldT constant_term;
33  // values[0] will hold the value of the first allocated variable
34  // of the protoboard, *NOT* constant 1
36  var_index_t next_free_var;
37  lc_index_t next_free_lc;
38  std::vector<FieldT> lc_values;
39  r1cs_constraint_system<FieldT> constraint_system;
40 
41 public:
42  protoboard();
43 
44  void clear_values();
45 
46  FieldT &val(const pb_variable<FieldT> &var);
47  FieldT val(const pb_variable<FieldT> &var) const;
48 
49  FieldT &lc_val(const pb_linear_combination<FieldT> &lc);
50  FieldT lc_val(const pb_linear_combination<FieldT> &lc) const;
51 
53  const r1cs_constraint<FieldT> &constr,
54  const std::string &annotation = "");
56  const pb_variable<FieldT> &v, const std::string &postfix);
57  bool is_satisfied() const;
58  void dump_variables() const;
59 
60  size_t num_constraints() const;
61  size_t num_inputs() const;
62  size_t num_variables() const;
63 
64  void set_input_sizes(const size_t primary_input_size);
65 
70 
71  friend class pb_variable<FieldT>;
72  friend class pb_linear_combination<FieldT>;
73 
74 private:
75  // The default copy constructor and assignment operator do not properly
76  // copy protoboard, rendering it unusable. The following prevents copying.
77  // It is unlikely to be the right thing to do (for performance reasons) and
78  // it causes subtle errors.
79  protoboard(const protoboard &);
80  const protoboard &operator=(const protoboard &);
81 
82  var_index_t allocate_var_index(const std::string &annotation = "");
83  lc_index_t allocate_lc_index();
84 };
85 
86 } // namespace libsnark
88 #endif // PROTOBOARD_HPP_
libsnark::protoboard::set_input_sizes
void set_input_sizes(const size_t primary_input_size)
libsnark::r1cs_constraint
Definition: protoboard.hpp:23
protoboard.tcc
libsnark::protoboard::val
FieldT & val(const pb_variable< FieldT > &var)
libsnark
Definition: accumulation_vector.hpp:18
libsnark::protoboard::clear_values
void clear_values()
libsnark::protoboard::num_inputs
size_t num_inputs() const
libsnark::protoboard::augment_variable_annotation
void augment_variable_annotation(const pb_variable< FieldT > &v, const std::string &postfix)
libsnark::protoboard::dump_variables
void dump_variables() const
libsnark::protoboard::num_constraints
size_t num_constraints() const
libsnark::protoboard::get_constraint_system
const r1cs_constraint_system< FieldT > & get_constraint_system() const
libsnark::lc_index_t
size_t lc_index_t
Definition: pb_variable.hpp:20
libsnark::var_index_t
size_t var_index_t
Definition: variable.hpp:29
pb_variable.hpp
libsnark::protoboard::add_r1cs_constraint
void add_r1cs_constraint(const r1cs_constraint< FieldT > &constr, const std::string &annotation="")
libsnark::protoboard::is_satisfied
bool is_satisfied() const
libsnark::protoboard::protoboard
protoboard()
libsnark::pb_linear_combination
Definition: pb_variable.hpp:101
libsnark::r1cs_auxiliary_input
std::vector< FieldT > r1cs_auxiliary_input
Definition: r1cs.hpp:84
libsnark::protoboard::lc_val
FieldT & lc_val(const pb_linear_combination< FieldT > &lc)
libsnark::r1cs_variable_assignment
std::vector< FieldT > r1cs_variable_assignment
Definition: r1cs.hpp:88
libsnark::pb_variable
Definition: pb_variable.hpp:24
libsnark::r1cs_constraint_system
Definition: protoboard.hpp:25
libsnark::protoboard::num_variables
size_t num_variables() const
libsnark::protoboard::auxiliary_input
r1cs_auxiliary_input< FieldT > auxiliary_input() const
libsnark::protoboard::primary_input
r1cs_primary_input< FieldT > primary_input() const
libsnark::r1cs_primary_input
std::vector< FieldT > r1cs_primary_input
Definition: r1cs.hpp:82
libsnark::protoboard::full_variable_assignment
const r1cs_variable_assignment< FieldT > & full_variable_assignment() const
r1cs.hpp
libsnark::protoboard
Definition: pb_variable.hpp:22