Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
cp_handler.hpp
Go to the documentation of this file.
1 
15 #ifndef CP_HANDLER_HPP_
16 #define CP_HANDLER_HPP_
17 
21 #include <numeric>
22 
23 namespace libsnark
24 {
25 
26 /***************************** Message variable ******************************/
27 
31 template<typename FieldT>
32 class r1cs_pcd_message_variable : public gadget<FieldT>
33 {
34 protected:
36 
37 public:
39 
41 
43  protoboard<FieldT> &pb, const std::string &annotation_prefix);
44  void update_all_vars();
45 
47  const std::shared_ptr<r1cs_pcd_message<FieldT>> &message);
48  virtual std::shared_ptr<r1cs_pcd_message<FieldT>> get_message() const = 0;
49 
50  virtual ~r1cs_pcd_message_variable() = default;
51 };
52 /*************************** Local data variable *****************************/
53 
57 template<typename FieldT>
58 class r1cs_pcd_local_data_variable : public gadget<FieldT>
59 {
60 protected:
62 
63 public:
65 
67  protoboard<FieldT> &pb, const std::string &annotation_prefix);
68  void update_all_vars();
69 
71  const std::shared_ptr<r1cs_pcd_local_data<FieldT>> &local_data);
72 
73  virtual ~r1cs_pcd_local_data_variable() = default;
74 };
75 
76 /*********************** Compliance predicate handler ************************/
77 
81 template<typename FieldT, typename protoboardT>
83 {
84 protected:
85  protoboardT pb;
86 
87  std::shared_ptr<r1cs_pcd_message_variable<FieldT>> outgoing_message;
89  std::vector<std::shared_ptr<r1cs_pcd_message_variable<FieldT>>>
91  std::shared_ptr<r1cs_pcd_local_data_variable<FieldT>> local_data;
92 
93 public:
94  const size_t name;
95  const size_t type;
96  const size_t max_arity;
98  const std::set<size_t> accepted_input_types;
99 
101  const protoboardT &pb,
102  const size_t name,
103  const size_t type,
104  const size_t max_arity,
105  const bool relies_on_same_type_inputs,
106  const std::set<size_t> accepted_input_types = std::set<size_t>());
107  virtual void generate_r1cs_constraints() = 0;
108  virtual void generate_r1cs_witness(
109  const std::vector<std::shared_ptr<r1cs_pcd_message<FieldT>>>
110  &incoming_message_values,
111  const std::shared_ptr<r1cs_pcd_local_data<FieldT>> &local_data_value);
112 
115 
116  std::shared_ptr<r1cs_pcd_message<FieldT>> get_outgoing_message() const;
117  size_t get_arity() const;
118  std::shared_ptr<r1cs_pcd_message<FieldT>> get_incoming_message(
119  const size_t message_idx) const;
120  std::shared_ptr<r1cs_pcd_local_data<FieldT>> get_local_data() const;
122 };
123 
124 } // namespace libsnark
125 
127 
128 #endif // CP_HANDLER_HPP_
libsnark::gadget::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark::compliance_predicate_handler::get_arity
size_t get_arity() const
libsnark::compliance_predicate_handler::get_compliance_predicate
r1cs_pcd_compliance_predicate< FieldT > get_compliance_predicate() const
libsnark
Definition: accumulation_vector.hpp:18
libsnark::compliance_predicate_handler::compliance_predicate_handler
compliance_predicate_handler(const protoboardT &pb, const size_t name, const size_t type, const size_t max_arity, const bool relies_on_same_type_inputs, const std::set< size_t > accepted_input_types=std::set< size_t >())
libsnark::gadget::pb
protoboard< FieldT > & pb
Definition: gadget.hpp:19
libsnark::r1cs_pcd_message_variable::type
pb_variable< FieldT > type
Definition: cp_handler.hpp:38
libsnark::compliance_predicate_handler::get_witness
r1cs_variable_assignment< FieldT > get_witness() const
libsnark::compliance_predicate_handler::pb
protoboardT pb
Definition: cp_handler.hpp:85
libsnark::compliance_predicate_handler
Definition: cp_handler.hpp:82
libsnark::compliance_predicate_handler::generate_r1cs_constraints
virtual void generate_r1cs_constraints()=0
libsnark::r1cs_pcd_local_data_variable::r1cs_pcd_local_data_variable
r1cs_pcd_local_data_variable(protoboard< FieldT > &pb, const std::string &annotation_prefix)
gadget.hpp
libsnark::r1cs_pcd_message_variable::update_all_vars
void update_all_vars()
libsnark::r1cs_pcd_local_data
Definition: compliance_predicate.hpp:54
libsnark::gadget
Definition: gadget.hpp:16
compliance_predicate.hpp
libsnark::r1cs_pcd_local_data_variable::update_all_vars
void update_all_vars()
libsnark::compliance_predicate_handler::accepted_input_types
const std::set< size_t > accepted_input_types
Definition: cp_handler.hpp:98
libsnark::r1cs_pcd_message_variable
Definition: cp_handler.hpp:32
libsnark::r1cs_pcd_message_variable::~r1cs_pcd_message_variable
virtual ~r1cs_pcd_message_variable()=default
libsnark::r1cs_pcd_compliance_predicate
Definition: compliance_predicate.hpp:69
libsnark::compliance_predicate_handler::get_full_variable_assignment
r1cs_variable_assignment< FieldT > get_full_variable_assignment() const
libsnark::compliance_predicate_handler::outgoing_message
std::shared_ptr< r1cs_pcd_message_variable< FieldT > > outgoing_message
Definition: cp_handler.hpp:87
libsnark::r1cs_pcd_message
Definition: compliance_predicate.hpp:35
protoboard.hpp
libsnark::r1cs_pcd_local_data_variable::~r1cs_pcd_local_data_variable
virtual ~r1cs_pcd_local_data_variable()=default
libsnark::r1cs_pcd_local_data_variable
Definition: cp_handler.hpp:58
libsnark::compliance_predicate_handler::max_arity
const size_t max_arity
Definition: cp_handler.hpp:96
libsnark::r1cs_variable_assignment
std::vector< FieldT > r1cs_variable_assignment
Definition: r1cs.hpp:88
libsnark::pb_variable
Definition: pb_variable.hpp:24
libsnark::compliance_predicate_handler::get_local_data
std::shared_ptr< r1cs_pcd_local_data< FieldT > > get_local_data() const
libsnark::compliance_predicate_handler::generate_r1cs_witness
virtual void generate_r1cs_witness(const std::vector< std::shared_ptr< r1cs_pcd_message< FieldT >>> &incoming_message_values, const std::shared_ptr< r1cs_pcd_local_data< FieldT >> &local_data_value)
libsnark::compliance_predicate_handler::arity
pb_variable< FieldT > arity
Definition: cp_handler.hpp:88
libsnark::r1cs_pcd_message_variable::r1cs_pcd_message_variable
r1cs_pcd_message_variable(protoboard< FieldT > &pb, const std::string &annotation_prefix)
libsnark::r1cs_pcd_message_variable::all_vars
pb_variable_array< FieldT > all_vars
Definition: cp_handler.hpp:40
libsnark::compliance_predicate_handler::type
const size_t type
Definition: cp_handler.hpp:95
libsnark::pb_variable_array
Definition: pb_variable.hpp:44
libsnark::compliance_predicate_handler::get_outgoing_message
std::shared_ptr< r1cs_pcd_message< FieldT > > get_outgoing_message() const
libsnark::compliance_predicate_handler::relies_on_same_type_inputs
const bool relies_on_same_type_inputs
Definition: cp_handler.hpp:97
libsnark::r1cs_pcd_message_variable::generate_r1cs_witness
void generate_r1cs_witness(const std::shared_ptr< r1cs_pcd_message< FieldT >> &message)
libsnark::r1cs_pcd_message_variable::num_vars_at_construction
size_t num_vars_at_construction
Definition: cp_handler.hpp:35
libsnark::compliance_predicate_handler::incoming_messages
std::vector< std::shared_ptr< r1cs_pcd_message_variable< FieldT > > > incoming_messages
Definition: cp_handler.hpp:90
libsnark::compliance_predicate_handler::get_incoming_message
std::shared_ptr< r1cs_pcd_message< FieldT > > get_incoming_message(const size_t message_idx) const
libsnark::r1cs_pcd_local_data_variable::num_vars_at_construction
size_t num_vars_at_construction
Definition: cp_handler.hpp:61
libsnark::r1cs_pcd_local_data_variable::generate_r1cs_witness
void generate_r1cs_witness(const std::shared_ptr< r1cs_pcd_local_data< FieldT >> &local_data)
libsnark::r1cs_pcd_local_data_variable::all_vars
pb_variable_array< FieldT > all_vars
Definition: cp_handler.hpp:64
libsnark::r1cs_pcd_message_variable::get_message
virtual std::shared_ptr< r1cs_pcd_message< FieldT > > get_message() const =0
libsnark::compliance_predicate_handler::name
const size_t name
Definition: cp_handler.hpp:94
libsnark::compliance_predicate_handler::local_data
std::shared_ptr< r1cs_pcd_local_data_variable< FieldT > > local_data
Definition: cp_handler.hpp:91
libsnark::protoboard
Definition: pb_variable.hpp:22
cp_handler.tcc