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()