Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
uscs.hpp
Go to the documentation of this file.
1 
17 #ifndef USCS_HPP_
18 #define USCS_HPP_
19 
20 #include <cstdlib>
21 #include <iostream>
23 #include <map>
24 #include <string>
25 #include <vector>
26 
27 namespace libsnark
28 {
29 
30 /************************* USCS constraint ***********************************/
31 
41 template<typename FieldT> using uscs_constraint = linear_combination<FieldT>;
42 
43 /************************* USCS variable assignment **************************/
44 
49 template<typename FieldT> using uscs_primary_input = std::vector<FieldT>;
50 
51 template<typename FieldT> using uscs_auxiliary_input = std::vector<FieldT>;
52 
53 template<typename FieldT> using uscs_variable_assignment = std::vector<FieldT>;
54 
55 /************************* USCS constraint system ****************************/
56 
57 template<typename FieldT> class uscs_constraint_system;
58 
59 template<typename FieldT>
60 std::ostream &operator<<(
61  std::ostream &out, const uscs_constraint_system<FieldT> &cs);
62 
63 template<typename FieldT>
64 std::istream &operator>>(std::istream &in, uscs_constraint_system<FieldT> &cs);
65 
78 template<typename FieldT> class uscs_constraint_system
79 {
80 public:
83 
84  std::vector<uscs_constraint<FieldT>> constraints;
85 
87 
88  size_t num_inputs() const;
89  size_t num_variables() const;
90  size_t num_constraints() const;
91 
92 #ifdef DEBUG
93  std::map<size_t, std::string> constraint_annotations;
94  std::map<size_t, std::string> variable_annotations;
95 #endif
96 
97  bool is_valid() const;
98  bool is_satisfied(
99  const uscs_primary_input<FieldT> &primary_input,
100  const uscs_auxiliary_input<FieldT> &auxiliary_input) const;
101 
102  void add_constraint(const uscs_constraint<FieldT> &constraint);
103  void add_constraint(
104  const uscs_constraint<FieldT> &constraint,
105  const std::string &annotation);
106 
107  bool operator==(const uscs_constraint_system<FieldT> &other) const;
108 
109  friend std::ostream &operator<<<FieldT>(
110  std::ostream &out, const uscs_constraint_system<FieldT> &cs);
111  friend std::istream &operator>>
112  <FieldT>(std::istream &in, uscs_constraint_system<FieldT> &cs);
113 
115 };
116 
117 } // namespace libsnark
118 
120 
121 #endif // USCS_HPP_
libsnark::uscs_constraint_system::auxiliary_input_size
size_t auxiliary_input_size
Definition: uscs.hpp:82
libsnark::uscs_constraint_system::constraints
std::vector< uscs_constraint< FieldT > > constraints
Definition: uscs.hpp:84
libsnark::linear_combination
Definition: variable.hpp:40
libsnark
Definition: accumulation_vector.hpp:18
libsnark::operator<<
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
libsnark::uscs_constraint_system::report_linear_constraint_statistics
void report_linear_constraint_statistics() const
libsnark::uscs_constraint_system::is_satisfied
bool is_satisfied(const uscs_primary_input< FieldT > &primary_input, const uscs_auxiliary_input< FieldT > &auxiliary_input) const
libsnark::uscs_constraint_system::operator==
bool operator==(const uscs_constraint_system< FieldT > &other) const
variable.hpp
libsnark::uscs_constraint_system::num_variables
size_t num_variables() const
libsnark::uscs_constraint_system::num_constraints
size_t num_constraints() const
libsnark::uscs_constraint_system
Definition: uscs.hpp:57
libsnark::uscs_constraint_system::primary_input_size
size_t primary_input_size
Definition: uscs.hpp:81
libsnark::uscs_constraint_system::num_inputs
size_t num_inputs() const
libsnark::operator>>
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
libsnark::uscs_constraint_system::is_valid
bool is_valid() const
libsnark::uscs_primary_input
std::vector< FieldT > uscs_primary_input
Definition: uscs.hpp:49
libsnark::uscs_auxiliary_input
std::vector< FieldT > uscs_auxiliary_input
Definition: uscs.hpp:51
libsnark::uscs_constraint_system::uscs_constraint_system
uscs_constraint_system()
Definition: uscs.hpp:86
libsnark::uscs_constraint_system::add_constraint
void add_constraint(const uscs_constraint< FieldT > &constraint)
uscs.tcc
libsnark::uscs_variable_assignment
std::vector< FieldT > uscs_variable_assignment
Definition: uscs.hpp:53