Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
compliance_predicate.hpp
Go to the documentation of this file.
1 
17 #ifndef COMPLIANCE_PREDICATE_HPP_
18 #define COMPLIANCE_PREDICATE_HPP_
19 
21 #include <memory>
22 
23 namespace libsnark
24 {
25 
26 /********************************* Message ***********************************/
27 
35 template<typename FieldT> class r1cs_pcd_message
36 {
37 public:
38  size_t type;
39 
40  r1cs_pcd_message(const size_t type);
42  const = 0;
44 
45  virtual void print() const;
46  virtual ~r1cs_pcd_message() = default;
47 };
48 
49 /******************************* Local data **********************************/
50 
54 template<typename FieldT> class r1cs_pcd_local_data
55 {
56 public:
57  r1cs_pcd_local_data() = default;
59  const = 0;
60  virtual ~r1cs_pcd_local_data() = default;
61 };
62 
63 /******************************** Witness ************************************/
64 
65 template<typename FieldT> using r1cs_pcd_witness = std::vector<FieldT>;
66 
67 /*************************** Compliance predicate ****************************/
68 
69 template<typename FieldT> class r1cs_pcd_compliance_predicate;
70 
71 template<typename FieldT>
72 std::ostream &operator<<(
73  std::ostream &out, const r1cs_pcd_compliance_predicate<FieldT> &cp);
74 
75 template<typename FieldT>
76 std::istream &operator>>(
77  std::istream &in, r1cs_pcd_compliance_predicate<FieldT> &cp);
78 
111 template<typename FieldT> class r1cs_pcd_compliance_predicate
112 {
113 public:
114  size_t name;
115  size_t type;
116 
118 
120  size_t max_arity;
121  std::vector<size_t> incoming_message_payload_lengths;
124 
126  std::set<size_t> accepted_input_types;
127 
128  r1cs_pcd_compliance_predicate() = default;
130  r1cs_pcd_compliance_predicate<FieldT> &&other) = default;
132  const r1cs_pcd_compliance_predicate<FieldT> &other) = default;
134  const size_t name,
135  const size_t type,
137  const size_t outgoing_message_payload_length,
138  const size_t max_arity,
139  const std::vector<size_t> &incoming_message_payload_lengths,
140  const size_t local_data_length,
141  const size_t witness_length,
142  const bool relies_on_same_type_inputs,
143  const std::set<size_t> accepted_input_types = std::set<size_t>());
144 
146  const r1cs_pcd_compliance_predicate<FieldT> &other) = default;
147 
148  bool is_well_formed() const;
150  bool has_equal_input_lengths() const;
151 
152  bool is_satisfied(
153  const std::shared_ptr<r1cs_pcd_message<FieldT>> &outgoing_message,
154  const std::vector<std::shared_ptr<r1cs_pcd_message<FieldT>>>
155  &incoming_messages,
156  const std::shared_ptr<r1cs_pcd_local_data<FieldT>> &local_data,
157  const r1cs_pcd_witness<FieldT> &witness) const;
158 
159  bool operator==(const r1cs_pcd_compliance_predicate<FieldT> &other) const;
160  friend std::ostream &operator<<<FieldT>(
161  std::ostream &out, const r1cs_pcd_compliance_predicate<FieldT> &cp);
162  friend std::istream &operator>>
163  <FieldT>(std::istream &in, r1cs_pcd_compliance_predicate<FieldT> &cp);
164 };
165 
166 } // namespace libsnark
167 
169 
170 #endif // COMPLIANCE_PREDICATE_HPP_
libsnark::r1cs_pcd_compliance_predicate::incoming_message_payload_lengths
std::vector< size_t > incoming_message_payload_lengths
Definition: compliance_predicate.hpp:121
libsnark::r1cs_pcd_compliance_predicate::is_satisfied
bool is_satisfied(const std::shared_ptr< r1cs_pcd_message< FieldT >> &outgoing_message, const std::vector< std::shared_ptr< r1cs_pcd_message< FieldT >>> &incoming_messages, const std::shared_ptr< r1cs_pcd_local_data< FieldT >> &local_data, const r1cs_pcd_witness< FieldT > &witness) const
libsnark::r1cs_pcd_local_data::as_r1cs_variable_assignment
virtual r1cs_variable_assignment< FieldT > as_r1cs_variable_assignment() const =0
libsnark::r1cs_pcd_compliance_predicate::is_well_formed
bool is_well_formed() const
libsnark::r1cs_pcd_compliance_predicate::accepted_input_types
std::set< size_t > accepted_input_types
Definition: compliance_predicate.hpp:126
libsnark
Definition: accumulation_vector.hpp:18
libsnark::operator<<
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
libsnark::r1cs_pcd_compliance_predicate::outgoing_message_payload_length
size_t outgoing_message_payload_length
Definition: compliance_predicate.hpp:119
libsnark::r1cs_pcd_message::~r1cs_pcd_message
virtual ~r1cs_pcd_message()=default
libsnark::r1cs_pcd_message::print
virtual void print() const
libsnark::r1cs_pcd_compliance_predicate::operator==
bool operator==(const r1cs_pcd_compliance_predicate< FieldT > &other) const
libsnark::r1cs_pcd_message::type
size_t type
Definition: compliance_predicate.hpp:38
libsnark::r1cs_pcd_local_data
Definition: compliance_predicate.hpp:54
libsnark::r1cs_pcd_compliance_predicate::max_arity
size_t max_arity
Definition: compliance_predicate.hpp:120
libsnark::r1cs_pcd_compliance_predicate::local_data_length
size_t local_data_length
Definition: compliance_predicate.hpp:122
libsnark::r1cs_pcd_compliance_predicate::operator=
r1cs_pcd_compliance_predicate< FieldT > & operator=(const r1cs_pcd_compliance_predicate< FieldT > &other)=default
libsnark::r1cs_pcd_compliance_predicate::type
size_t type
Definition: compliance_predicate.hpp:115
libsnark::r1cs_pcd_compliance_predicate
Definition: compliance_predicate.hpp:69
libsnark::r1cs_pcd_message
Definition: compliance_predicate.hpp:35
libsnark::r1cs_pcd_local_data::r1cs_pcd_local_data
r1cs_pcd_local_data()=default
libsnark::r1cs_pcd_compliance_predicate::relies_on_same_type_inputs
bool relies_on_same_type_inputs
Definition: compliance_predicate.hpp:125
libsnark::r1cs_pcd_compliance_predicate::witness_length
size_t witness_length
Definition: compliance_predicate.hpp:123
libsnark::operator>>
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
libsnark::r1cs_pcd_message::r1cs_pcd_message
r1cs_pcd_message(const size_t type)
libsnark::r1cs_pcd_compliance_predicate::constraint_system
r1cs_constraint_system< FieldT > constraint_system
Definition: compliance_predicate.hpp:117
libsnark::r1cs_variable_assignment
std::vector< FieldT > r1cs_variable_assignment
Definition: r1cs.hpp:88
libsnark::r1cs_pcd_local_data::~r1cs_pcd_local_data
virtual ~r1cs_pcd_local_data()=default
libsnark::r1cs_pcd_witness
std::vector< FieldT > r1cs_pcd_witness
Definition: compliance_predicate.hpp:65
libsnark::r1cs_constraint_system
Definition: protoboard.hpp:25
libsnark::r1cs_pcd_compliance_predicate::r1cs_pcd_compliance_predicate
r1cs_pcd_compliance_predicate()=default
libsnark::r1cs_pcd_compliance_predicate::has_equal_input_and_output_lengths
bool has_equal_input_and_output_lengths() const
libsnark::r1cs_pcd_message::payload_as_r1cs_variable_assignment
virtual r1cs_variable_assignment< FieldT > payload_as_r1cs_variable_assignment() const =0
libsnark::r1cs_pcd_compliance_predicate::name
size_t name
Definition: compliance_predicate.hpp:114
compliance_predicate.tcc
libsnark::r1cs_pcd_message::as_r1cs_variable_assignment
r1cs_variable_assignment< FieldT > as_r1cs_variable_assignment() const
libsnark::r1cs_pcd_compliance_predicate::has_equal_input_lengths
bool has_equal_input_lengths() const
r1cs.hpp