Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
sp_pcd_circuits.hpp
Go to the documentation of this file.
1 
26 #ifndef SP_PCD_CIRCUITS_HPP_
27 #define SP_PCD_CIRCUITS_HPP_
28 
35 
36 namespace libsnark
37 {
38 
39 /**************************** Compliance step ********************************/
40 
47 template<typename ppT> class sp_compliance_step_pcd_circuit_maker
48 {
49 public:
50  typedef libff::Fr<ppT> FieldT;
51 
53 
55 
57 
58  std::shared_ptr<block_variable<FieldT>> block_for_outgoing_message;
59  std::shared_ptr<CRH_with_field_out_gadget<FieldT>> hash_outgoing_message;
60 
61  std::vector<block_variable<FieldT>> blocks_for_incoming_messages;
62  std::vector<pb_variable_array<FieldT>>
64  std::vector<multipacking_gadget<FieldT>>
66  std::vector<pb_variable_array<FieldT>>
68  std::vector<CRH_with_field_out_gadget<FieldT>> hash_incoming_messages;
69 
70  std::shared_ptr<r1cs_ppzksnark_verification_key_variable<ppT>>
73 
77 
79  std::vector<pb_variable<FieldT>> incoming_message_types;
80  std::vector<pb_variable_array<FieldT>> incoming_message_payloads;
81  std::vector<pb_variable_array<FieldT>> incoming_message_vars;
82 
85  std::shared_ptr<gadget_from_r1cs<FieldT>> compliance_predicate_as_gadget;
86 
88  std::shared_ptr<multipacking_gadget<FieldT>> unpack_outgoing_message;
89 
90  std::vector<pb_variable_array<FieldT>> incoming_messages_bits;
91  std::vector<multipacking_gadget<FieldT>> unpack_incoming_messages;
92 
96  std::vector<pb_variable_array<FieldT>>
98 
99  std::vector<pb_variable_array<FieldT>> verifier_input;
100  std::vector<r1cs_ppzksnark_proof_variable<ppT>> proof;
102  std::vector<r1cs_ppzksnark_verifier_gadget<ppT>> verifiers;
103 
108 
111  &translation_step_pcd_circuit_vk,
113  &compliance_predicate_primary_input,
115  &compliance_predicate_auxiliary_input,
116  const std::vector<r1cs_ppzksnark_proof<other_curve<ppT>>>
117  &incoming_proofs);
120 
121  static size_t field_logsize();
122  static size_t field_capacity();
123  static size_t input_size_in_elts();
124  static size_t input_capacity_in_bits();
125  static size_t input_size_in_bits();
126 };
127 
128 /*************************** Translation step ********************************/
129 
135 template<typename ppT> class sp_translation_step_pcd_circuit_maker
136 {
137 public:
138  typedef libff::Fr<ppT> FieldT;
139 
141 
145  std::shared_ptr<multipacking_gadget<FieldT>>
147 
148  std::shared_ptr<
150  ppT>>
152  std::shared_ptr<r1cs_ppzksnark_proof_variable<ppT>> proof;
153  std::shared_ptr<r1cs_ppzksnark_online_verifier_gadget<ppT>> online_verifier;
154 
157  &compliance_step_vk);
160 
162  const r1cs_primary_input<libff::Fr<ppT>> translation_step_input,
163  const r1cs_ppzksnark_proof<other_curve<ppT>> &compliance_step_proof);
166 
167  static size_t field_logsize();
168  static size_t field_capacity();
169  static size_t input_size_in_elts();
170  static size_t input_capacity_in_bits();
171  static size_t input_size_in_bits();
172 };
173 
174 /****************************** Input maps ***********************************/
175 
179 template<typename ppT>
181  const libff::bit_vector &sp_translation_step_vk_bits,
182  const r1cs_pcd_compliance_predicate_primary_input<libff::Fr<ppT>>
183  &primary_input);
184 
188 template<typename ppT>
190  const libff::bit_vector &sp_translation_step_vk_bits,
192  libff::Fr<other_curve<ppT>>> &primary_input);
193 
194 } // namespace libsnark
195 
197 
198 #endif // SP_PCD_CIRCUITS_HPP_
libsnark::sp_compliance_step_pcd_circuit_maker::proof
std::vector< r1cs_ppzksnark_proof_variable< ppT > > proof
Definition: sp_pcd_circuits.hpp:100
libsnark::sp_compliance_step_pcd_circuit_maker::verification_result
pb_variable< FieldT > verification_result
Definition: sp_pcd_circuits.hpp:101
libsnark::sp_compliance_step_pcd_circuit_maker::compliance_predicate_as_gadget
std::shared_ptr< gadget_from_r1cs< FieldT > > compliance_predicate_as_gadget
Definition: sp_pcd_circuits.hpp:85
libsnark::r1cs_ppzksnark_preprocessed_r1cs_ppzksnark_verification_key_variable
Definition: r1cs_ppzksnark_verifier_gadget.hpp:112
libsnark::sp_compliance_step_pcd_circuit_maker::verifier_input
std::vector< pb_variable_array< FieldT > > verifier_input
Definition: sp_pcd_circuits.hpp:99
libsnark::sp_translation_step_pcd_circuit_maker::sp_translation_step_pcd_circuit_maker
sp_translation_step_pcd_circuit_maker(const r1cs_ppzksnark_verification_key< other_curve< ppT >> &compliance_step_vk)
libsnark::sp_compliance_step_pcd_circuit_maker::block_for_outgoing_message
std::shared_ptr< block_variable< FieldT > > block_for_outgoing_message
Definition: sp_pcd_circuits.hpp:58
sp_pcd_circuits.tcc
libsnark::sp_compliance_step_pcd_circuit_maker::input_size_in_bits
static size_t input_size_in_bits()
libsnark::sp_compliance_step_pcd_circuit_maker::sp_translation_step_vk
std::shared_ptr< r1cs_ppzksnark_verification_key_variable< ppT > > sp_translation_step_vk
Definition: sp_pcd_circuits.hpp:71
libsnark::sp_compliance_step_pcd_circuit_maker::unpack_outgoing_message
std::shared_ptr< multipacking_gadget< FieldT > > unpack_outgoing_message
Definition: sp_pcd_circuits.hpp:88
libsnark::sp_compliance_step_pcd_circuit_maker::outgoing_message_payload
pb_variable_array< FieldT > outgoing_message_payload
Definition: sp_pcd_circuits.hpp:75
libsnark::sp_compliance_step_pcd_circuit_maker::incoming_messages_bits
std::vector< pb_variable_array< FieldT > > incoming_messages_bits
Definition: sp_pcd_circuits.hpp:90
libsnark
Definition: accumulation_vector.hpp:18
libsnark::sp_translation_step_pcd_circuit_maker::proof
std::shared_ptr< r1cs_ppzksnark_proof_variable< ppT > > proof
Definition: sp_pcd_circuits.hpp:152
libsnark::sp_translation_step_pcd_circuit_maker::hardcoded_sp_compliance_step_vk
std::shared_ptr< r1cs_ppzksnark_preprocessed_r1cs_ppzksnark_verification_key_variable< ppT > > hardcoded_sp_compliance_step_vk
Definition: sp_pcd_circuits.hpp:151
libsnark::sp_compliance_step_pcd_circuit_maker::input_size_in_elts
static size_t input_size_in_elts()
libsnark::sp_compliance_step_pcd_circuit_maker::outgoing_message_vars
pb_variable_array< FieldT > outgoing_message_vars
Definition: sp_pcd_circuits.hpp:76
libsnark::sp_translation_step_pcd_circuit_maker::generate_r1cs_constraints
void generate_r1cs_constraints()
crh_gadget.hpp
libsnark::sp_compliance_step_pcd_circuit_maker::verifiers
std::vector< r1cs_ppzksnark_verifier_gadget< ppT > > verifiers
Definition: sp_pcd_circuits.hpp:102
libsnark::sp_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: sp_pcd_circuits.hpp:95
libsnark::sp_compliance_step_pcd_circuit_maker::get_auxiliary_input
r1cs_auxiliary_input< FieldT > get_auxiliary_input() const
libsnark::sp_compliance_step_pcd_circuit_maker::cp_witness
pb_variable_array< FieldT > cp_witness
Definition: sp_pcd_circuits.hpp:84
libsnark::sp_compliance_step_pcd_circuit_maker::padded_translation_step_vk_and_incoming_messages_digests
std::vector< pb_variable_array< FieldT > > padded_translation_step_vk_and_incoming_messages_digests
Definition: sp_pcd_circuits.hpp:97
libsnark::sp_translation_step_pcd_circuit_maker::pb
protoboard< FieldT > pb
Definition: sp_pcd_circuits.hpp:140
libsnark::sp_translation_step_pcd_circuit_maker
Definition: sp_pcd_circuits.hpp:135
libsnark::sp_compliance_step_pcd_circuit_maker::sp_translation_step_vk_and_incoming_message_payload_digest_bits
std::vector< pb_variable_array< FieldT > > sp_translation_step_vk_and_incoming_message_payload_digest_bits
Definition: sp_pcd_circuits.hpp:67
libsnark::sp_translation_step_pcd_circuit_maker::input_size_in_elts
static size_t input_size_in_elts()
libsnark::sp_compliance_step_pcd_circuit_maker::outgoing_message_type
pb_variable< FieldT > outgoing_message_type
Definition: sp_pcd_circuits.hpp:74
libsnark::sp_compliance_step_pcd_circuit_maker::field_capacity
static size_t field_capacity()
gadget_from_r1cs.hpp
libsnark::sp_translation_step_pcd_circuit_maker::get_primary_input
r1cs_primary_input< FieldT > get_primary_input() const
libsnark::sp_compliance_step_pcd_circuit_maker::incoming_message_types
std::vector< pb_variable< FieldT > > incoming_message_types
Definition: sp_pcd_circuits.hpp:79
libsnark::r1cs_pcd_compliance_predicate_auxiliary_input
Definition: r1cs_pcd_params.hpp:30
libsnark::sp_compliance_step_pcd_circuit_maker::arity
pb_variable< FieldT > arity
Definition: sp_pcd_circuits.hpp:78
libsnark::sp_compliance_step_pcd_circuit_maker::sp_compliance_step_pcd_circuit_maker
sp_compliance_step_pcd_circuit_maker(const r1cs_pcd_compliance_predicate< FieldT > &compliance_predicate)
libsnark::r1cs_pcd_compliance_predicate
Definition: compliance_predicate.hpp:69
libsnark::r1cs_ppzksnark_proof
Definition: r1cs_ppzksnark.hpp:298
libsnark::sp_translation_step_pcd_circuit_maker::input_size_in_bits
static size_t input_size_in_bits()
libsnark::sp_compliance_step_pcd_circuit_maker::incoming_message_payloads
std::vector< pb_variable_array< FieldT > > incoming_message_payloads
Definition: sp_pcd_circuits.hpp:80
libsnark::r1cs_ppzksnark_verification_key
Definition: r1cs_ppzksnark.hpp:152
libsnark::sp_compliance_step_pcd_circuit_maker::field_logsize
static size_t field_logsize()
protoboard.hpp
libsnark::sp_compliance_step_pcd_circuit_maker::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::sp_translation_step_pcd_circuit_maker::unpacked_sp_translation_step_pcd_circuit_input
pb_variable_array< FieldT > unpacked_sp_translation_step_pcd_circuit_input
Definition: sp_pcd_circuits.hpp:143
libsnark::sp_compliance_step_pcd_circuit_maker::unpack_sp_translation_step_vk_and_incoming_message_payload_digests
std::vector< multipacking_gadget< FieldT > > unpack_sp_translation_step_vk_and_incoming_message_payload_digests
Definition: sp_pcd_circuits.hpp:65
libsnark::sp_translation_step_pcd_circuit_maker::field_logsize
static size_t field_logsize()
cp_handler.hpp
libsnark::sp_translation_step_pcd_circuit_maker::get_circuit
r1cs_constraint_system< FieldT > get_circuit() const
libsnark::sp_compliance_step_pcd_circuit_maker::sp_translation_step_vk_bits
pb_variable_array< FieldT > sp_translation_step_vk_bits
Definition: sp_pcd_circuits.hpp:72
libsnark::sp_translation_step_pcd_circuit_maker::input_capacity_in_bits
static size_t input_capacity_in_bits()
libsnark::get_sp_compliance_step_pcd_circuit_input
r1cs_primary_input< libff::Fr< ppT > > get_sp_compliance_step_pcd_circuit_input(const libff::bit_vector &sp_translation_step_vk_bits, const r1cs_pcd_compliance_predicate_primary_input< libff::Fr< ppT >> &primary_input)
pairing_params.hpp
libsnark::sp_compliance_step_pcd_circuit_maker
Definition: sp_pcd_circuits.hpp:47
libsnark::sp_translation_step_pcd_circuit_maker::online_verifier
std::shared_ptr< r1cs_ppzksnark_online_verifier_gadget< ppT > > online_verifier
Definition: sp_pcd_circuits.hpp:153
libsnark::sp_compliance_step_pcd_circuit_maker::generate_r1cs_witness
void generate_r1cs_witness(const r1cs_ppzksnark_verification_key< other_curve< ppT >> &translation_step_pcd_circuit_vk, 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 >>> &incoming_proofs)
r1cs_ppzksnark_verifier_gadget.hpp
libsnark::sp_translation_step_pcd_circuit_maker::sp_translation_step_pcd_circuit_input
pb_variable_array< FieldT > sp_translation_step_pcd_circuit_input
Definition: sp_pcd_circuits.hpp:142
libsnark::r1cs_auxiliary_input
std::vector< FieldT > r1cs_auxiliary_input
Definition: r1cs.hpp:84
libsnark::sp_compliance_step_pcd_circuit_maker::local_data
pb_variable_array< FieldT > local_data
Definition: sp_pcd_circuits.hpp:83
libsnark::sp_compliance_step_pcd_circuit_maker::zero
pb_variable< FieldT > zero
Definition: sp_pcd_circuits.hpp:56
libsnark::sp_translation_step_pcd_circuit_maker::unpack_sp_translation_step_pcd_circuit_input
std::shared_ptr< multipacking_gadget< FieldT > > unpack_sp_translation_step_pcd_circuit_input
Definition: sp_pcd_circuits.hpp:146
libsnark::sp_translation_step_pcd_circuit_maker::get_auxiliary_input
r1cs_auxiliary_input< FieldT > get_auxiliary_input() const
libsnark::sp_compliance_step_pcd_circuit_maker::compliance_predicate
r1cs_pcd_compliance_predicate< FieldT > compliance_predicate
Definition: sp_pcd_circuits.hpp:52
libsnark::pb_variable
Definition: pb_variable.hpp:24
libsnark::sp_compliance_step_pcd_circuit_maker::unpack_incoming_messages
std::vector< multipacking_gadget< FieldT > > unpack_incoming_messages
Definition: sp_pcd_circuits.hpp:91
libsnark::pb_variable_array
Definition: pb_variable.hpp:44
libsnark::sp_compliance_step_pcd_circuit_maker::FieldT
libff::Fr< ppT > FieldT
Definition: sp_pcd_circuits.hpp:50
libsnark::r1cs_constraint_system
Definition: protoboard.hpp:25
libsnark::sp_compliance_step_pcd_circuit_maker::hash_outgoing_message
std::shared_ptr< CRH_with_field_out_gadget< FieldT > > hash_outgoing_message
Definition: sp_pcd_circuits.hpp:59
libsnark::get_sp_translation_step_pcd_circuit_input
r1cs_primary_input< libff::Fr< ppT > > get_sp_translation_step_pcd_circuit_input(const libff::bit_vector &sp_translation_step_vk_bits, const r1cs_pcd_compliance_predicate_primary_input< libff::Fr< other_curve< ppT >>> &primary_input)
libsnark::other_curve
typename pairing_selector< ppT >::other_curve_type other_curve
Definition: pairing_params.hpp:117
libsnark::sp_compliance_step_pcd_circuit_maker::hash_incoming_messages
std::vector< CRH_with_field_out_gadget< FieldT > > hash_incoming_messages
Definition: sp_pcd_circuits.hpp:68
libsnark::sp_compliance_step_pcd_circuit_maker::blocks_for_incoming_messages
std::vector< block_variable< FieldT > > blocks_for_incoming_messages
Definition: sp_pcd_circuits.hpp:61
libsnark::sp_compliance_step_pcd_circuit_maker::sp_translation_step_vk_and_incoming_message_payload_digests
std::vector< pb_variable_array< FieldT > > sp_translation_step_vk_and_incoming_message_payload_digests
Definition: sp_pcd_circuits.hpp:63
libsnark::sp_compliance_step_pcd_circuit_maker::get_circuit
r1cs_constraint_system< FieldT > get_circuit() const
libsnark::sp_compliance_step_pcd_circuit_maker::input_capacity_in_bits
static size_t input_capacity_in_bits()
libsnark::sp_compliance_step_pcd_circuit_maker::outgoing_message_bits
pb_variable_array< FieldT > outgoing_message_bits
Definition: sp_pcd_circuits.hpp:87
libsnark::sp_translation_step_pcd_circuit_maker::FieldT
libff::Fr< ppT > FieldT
Definition: sp_pcd_circuits.hpp:138
libsnark::sp_translation_step_pcd_circuit_maker::verifier_input
pb_variable_array< FieldT > verifier_input
Definition: sp_pcd_circuits.hpp:144
libsnark::sp_compliance_step_pcd_circuit_maker::get_primary_input
r1cs_primary_input< FieldT > get_primary_input() const
libsnark::sp_translation_step_pcd_circuit_maker::field_capacity
static size_t field_capacity()
libsnark::r1cs_pcd_compliance_predicate_primary_input
Definition: r1cs_pcd_params.hpp:17
libsnark::sp_compliance_step_pcd_circuit_maker::pb
protoboard< FieldT > pb
Definition: sp_pcd_circuits.hpp:54
libsnark::sp_compliance_step_pcd_circuit_maker::sp_compliance_step_pcd_circuit_input
pb_variable_array< FieldT > sp_compliance_step_pcd_circuit_input
Definition: sp_pcd_circuits.hpp:93
libsnark::sp_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 >> &compliance_step_proof)
libsnark::sp_compliance_step_pcd_circuit_maker::incoming_message_vars
std::vector< pb_variable_array< FieldT > > incoming_message_vars
Definition: sp_pcd_circuits.hpp:81
libsnark::r1cs_primary_input
std::vector< FieldT > r1cs_primary_input
Definition: r1cs.hpp:82
libsnark::protoboard
Definition: pb_variable.hpp:22