Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
tinyram_cpu_checker.hpp
Go to the documentation of this file.
1 
15 #ifndef TINYRAM_CPU_CHECKER_HPP_
16 #define TINYRAM_CPU_CHECKER_HPP_
17 
24 
25 namespace libsnark
26 {
27 
28 template<typename FieldT>
30 {
31 private:
33  pb_variable<FieldT> arg2_is_imm;
37 
38  std::vector<word_variable_gadget<FieldT>> prev_registers;
39  std::vector<word_variable_gadget<FieldT>> next_registers;
40  pb_variable<FieldT> prev_flag;
41  pb_variable<FieldT> next_flag;
42  pb_variable<FieldT> prev_tape1_exhausted;
43  pb_variable<FieldT> next_tape1_exhausted;
44 
45  std::shared_ptr<word_variable_gadget<FieldT>> prev_pc_addr_as_word_variable;
46  std::shared_ptr<word_variable_gadget<FieldT>> desval;
47  std::shared_ptr<word_variable_gadget<FieldT>> arg1val;
48  std::shared_ptr<word_variable_gadget<FieldT>> arg2val;
49 
50  std::shared_ptr<argument_decoder_gadget<FieldT>> decode_arguments;
51  pb_variable_array<FieldT> opcode_indicators;
52  std::shared_ptr<ALU_gadget<FieldT>> ALU;
53 
54  std::shared_ptr<doubleword_variable_gadget<FieldT>>
55  ls_prev_val_as_doubleword_variable;
56  std::shared_ptr<doubleword_variable_gadget<FieldT>>
57  ls_next_val_as_doubleword_variable;
58  std::shared_ptr<dual_variable_gadget<FieldT>> memory_subaddress;
59  pb_variable<FieldT> memory_subcontents;
60  pb_linear_combination<FieldT> memory_access_is_word;
61  pb_linear_combination<FieldT> memory_access_is_byte;
62  std::shared_ptr<memory_masking_gadget<FieldT>> check_memory;
63 
64  std::shared_ptr<word_variable_gadget<FieldT>> next_pc_addr_as_word_variable;
65  std::shared_ptr<consistency_enforcer_gadget<FieldT>> consistency_enforcer;
66 
67  pb_variable_array<FieldT> instruction_results;
68  pb_variable_array<FieldT> instruction_flags;
69 
70  pb_variable<FieldT> read_not1;
71 
72 public:
82 
94  const std::string &annotation_prefix);
95 
97  void generate_r1cs_witness() { assert(0); }
101  const tinyram_input_tape_iterator &aux_end);
102  void dump() const;
103 };
104 
105 } // namespace libsnark
106 
108 
109 #endif // TINYRAM_CPU_CHECKER_HPP_
libsnark::gadget::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark
Definition: accumulation_vector.hpp:18
libsnark::tinyram_cpu_checker::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::tinyram_cpu_checker::dump
void dump() const
libsnark::tinyram_cpu_checker::generate_r1cs_witness
void generate_r1cs_witness()
Definition: tinyram_cpu_checker.hpp:97
libsnark::tinyram_cpu_checker::next_pc_addr
pb_variable_array< FieldT > next_pc_addr
Definition: tinyram_cpu_checker.hpp:80
memory_masking_gadget.hpp
libsnark::tinyram_cpu_checker::prev_state
pb_variable_array< FieldT > prev_state
Definition: tinyram_cpu_checker.hpp:75
libsnark::tinyram_input_tape_iterator
tinyram_input_tape::const_iterator tinyram_input_tape_iterator
Definition: tinyram_aux.hpp:124
libsnark::tinyram_cpu_checker::next_state
pb_variable_array< FieldT > next_state
Definition: tinyram_cpu_checker.hpp:79
word_variable_gadget.hpp
argument_decoder_gadget.hpp
libsnark::tinyram_cpu_checker
Definition: tinyram_cpu_checker.hpp:29
tinyram_protoboard.hpp
libsnark::tinyram_cpu_checker::generate_r1cs_witness_other
void generate_r1cs_witness_other(tinyram_input_tape_iterator &aux_it, const tinyram_input_tape_iterator &aux_end)
alu_gadget.hpp
libsnark::pb_linear_combination
Definition: pb_variable.hpp:101
libsnark::tinyram_cpu_checker::prev_pc_val
pb_variable_array< FieldT > prev_pc_val
Definition: tinyram_cpu_checker.hpp:74
libsnark::tinyram_gadget::pb
tinyram_protoboard< FieldT > & pb
Definition: tinyram_protoboard.hpp:34
libsnark::tinyram_cpu_checker::ls_addr
pb_variable_array< FieldT > ls_addr
Definition: tinyram_cpu_checker.hpp:76
libsnark::tinyram_protoboard
Definition: tinyram_protoboard.hpp:23
tinyram_cpu_checker.tcc
libsnark::pb_variable
Definition: pb_variable.hpp:24
libsnark::pb_variable_array
Definition: pb_variable.hpp:44
libsnark::tinyram_cpu_checker::ls_prev_val
pb_variable_array< FieldT > ls_prev_val
Definition: tinyram_cpu_checker.hpp:77
libsnark::tinyram_standard_gadget
Definition: tinyram_protoboard.hpp:45
libsnark::tinyram_cpu_checker::ls_next_val
pb_variable_array< FieldT > ls_next_val
Definition: tinyram_cpu_checker.hpp:78
libsnark::tinyram_cpu_checker::tinyram_cpu_checker
tinyram_cpu_checker(tinyram_protoboard< FieldT > &pb, pb_variable_array< FieldT > &prev_pc_addr, pb_variable_array< FieldT > &prev_pc_val, pb_variable_array< FieldT > &prev_state, pb_variable_array< FieldT > &ls_addr, pb_variable_array< FieldT > &ls_prev_val, pb_variable_array< FieldT > &ls_next_val, pb_variable_array< FieldT > &next_state, pb_variable_array< FieldT > &next_pc_addr, pb_variable< FieldT > &next_has_accepted, const std::string &annotation_prefix)
libsnark::tinyram_cpu_checker::generate_r1cs_witness_address
void generate_r1cs_witness_address()
consistency_enforcer_gadget.hpp
libsnark::tinyram_cpu_checker::prev_pc_addr
pb_variable_array< FieldT > prev_pc_addr
Definition: tinyram_cpu_checker.hpp:73
libsnark::tinyram_cpu_checker::next_has_accepted
pb_variable< FieldT > next_has_accepted
Definition: tinyram_cpu_checker.hpp:81