Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
mp_pcd_circuits.hpp
Go to the documentation of this file.
1 
25 #ifndef MP_PCD_CIRCUITS_HPP_
26 #define MP_PCD_CIRCUITS_HPP_
27 
34 
35 namespace libsnark
36 {
37 
38 /**************************** Compliance step ********************************/
39 
46 template<typename ppT> class mp_compliance_step_pcd_circuit_maker
47 {
48 public:
49  typedef libff::Fr<ppT> FieldT;
50 
52 
54 
56 
57  std::shared_ptr<block_variable<FieldT>> block_for_outgoing_message;
58  std::shared_ptr<CRH_with_field_out_gadget<FieldT>> hash_outgoing_message;
59 
60  std::vector<block_variable<FieldT>> block_for_incoming_messages;
61  std::vector<pb_variable_array<FieldT>>
63  std::vector<multipacking_gadget<FieldT>>
65  std::vector<pb_variable_array<FieldT>>
67  std::vector<CRH_with_field_out_gadget<FieldT>> hash_incoming_messages;
68 
69  std::vector<r1cs_ppzksnark_verification_key_variable<ppT>>
71  std::vector<pb_variable_array<FieldT>> translation_step_vks_bits;
72 
76 
78  std::vector<pb_variable<FieldT>> incoming_message_types;
79  std::vector<pb_variable_array<FieldT>> incoming_message_payloads;
80  std::vector<pb_variable_array<FieldT>> incoming_message_vars;
81 
84  std::shared_ptr<gadget_from_r1cs<FieldT>> compliance_predicate_as_gadget;
85 
87  std::shared_ptr<multipacking_gadget<FieldT>> unpack_outgoing_message;
88 
89  std::vector<pb_variable_array<FieldT>> incoming_messages_bits;
90  std::vector<multipacking_gadget<FieldT>> unpack_incoming_messages;
91 
95  std::vector<pb_variable_array<FieldT>>
97 
98  std::shared_ptr<
101  std::vector<
104  std::vector<set_commitment_gadget<FieldT, CRH_with_bit_out_gadget<FieldT>>>
109 
110  std::vector<pb_variable_array<FieldT>> verifier_input;
111  std::vector<r1cs_ppzksnark_proof_variable<ppT>> proof;
113  std::vector<r1cs_ppzksnark_verifier_gadget<ppT>> verifier;
114 
117  const size_t max_number_of_predicates);
120 
122  const set_commitment &commitment_to_translation_step_r1cs_vks,
124  &mp_translation_step_pcd_circuit_vks,
125  const std::vector<set_membership_proof> &vk_membership_proofs,
127  &compliance_predicate_primary_input,
129  &compliance_predicate_auxiliary_input,
130  const std::vector<r1cs_ppzksnark_proof<other_curve<ppT>>>
131  &translation_step_proofs);
134 
135  static size_t field_logsize();
136  static size_t field_capacity();
137  static size_t input_size_in_elts();
138  static size_t input_capacity_in_bits();
139  static size_t input_size_in_bits();
140 };
141 
142 /*************************** Translation step ********************************/
143 
149 template<typename ppT> class mp_translation_step_pcd_circuit_maker
150 {
151 public:
152  typedef libff::Fr<ppT> FieldT;
153 
155 
159  std::shared_ptr<multipacking_gadget<FieldT>>
161 
162  std::shared_ptr<
164  ppT>>
166  std::shared_ptr<r1cs_ppzksnark_proof_variable<ppT>> proof;
167  std::shared_ptr<r1cs_ppzksnark_online_verifier_gadget<ppT>> online_verifier;
168 
171  &compliance_step_vk);
174 
176  const r1cs_primary_input<libff::Fr<ppT>> translation_step_input,
177  const r1cs_ppzksnark_proof<other_curve<ppT>> &prev_proof);
180 
181  static size_t field_logsize();
182  static size_t field_capacity();
183  static size_t input_size_in_elts();
184  static size_t input_capacity_in_bits();
185  static size_t input_size_in_bits();
186 };
187 
188 /****************************** Input maps ***********************************/
189 
193 template<typename ppT>
195  const set_commitment &commitment_to_translation_step_r1cs_vks,
196  const r1cs_pcd_compliance_predicate_primary_input<libff::Fr<ppT>>
197  &primary_input);
198 
202 template<typename ppT>
204  const set_commitment &commitment_to_translation_step_r1cs_vks,
206  libff::Fr<other_curve<ppT>>> &primary_input);
207 
208 } // namespace libsnark
209 
211 
212 #endif // MP_PCD_CIRCUITS_HPP_
libsnark::r1cs_ppzksnark_preprocessed_r1cs_ppzksnark_verification_key_variable
Definition: r1cs_ppzksnark_verifier_gadget.hpp:112
libsnark::mp_compliance_step_pcd_circuit_maker::block_for_outgoing_message
std::shared_ptr< block_variable< FieldT > > block_for_outgoing_message
Definition: mp_pcd_circuits.hpp:57
libsnark::get_mp_compliance_step_pcd_circuit_input
r1cs_primary_input< libff::Fr< ppT > > get_mp_compliance_step_pcd_circuit_input(const set_commitment &commitment_to_translation_step_r1cs_vks, const r1cs_pcd_compliance_predicate_primary_input< libff::Fr< ppT >> &primary_input)
libsnark::mp_compliance_step_pcd_circuit_maker::proof
std::vector< r1cs_ppzksnark_proof_variable< ppT > > proof
Definition: mp_pcd_circuits.hpp:111
libsnark::mp_compliance_step_pcd_circuit_maker::compliance_predicate_as_gadget
std::shared_ptr< gadget_from_r1cs< FieldT > > compliance_predicate_as_gadget
Definition: mp_pcd_circuits.hpp:84
libsnark::mp_compliance_step_pcd_circuit_maker::input_size_in_elts
static size_t input_size_in_elts()
libsnark::mp_compliance_step_pcd_circuit_maker::input_capacity_in_bits
static size_t input_capacity_in_bits()
libsnark::mp_compliance_step_pcd_circuit_maker::outgoing_message_vars
pb_variable_array< FieldT > outgoing_message_vars
Definition: mp_pcd_circuits.hpp:75
libsnark::mp_compliance_step_pcd_circuit_maker::block_for_incoming_messages
std::vector< block_variable< FieldT > > block_for_incoming_messages
Definition: mp_pcd_circuits.hpp:60
libsnark
Definition: accumulation_vector.hpp:18
libsnark::mp_compliance_step_pcd_circuit_maker::unpack_outgoing_message
std::shared_ptr< multipacking_gadget< FieldT > > unpack_outgoing_message
Definition: mp_pcd_circuits.hpp:87
libsnark::mp_compliance_step_pcd_circuit_maker::generate_r1cs_witness
void generate_r1cs_witness(const set_commitment &commitment_to_translation_step_r1cs_vks, const std::vector< r1cs_ppzksnark_verification_key< other_curve< ppT >>> &mp_translation_step_pcd_circuit_vks, const std::vector< set_membership_proof > &vk_membership_proofs, const r1cs_pcd_compliance_predicate_primary_input< FieldT > &compliance_predicate_primary_input, const r1cs_pcd_compliance_predicate_auxiliary_input< FieldT > &compliance_predicate_auxiliary_input, const std::vector< r1cs_ppzksnark_proof< other_curve< ppT >>> &translation_step_proofs)
libsnark::mp_translation_step_pcd_circuit_maker::field_logsize
static size_t field_logsize()
libsnark::mp_translation_step_pcd_circuit_maker::online_verifier
std::shared_ptr< r1cs_ppzksnark_online_verifier_gadget< ppT > > online_verifier
Definition: mp_pcd_circuits.hpp:167
libsnark::set_commitment
libff::bit_vector set_commitment
Definition: set_commitment.hpp:22
libsnark::mp_translation_step_pcd_circuit_maker::input_capacity_in_bits
static size_t input_capacity_in_bits()
libsnark::mp_compliance_step_pcd_circuit_maker::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::mp_compliance_step_pcd_circuit_maker::incoming_message_vars
std::vector< pb_variable_array< FieldT > > incoming_message_vars
Definition: mp_pcd_circuits.hpp:80
libsnark::mp_compliance_step_pcd_circuit_maker::commitment_and_incoming_message_digests
std::vector< pb_variable_array< FieldT > > commitment_and_incoming_message_digests
Definition: mp_pcd_circuits.hpp:62
crh_gadget.hpp
libsnark::mp_compliance_step_pcd_circuit_maker::outgoing_message_bits
pb_variable_array< FieldT > outgoing_message_bits
Definition: mp_pcd_circuits.hpp:86
libsnark::mp_compliance_step_pcd_circuit_maker::padded_commitment_and_incoming_messages_digest
std::vector< pb_variable_array< FieldT > > padded_commitment_and_incoming_messages_digest
Definition: mp_pcd_circuits.hpp:96
libsnark::mp_compliance_step_pcd_circuit_maker::pb
protoboard< FieldT > pb
Definition: mp_pcd_circuits.hpp:53
libsnark::mp_compliance_step_pcd_circuit_maker::common_type_check_aux
pb_variable_array< FieldT > common_type_check_aux
Definition: mp_pcd_circuits.hpp:108
libsnark::get_mp_translation_step_pcd_circuit_input
r1cs_primary_input< libff::Fr< ppT > > get_mp_translation_step_pcd_circuit_input(const set_commitment &commitment_to_translation_step_r1cs_vks, const r1cs_pcd_compliance_predicate_primary_input< libff::Fr< other_curve< ppT >>> &primary_input)
libsnark::mp_translation_step_pcd_circuit_maker
Definition: mp_pcd_circuits.hpp:149
libsnark::mp_translation_step_pcd_circuit_maker::generate_r1cs_constraints
void generate_r1cs_constraints()
gadget.hpp
libsnark::mp_compliance_step_pcd_circuit_maker::incoming_message_payloads
std::vector< pb_variable_array< FieldT > > incoming_message_payloads
Definition: mp_pcd_circuits.hpp:79
libsnark::mp_compliance_step_pcd_circuit_maker::membership_checkers
std::vector< set_commitment_gadget< FieldT, CRH_with_bit_out_gadget< FieldT > > > membership_checkers
Definition: mp_pcd_circuits.hpp:105
libsnark::mp_translation_step_pcd_circuit_maker::mp_translation_step_pcd_circuit_input
pb_variable_array< FieldT > mp_translation_step_pcd_circuit_input
Definition: mp_pcd_circuits.hpp:156
libsnark::mp_compliance_step_pcd_circuit_maker::get_circuit
r1cs_constraint_system< FieldT > get_circuit() const
libsnark::mp_compliance_step_pcd_circuit_maker::padded_translation_step_vk_and_outgoing_message_digest
pb_variable_array< FieldT > padded_translation_step_vk_and_outgoing_message_digest
Definition: mp_pcd_circuits.hpp:94
libsnark::mp_compliance_step_pcd_circuit_maker::verifier_input
std::vector< pb_variable_array< FieldT > > verifier_input
Definition: mp_pcd_circuits.hpp:110
gadget_from_r1cs.hpp
libsnark::mp_compliance_step_pcd_circuit_maker::translation_step_vks_bits
std::vector< pb_variable_array< FieldT > > translation_step_vks_bits
Definition: mp_pcd_circuits.hpp:71
libsnark::r1cs_pcd_compliance_predicate_auxiliary_input
Definition: r1cs_pcd_params.hpp:30
libsnark::r1cs_pcd_compliance_predicate
Definition: compliance_predicate.hpp:69
libsnark::r1cs_ppzksnark_proof
Definition: r1cs_ppzksnark.hpp:298
libsnark::r1cs_ppzksnark_verification_key
Definition: r1cs_ppzksnark.hpp:152
libsnark::mp_compliance_step_pcd_circuit_maker::unpack_commitment_and_incoming_message_digests
std::vector< multipacking_gadget< FieldT > > unpack_commitment_and_incoming_message_digests
Definition: mp_pcd_circuits.hpp:64
libsnark::mp_compliance_step_pcd_circuit_maker::membership_check_results
pb_variable_array< FieldT > membership_check_results
Definition: mp_pcd_circuits.hpp:106
libsnark::mp_translation_step_pcd_circuit_maker::get_primary_input
r1cs_primary_input< FieldT > get_primary_input() const
libsnark::mp_compliance_step_pcd_circuit_maker::get_primary_input
r1cs_primary_input< FieldT > get_primary_input() const
libsnark::mp_compliance_step_pcd_circuit_maker::unpack_incoming_messages
std::vector< multipacking_gadget< FieldT > > unpack_incoming_messages
Definition: mp_pcd_circuits.hpp:90
cp_handler.hpp
libsnark::mp_compliance_step_pcd_circuit_maker::outgoing_message_payload
pb_variable_array< FieldT > outgoing_message_payload
Definition: mp_pcd_circuits.hpp:74
libsnark::mp_compliance_step_pcd_circuit_maker::field_logsize
static size_t field_logsize()
libsnark::mp_compliance_step_pcd_circuit_maker::mp_compliance_step_pcd_circuit_maker
mp_compliance_step_pcd_circuit_maker(const r1cs_pcd_compliance_predicate< FieldT > &compliance_predicate, const size_t max_number_of_predicates)
libsnark::mp_compliance_step_pcd_circuit_maker::outgoing_message_type
pb_variable< FieldT > outgoing_message_type
Definition: mp_pcd_circuits.hpp:73
libsnark::mp_compliance_step_pcd_circuit_maker::get_auxiliary_input
r1cs_auxiliary_input< FieldT > get_auxiliary_input() const
libsnark::mp_compliance_step_pcd_circuit_maker::hash_outgoing_message
std::shared_ptr< CRH_with_field_out_gadget< FieldT > > hash_outgoing_message
Definition: mp_pcd_circuits.hpp:58
libsnark::mp_compliance_step_pcd_circuit_maker::compliance_predicate
r1cs_pcd_compliance_predicate< FieldT > compliance_predicate
Definition: mp_pcd_circuits.hpp:51
libsnark::digest_variable
Definition: hash_io.hpp:16
libsnark::mp_compliance_step_pcd_circuit_maker::arity
pb_variable< FieldT > arity
Definition: mp_pcd_circuits.hpp:77
r1cs_ppzksnark_verifier_gadget.hpp
libsnark::mp_translation_step_pcd_circuit_maker::input_size_in_bits
static size_t input_size_in_bits()
libsnark::mp_compliance_step_pcd_circuit_maker::mp_compliance_step_pcd_circuit_input
pb_variable_array< FieldT > mp_compliance_step_pcd_circuit_input
Definition: mp_pcd_circuits.hpp:92
libsnark::r1cs_auxiliary_input
std::vector< FieldT > r1cs_auxiliary_input
Definition: r1cs.hpp:84
libsnark::mp_compliance_step_pcd_circuit_maker::incoming_messages_bits
std::vector< pb_variable_array< FieldT > > incoming_messages_bits
Definition: mp_pcd_circuits.hpp:89
libsnark::mp_compliance_step_pcd_circuit_maker
Definition: mp_pcd_circuits.hpp:46
libsnark::mp_translation_step_pcd_circuit_maker::get_auxiliary_input
r1cs_auxiliary_input< FieldT > get_auxiliary_input() const
libsnark::mp_compliance_step_pcd_circuit_maker::translation_step_vks
std::vector< r1cs_ppzksnark_verification_key_variable< ppT > > translation_step_vks
Definition: mp_pcd_circuits.hpp:70
libsnark::pb_variable
Definition: pb_variable.hpp:24
libsnark::mp_translation_step_pcd_circuit_maker::field_capacity
static size_t field_capacity()
libsnark::mp_compliance_step_pcd_circuit_maker::zero
pb_variable< FieldT > zero
Definition: mp_pcd_circuits.hpp:55
libsnark::mp_translation_step_pcd_circuit_maker::get_circuit
r1cs_constraint_system< FieldT > get_circuit() const
libsnark::mp_compliance_step_pcd_circuit_maker::hash_incoming_messages
std::vector< CRH_with_field_out_gadget< FieldT > > hash_incoming_messages
Definition: mp_pcd_circuits.hpp:67
libsnark::mp_translation_step_pcd_circuit_maker::generate_r1cs_witness
void generate_r1cs_witness(const r1cs_primary_input< libff::Fr< ppT >> translation_step_input, const r1cs_ppzksnark_proof< other_curve< ppT >> &prev_proof)
libsnark::mp_compliance_step_pcd_circuit_maker::common_type
pb_variable< FieldT > common_type
Definition: mp_pcd_circuits.hpp:107
libsnark::pb_variable_array
Definition: pb_variable.hpp:44
libsnark::mp_translation_step_pcd_circuit_maker::pb
protoboard< FieldT > pb
Definition: mp_pcd_circuits.hpp:154
libsnark::mp_compliance_step_pcd_circuit_maker::input_size_in_bits
static size_t input_size_in_bits()
libsnark::set_membership_proof_variable
Definition: set_membership_proof_variable.hpp:20
libsnark::mp_compliance_step_pcd_circuit_maker::membership_proofs
std::vector< set_membership_proof_variable< FieldT, CRH_with_bit_out_gadget< FieldT > > > membership_proofs
Definition: mp_pcd_circuits.hpp:103
libsnark::mp_compliance_step_pcd_circuit_maker::FieldT
libff::Fr< ppT > FieldT
Definition: mp_pcd_circuits.hpp:49
set_commitment_gadget.hpp
libsnark::r1cs_constraint_system
Definition: protoboard.hpp:25
libsnark::mp_compliance_step_pcd_circuit_maker::field_capacity
static size_t field_capacity()
libsnark::other_curve
typename pairing_selector< ppT >::other_curve_type other_curve
Definition: pairing_params.hpp:117
libsnark::mp_compliance_step_pcd_circuit_maker::verification_results
pb_variable_array< FieldT > verification_results
Definition: mp_pcd_circuits.hpp:112
libsnark::mp_translation_step_pcd_circuit_maker::unpack_mp_translation_step_pcd_circuit_input
std::shared_ptr< multipacking_gadget< FieldT > > unpack_mp_translation_step_pcd_circuit_input
Definition: mp_pcd_circuits.hpp:160
libsnark::mp_compliance_step_pcd_circuit_maker::commitment_and_incoming_messages_digest_bits
std::vector< pb_variable_array< FieldT > > commitment_and_incoming_messages_digest_bits
Definition: mp_pcd_circuits.hpp:66
libsnark::mp_translation_step_pcd_circuit_maker::mp_translation_step_pcd_circuit_maker
mp_translation_step_pcd_circuit_maker(const r1cs_ppzksnark_verification_key< other_curve< ppT >> &compliance_step_vk)
mp_pcd_circuits.tcc
libsnark::mp_translation_step_pcd_circuit_maker::input_size_in_elts
static size_t input_size_in_elts()
libsnark::mp_compliance_step_pcd_circuit_maker::commitment
std::shared_ptr< set_commitment_variable< FieldT, CRH_with_bit_out_gadget< FieldT > > > commitment
Definition: mp_pcd_circuits.hpp:100
libsnark::mp_translation_step_pcd_circuit_maker::proof
std::shared_ptr< r1cs_ppzksnark_proof_variable< ppT > > proof
Definition: mp_pcd_circuits.hpp:166
libsnark::mp_translation_step_pcd_circuit_maker::unpacked_mp_translation_step_pcd_circuit_input
pb_variable_array< FieldT > unpacked_mp_translation_step_pcd_circuit_input
Definition: mp_pcd_circuits.hpp:157
libsnark::mp_translation_step_pcd_circuit_maker::verifier_input
pb_variable_array< FieldT > verifier_input
Definition: mp_pcd_circuits.hpp:158
libsnark::mp_compliance_step_pcd_circuit_maker::verifier
std::vector< r1cs_ppzksnark_verifier_gadget< ppT > > verifier
Definition: mp_pcd_circuits.hpp:113
libsnark::mp_compliance_step_pcd_circuit_maker::incoming_message_types
std::vector< pb_variable< FieldT > > incoming_message_types
Definition: mp_pcd_circuits.hpp:78
libsnark::mp_compliance_step_pcd_circuit_maker::local_data
pb_variable_array< FieldT > local_data
Definition: mp_pcd_circuits.hpp:82
libsnark::r1cs_pcd_compliance_predicate_primary_input
Definition: r1cs_pcd_params.hpp:17
libsnark::mp_translation_step_pcd_circuit_maker::FieldT
libff::Fr< ppT > FieldT
Definition: mp_pcd_circuits.hpp:152
libsnark::mp_translation_step_pcd_circuit_maker::hardcoded_compliance_step_vk
std::shared_ptr< r1cs_ppzksnark_preprocessed_r1cs_ppzksnark_verification_key_variable< ppT > > hardcoded_compliance_step_vk
Definition: mp_pcd_circuits.hpp:165
libsnark::r1cs_primary_input
std::vector< FieldT > r1cs_primary_input
Definition: r1cs.hpp:82
libsnark::protoboard
Definition: pb_variable.hpp:22
libsnark::mp_compliance_step_pcd_circuit_maker::cp_witness
pb_variable_array< FieldT > cp_witness
Definition: mp_pcd_circuits.hpp:83