Clearmatics Libsnark
0.1
C++ library for zkSNARK proofs
|
Go to the documentation of this file.
37 #ifndef RAM_COMPLIANCE_PREDICATE_HPP_
38 #define RAM_COMPLIANCE_PREDICATE_HPP_
55 template<
typename ramT>
59 void print_bits(
const libff::bit_vector &bv)
const;
80 const libff::bit_vector
root,
96 template<
typename ramT>
130 std::shared_ptr<r1cs_pcd_message<FieldT>>
get_message()
const;
133 template<
typename ramT>
154 template<
typename ramT>
170 template<
typename ramT>
173 ram_base_field<ramT>,
174 ram_protoboard<ramT>>
187 std::shared_ptr<ram_pcd_message_variable<ramT>>
next;
188 std::shared_ptr<ram_pcd_message_variable<ramT>>
cur;
193 std::shared_ptr<bit_vector_copy_gadget<FieldT>> copy_root_initial;
194 std::shared_ptr<bit_vector_copy_gadget<FieldT>> copy_pc_addr_initial;
195 std::shared_ptr<bit_vector_copy_gadget<FieldT>> copy_cpu_state_initial;
201 std::shared_ptr<packing_gadget<FieldT>> pack_cur_timestamp;
203 std::shared_ptr<packing_gadget<FieldT>> pack_next_timestamp;
209 std::shared_ptr<bit_vector_copy_gadget<FieldT>> initialize_cur_cpu_state;
210 std::shared_ptr<bit_vector_copy_gadget<FieldT>> initialize_prev_pc_addr;
212 std::shared_ptr<bit_vector_copy_gadget<FieldT>> initialize_root;
215 std::shared_ptr<digest_variable<FieldT>> prev_pc_val_digest;
216 std::shared_ptr<digest_variable<FieldT>> cur_root_digest;
217 std::shared_ptr<merkle_authentication_path_variable<FieldT, HashT>>
218 instruction_fetch_merkle_proof;
219 std::shared_ptr<memory_load_gadget<FieldT, HashT>> instruction_fetch;
221 std::shared_ptr<digest_variable<FieldT>> next_root_digest;
226 std::shared_ptr<digest_variable<FieldT>> ls_prev_val_digest;
227 std::shared_ptr<digest_variable<FieldT>> ls_next_val_digest;
228 std::shared_ptr<merkle_authentication_path_variable<FieldT, HashT>>
230 std::shared_ptr<merkle_authentication_path_variable<FieldT, HashT>>
232 std::shared_ptr<memory_load_store_gadget<FieldT, HashT>> load_store_checker;
236 std::shared_ptr<ram_cpu_checker<ramT>> cpu_checker;
239 std::shared_ptr<bit_vector_copy_gadget<FieldT>> clear_next_root;
240 std::shared_ptr<bit_vector_copy_gadget<FieldT>> clear_next_pc_addr;
241 std::shared_ptr<bit_vector_copy_gadget<FieldT>> clear_next_cpu_state;
243 std::shared_ptr<bit_vector_copy_gadget<FieldT>> copy_temp_next_root;
244 std::shared_ptr<bit_vector_copy_gadget<FieldT>> copy_temp_next_pc_addr;
245 std::shared_ptr<bit_vector_copy_gadget<FieldT>> copy_temp_next_cpu_state;
258 &incoming_message_values,
267 const size_t time_bound);
274 #endif // RAM_COMPLIANCE_PREDICATE_HPP_
std::shared_ptr< ram_pcd_message_variable< ramT > > next
std::vector< size_t > ram_input_tape
typename ramT::architecture_params_type ram_architecture_params
const ram_input_tape< ramT >::const_iterator & aux_end
const std::string annotation_prefix
std::shared_ptr< multipacking_gadget< FieldT > > unpack_payload
typename ramT::protoboard_type ram_protoboard
void generate_r1cs_constraints()
pb_variable_array< FieldT > pc_addr_initial
pb_variable_array< FieldT > packed_payload
static std::shared_ptr< r1cs_pcd_message< FieldT > > get_final_case_msg(const ram_architecture_params< ramT > &ap, const ram_boot_trace< ramT > &primary_input, const size_t time_bound)
void generate_r1cs_constraints()
static size_t unpacked_payload_size_in_bits(const ram_architecture_params< ramT > &ap)
pb_variable_array< FieldT > cpu_state_initial
typename ramT::base_field_type ram_base_field
pb_variable< FieldT > has_accepted
protoboard< ram_base_field< ramT > > & pb
pb_variable_array< FieldT > root_initial
void generate_r1cs_witness_from_bits()
pb_variable_array< FieldT > root
pb_variable_array< FieldT > pc_addr
ram_base_field< ramT > FieldT
CRH_with_bit_out_gadget< FieldT > HashT
pb_variable_array< FieldT > timestamp
ram_base_field< ramT > FieldT
ram_architecture_params< ramT > ap
delegated_ra_memory< CRH_with_bit_out_gadget< FieldT > > & mem
ram_compliance_predicate_handler(const ram_architecture_params< ramT > &ap)
libff::bit_vector cpu_state_initial
ram_base_field< ramT > FieldT
std::shared_ptr< ram_pcd_message_variable< ramT > > cur
std::shared_ptr< r1cs_pcd_message< FieldT > > get_message() const
libff::bit_vector root_initial
ram_pcd_message_variable(protoboard< FieldT > &pb, const ram_architecture_params< ramT > &ap, const std::string &annotation_prefix)
ram_architecture_params< ramT > ap
ram_pcd_message(const size_t type, const ram_architecture_params< ramT > &ap, const size_t timestamp, const libff::bit_vector root_initial, const libff::bit_vector root, const size_t pc_addr, const libff::bit_vector cpu_state, const size_t pc_addr_initial, const libff::bit_vector cpu_state_initial, const bool has_accepted)
std::vector< FieldT > r1cs_variable_assignment
ram_architecture_params< ramT > ap
r1cs_variable_assignment< FieldT > as_r1cs_variable_assignment() const
pb_variable_array< FieldT > all_unpacked_vars
ram_base_field< ramT > FieldT
libff::bit_vector unpacked_payload_as_bits() const
void generate_r1cs_witness_from_packed()
pb_variable< FieldT > is_halt_case
static std::shared_ptr< r1cs_pcd_message< FieldT > > get_base_case_message(const ram_architecture_params< ramT > &ap, const ram_boot_trace< ramT > &primary_input)
libff::bit_vector cpu_state
void allocate_unpacked_part()
ram_base_field< ramT > FieldT
r1cs_variable_assignment< FieldT > payload_as_r1cs_variable_assignment() const
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)
ram_pcd_local_data_variable(protoboard< FieldT > &pb, const std::string &annotation_prefix)
ram_input_tape< ramT >::const_iterator & aux_it
compliance_predicate_handler< ram_base_field< ramT >, ram_protoboard< ramT > > base_handler
pb_variable_array< FieldT > cpu_state
ram_pcd_local_data(const bool is_halt_case, delegated_ra_memory< CRH_with_bit_out_gadget< FieldT >> &mem, typename ram_input_tape< ramT >::const_iterator &aux_it, const typename ram_input_tape< ramT >::const_iterator &aux_end)