| 
    Clearmatics Libsnark
    0.1
    
   C++ library for zkSNARK proofs 
   | 
 
 
 
 
Go to the documentation of this file.
   14 #ifndef ALU_ARITHMETIC_HPP_ 
   15 #define ALU_ARITHMETIC_HPP_ 
   25 template<
typename FieldT>
 
   59 template<
typename FieldT>
 
   64     std::shared_ptr<packing_gadget<FieldT>> pack_result;
 
   65     std::shared_ptr<disjunction_gadget<FieldT>> not_all_zeros;
 
  103             not_all_zeros_result,
 
  113 template<
typename FieldT>
 
  118     std::shared_ptr<packing_gadget<FieldT>> pack_result;
 
  119     std::shared_ptr<disjunction_gadget<FieldT>> not_all_zeros;
 
  157             not_all_zeros_result,
 
  167 template<
typename FieldT>
 
  172     std::shared_ptr<packing_gadget<FieldT>> pack_result;
 
  173     std::shared_ptr<disjunction_gadget<FieldT>> not_all_zeros;
 
  211             not_all_zeros_result,
 
  221 template<
typename FieldT>
 
  227     std::shared_ptr<packing_gadget<FieldT>> pack_result;
 
  228     std::shared_ptr<disjunction_gadget<FieldT>> not_all_zeros;
 
  266             not_all_zeros_result,
 
  276 template<
typename FieldT>
 
  283     std::shared_ptr<packing_gadget<FieldT>> unpack_addition, pack_result;
 
  312         res_word_and_flag = res_word;
 
  333 template<
typename FieldT>
 
  342     std::shared_ptr<packing_gadget<FieldT>> unpack_intermediate, pack_result;
 
  373         res_word_and_negated_flag = res_word;
 
  374         res_word_and_negated_flag.emplace_back(negated_flag);
 
  378             res_word_and_negated_flag,
 
  394 template<
typename FieldT>
 
  427 template<
typename FieldT>
 
  460 template<
typename FieldT>
 
  525 template<
typename FieldT>
 
  535     std::shared_ptr<packing_gadget<FieldT>> pack_modified_arg1;
 
  536     std::shared_ptr<packing_gadget<FieldT>> pack_modified_arg2;
 
  537     std::shared_ptr<comparison_gadget<FieldT>> comparator;
 
  579         modified_arg1.emplace_back(negated_arg1val_sign);
 
  583         modified_arg2.emplace_back(negated_arg2val_sign);
 
  593             packed_modified_arg1,
 
  598             packed_modified_arg2,
 
  604             packed_modified_arg2,
 
  605             packed_modified_arg1,
 
  618 template<
typename FieldT>
 
  626     std::shared_ptr<packing_gadget<FieldT>> pack_mull_result;
 
  627     std::shared_ptr<packing_gadget<FieldT>> pack_umulh_result;
 
  628     std::shared_ptr<disjunction_gadget<FieldT>> compute_flag;
 
  667             mul_result.
bits.begin(),
 
  668             mul_result.
bits.begin() + 
pb.ap.w);
 
  671             mul_result.
bits.begin() + 
pb.ap.w,
 
  672             mul_result.
bits.begin() + 2 * 
pb.ap.w);
 
  700 template<
typename FieldT>
 
  708     std::shared_ptr<packing_gadget<FieldT>> pack_top;
 
  714     std::shared_ptr<packing_gadget<FieldT>> pack_smulh_result;
 
  748             mul_result.
bits.begin() + 
pb.ap.w,
 
  749             mul_result.
bits.begin() + 2 * 
pb.ap.w);
 
  761                 mul_result.
bits.begin() + 
pb.ap.w - 1,
 
  762                 mul_result.
bits.begin() + 2 * 
pb.ap.w),
 
  783 template<
typename FieldT>
 
  801     std::shared_ptr<comparison_gadget<FieldT>> r_less_B;
 
  856 template<
typename FieldT>
 
  861     std::shared_ptr<packing_gadget<FieldT>> pack_reversed_input;
 
  864     std::vector<pb_variable_array<FieldT>> shifted_out_bits;
 
  867     std::shared_ptr<disjunction_gadget<FieldT>> check_oversize_shift;
 
  871     std::shared_ptr<packing_gadget<FieldT>> unpack_result;
 
  873     std::shared_ptr<packing_gadget<FieldT>> pack_reversed_result;
 
  910         logw = libff::log2(
pb.ap.w);
 
  926         shifted_out_bits.resize(
logw);
 
  927         for (
size_t i = 0; i < 
logw; ++i) {
 
  928             shifted_out_bits[i].allocate(
 
  972 #endif // ALU_ARITHMETIC_HPP_ 
  
void generate_r1cs_constraints()
 
void allocate(protoboard< FieldT > &pb, const size_t n, const std::string &annotation_prefix)
 
void test_ALU_cmov_gadget(const size_t w)
 
void generate_r1cs_witness()
 
const word_variable_gadget< FieldT > arg2val
 
const std::string annotation_prefix
 
ALU_cmov_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &result, const pb_variable< FieldT > &result_flag, const std::string &annotation_prefix="")
 
ALU_cmp_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &cmpe_result, const pb_variable< FieldT > &cmpe_result_flag, const pb_variable< FieldT > &cmpa_result, const pb_variable< FieldT > &cmpa_result_flag, const pb_variable< FieldT > &cmpae_result, const pb_variable< FieldT > &cmpae_result_flag, const std::string &annotation_prefix="")
 
ALU_not_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &result, const pb_variable< FieldT > &result_flag, const std::string &annotation_prefix="")
 
const pb_variable< FieldT > result
 
ALU_shr_shl_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &shr_result, const pb_variable< FieldT > &shr_flag, const pb_variable< FieldT > &shl_result, const pb_variable< FieldT > &shl_flag, const std::string &annotation_prefix="")
 
const word_variable_gadget< FieldT > desval
 
pb_variable_array< FieldT > bits
 
void generate_r1cs_constraints()
 
void generate_r1cs_constraints()
 
void generate_r1cs_witness()
 
void allocate(protoboard< FieldT > &pb, const std::string &annotation)
 
void generate_r1cs_witness()
 
ALU_arithmetic_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &result, const pb_variable< FieldT > &result_flag, const std::string &annotation_prefix="")
 
void generate_r1cs_witness()
 
void test_ALU_sub_gadget(const size_t w)
 
void test_ALU_cmpe_gadget(const size_t w)
 
ALU_mov_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &result, const pb_variable< FieldT > &result_flag, const std::string &annotation_prefix="")
 
void generate_r1cs_witness()
 
void test_ALU_not_gadget(const size_t w)
 
void test_ALU_and_gadget(const size_t w)
 
const pb_variable_array< FieldT > opcode_indicators
 
void generate_r1cs_witness()
 
void generate_r1cs_constraints()
 
void test_ALU_mov_gadget(const size_t w)
 
void generate_r1cs_constraints()
 
ALU_smul_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &smulh_result, const pb_variable< FieldT > &smulh_flag, const std::string &annotation_prefix="")
 
const pb_variable< FieldT > umod_flag
 
const pb_variable< FieldT > cmpg_result
 
void generate_r1cs_witness()
 
void generate_r1cs_witness()
 
ALU_umul_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &mull_result, const pb_variable< FieldT > &mull_flag, const pb_variable< FieldT > &umulh_result, const pb_variable< FieldT > &umulh_flag, const std::string &annotation_prefix="")
 
void test_ALU_umulh_gadget(const size_t w)
 
const pb_variable< FieldT > umod_result
 
const pb_variable< FieldT > cmpg_result_flag
 
void test_ALU_cmpae_gadget(const size_t w)
 
pb_variable< FieldT > shr_flag
 
ALU_or_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &result, const pb_variable< FieldT > &result_flag, const std::string &annotation_prefix="")
 
const pb_variable< FieldT > cmpge_result
 
void generate_r1cs_constraints()
 
void generate_r1cs_witness()
 
const pb_variable< FieldT > umulh_result
 
const pb_variable< FieldT > cmpa_result_flag
 
void generate_r1cs_witness()
 
const pb_variable< FieldT > umulh_flag
 
void test_ALU_cmpg_gadget(const size_t w)
 
void test_ALU_mull_gadget(const size_t w)
 
ALU_xor_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &result, const pb_variable< FieldT > &result_flag, const std::string &annotation_prefix="")
 
pb_variable< FieldT > shr_result
 
ALU_add_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &result, const pb_variable< FieldT > &result_flag, const std::string &annotation_prefix="")
 
void test_ALU_udiv_gadget(const size_t w)
 
void test_ALU_shl_gadget(const size_t w)
 
void generate_r1cs_constraints()
 
void generate_r1cs_constraints()
 
void test_ALU_add_gadget(const size_t w)
 
void generate_r1cs_constraints()
 
void test_ALU_cmpge_gadget(const size_t w)
 
void test_ALU_smulh_gadget(const size_t w)
 
const pb_variable< FieldT > mull_result
 
const pb_variable< FieldT > mull_flag
 
const pb_variable< FieldT > udiv_flag
 
void generate_r1cs_constraints()
 
tinyram_protoboard< FieldT > & pb
 
const pb_variable< FieldT > cmpa_result
 
void test_ALU_or_gadget(const size_t w)
 
void generate_r1cs_witness()
 
const pb_variable< FieldT > cmpae_result
 
ALU_cmps_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &cmpg_result, const pb_variable< FieldT > &cmpg_result_flag, const pb_variable< FieldT > &cmpge_result, const pb_variable< FieldT > &cmpge_result_flag, const std::string &annotation_prefix="")
 
void test_ALU_shr_gadget(const size_t w)
 
void generate_r1cs_witness()
 
const pb_variable< FieldT > smulh_flag
 
void generate_r1cs_witness()
 
const word_variable_gadget< FieldT > arg1val
 
void generate_r1cs_constraints()
 
const pb_variable< FieldT > udiv_result
 
const pb_variable< FieldT > smulh_result
 
void test_ALU_xor_gadget(const size_t w)
 
void test_ALU_umod_gadget(const size_t w)
 
pb_variable< FieldT > shl_result
 
const pb_variable< FieldT > cmpe_result
 
void generate_r1cs_witness()
 
const pb_variable< FieldT > cmpae_result_flag
 
const pb_variable< FieldT > flag
 
Output is 0 iff the sum of inputs is 0. Output is 1 otherwise.
 
const pb_variable< FieldT > result_flag
 
pb_variable< FieldT > shl_flag
 
void test_ALU_cmpa_gadget(const size_t w)
 
ALU_divmod_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &udiv_result, const pb_variable< FieldT > &udiv_flag, const pb_variable< FieldT > &umod_result, const pb_variable< FieldT > &umod_flag, const std::string &annotation_prefix="")
 
ALU_sub_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &result, const pb_variable< FieldT > &result_flag, const std::string &annotation_prefix="")
 
void generate_r1cs_constraints()
 
ALU_and_gadget(tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &result, const pb_variable< FieldT > &result_flag, const std::string &annotation_prefix="")
 
void generate_r1cs_constraints()
 
const pb_variable< FieldT > cmpe_result_flag
 
const pb_variable< FieldT > cmpge_result_flag
 
void generate_r1cs_constraints()