Clearmatics Libsnark
0.1
C++ library for zkSNARK proofs
|
Go to the documentation of this file.
8 #ifndef BASIC_GADGETS_HPP_
9 #define BASIC_GADGETS_HPP_
19 template<
typename FieldT>
21 protoboard<FieldT> &pb,
22 const pb_linear_combination<FieldT> &lc,
23 const std::string &annotation_prefix =
"");
25 template<
typename FieldT>
27 protoboard<FieldT> &pb,
28 const pb_linear_combination<FieldT> &lc,
30 const std::string &annotation_prefix =
"");
63 std::vector<packing_gadget<FieldT>> packers;
113 std::shared_ptr<field_vector_copy_gadget<FieldT>>
copier;
126 const bool enforce_source_bitness,
const bool enforce_target_bitness);
133 std::shared_ptr<packing_gadget<FieldT>> consistency_check;
214 assert(
inputs.size() >= 1);
238 assert(
inputs.size() >= 1);
251 std::shared_ptr<packing_gadget<FieldT>> pack_alpha;
253 std::shared_ptr<disjunction_gadget<FieldT>> all_zeros_test;
322 assert(
A.size() >= 1);
323 assert(
A.size() ==
B.size());
332 template<
typename FieldT>
346 std::shared_ptr<inner_product_gadget<FieldT>> compute_result;
380 template<
typename FieldT,
typename VarT>
382 protoboard<FieldT> &pb,
383 const std::vector<FieldT> &base,
384 const std::vector<std::pair<VarT, FieldT>> &v,
386 const std::string &annotation_prefix);
388 template<
typename FieldT,
typename VarT>
390 protoboard<FieldT> &pb,
391 const std::vector<FieldT> &base,
392 const std::vector<std::pair<VarT, FieldT>> &v,
399 #endif // BASIC_GADGETS_HPP_
dual_variable_gadget(protoboard< FieldT > &pb, const pb_variable< FieldT > &packed, const size_t width, const std::string &annotation_prefix="")
pb_variable_array< FieldT > packed_target
void generate_r1cs_constraints()
std::shared_ptr< field_vector_copy_gadget< FieldT > > copier
void allocate(protoboard< FieldT > &pb, const size_t n, const std::string &annotation_prefix)
pb_variable< FieldT > packed
void generate_r1cs_constraints(const bool enforce_bitness)
const pb_linear_combination_array< FieldT > bits
const pb_linear_combination< FieldT > B
dual_variable_gadget(protoboard< FieldT > &pb, const pb_variable_array< FieldT > &bits, const std::string &annotation_prefix="")
const pb_variable< FieldT > index
const std::string annotation_prefix
packing_gadget(protoboard< FieldT > &pb, const pb_linear_combination_array< FieldT > &bits, const pb_linear_combination< FieldT > &packed, const std::string &annotation_prefix="")
loose_multiplexing_gadget(protoboard< FieldT > &pb, const pb_linear_combination_array< FieldT > &arr, const pb_variable< FieldT > &index, const pb_variable< FieldT > &result, const pb_variable< FieldT > &success_flag, const std::string &annotation_prefix="")
void generate_r1cs_equals_const_constraint(protoboard< FieldT > &pb, const pb_linear_combination< FieldT > &lc, const FieldT &c, const std::string &annotation_prefix="")
pb_variable_array< FieldT > bits
void allocate(protoboard< FieldT > &pb, const std::string &annotation)
bit_vector_copy_gadget(protoboard< FieldT > &pb, const pb_variable_array< FieldT > &source_bits, const pb_variable_array< FieldT > &target_bits, const pb_linear_combination< FieldT > &do_copy, const size_t chunk_size, const std::string &annotation_prefix="")
const pb_variable< FieldT > output
void generate_r1cs_constraints(const bool enforce_source_bitness, const bool enforce_target_bitness)
protoboard< FieldT > & pb
disjunction_gadget(protoboard< FieldT > &pb, const pb_linear_combination_array< FieldT > &inputs, const pb_variable< FieldT > &output, const std::string &annotation_prefix="")
const pb_linear_combination< FieldT > A
void generate_r1cs_witness_from_bits()
void generate_r1cs_witness_from_bits()
void generate_r1cs_witness_from_packed()
field_vector_copy_gadget(protoboard< FieldT > &pb, const pb_variable_array< FieldT > &source, const pb_variable_array< FieldT > &target, const pb_linear_combination< FieldT > &do_copy, const std::string &annotation_prefix="")
void generate_r1cs_constraints()
void generate_r1cs_constraints()
const pb_variable< FieldT > result
void generate_r1cs_witness()
const pb_linear_combination< FieldT > packed
void generate_boolean_r1cs_constraint(protoboard< FieldT > &pb, const pb_linear_combination< FieldT > &lc, const std::string &annotation_prefix="")
multipacking_gadget(protoboard< FieldT > &pb, const pb_linear_combination_array< FieldT > &bits, const pb_linear_combination_array< FieldT > &packed_vars, const size_t chunk_size, const std::string &annotation_prefix="")
void generate_r1cs_constraints()
const pb_variable< FieldT > success_flag
void generate_r1cs_witness_from_packed()
void generate_r1cs_constraints(const bool enforce_bitness)
const pb_linear_combination_array< FieldT > B
dual_variable_gadget(protoboard< FieldT > &pb, const size_t width, const std::string &annotation_prefix="")
void generate_r1cs_witness()
pb_variable_array< FieldT > packed_source
const pb_variable< FieldT > result
const pb_linear_combination_array< FieldT > A
void generate_r1cs_witness()
std::shared_ptr< multipacking_gadget< FieldT > > pack_target
void create_linear_combination_witness(protoboard< FieldT > &pb, const std::vector< FieldT > &base, const std::vector< std::pair< VarT, FieldT >> &v, const VarT &target)
void generate_r1cs_constraints()
void generate_r1cs_witness()
inner_product_gadget(protoboard< FieldT > &pb, const pb_linear_combination_array< FieldT > &A, const pb_linear_combination_array< FieldT > &B, const pb_variable< FieldT > &result, const std::string &annotation_prefix="")
const pb_variable_array< FieldT > source
pb_variable_array< FieldT > alpha
const pb_variable_array< FieldT > target
void create_linear_combination_constraints(protoboard< FieldT > &pb, const std::vector< FieldT > &base, const std::vector< std::pair< VarT, FieldT >> &v, const VarT &target, const std::string &annotation_prefix)
const pb_linear_combination_array< FieldT > inputs
conjunction_gadget(protoboard< FieldT > &pb, const pb_variable_array< FieldT > &inputs, const pb_variable< FieldT > &output, const std::string &annotation_prefix="")
comparison_gadget(protoboard< FieldT > &pb, const size_t n, const pb_linear_combination< FieldT > &A, const pb_linear_combination< FieldT > &B, const pb_variable< FieldT > &less, const pb_variable< FieldT > &less_or_eq, const std::string &annotation_prefix="")
const pb_variable_array< FieldT > inputs
const pb_variable< FieldT > output
const pb_variable_array< FieldT > source_bits
void generate_r1cs_witness_from_packed()
const pb_linear_combination_array< FieldT > arr
void generate_r1cs_constraints()
void generate_r1cs_witness_from_bits()
void generate_r1cs_witness()
Output is 0 iff the sum of inputs is 0. Output is 1 otherwise.
const pb_linear_combination< FieldT > do_copy
void generate_r1cs_witness()
const pb_variable< FieldT > less
const pb_variable< FieldT > less_or_eq
const pb_linear_combination< FieldT > do_copy
void generate_r1cs_constraints(const bool enforce_bitness)
void generate_r1cs_witness()
const pb_linear_combination_array< FieldT > packed_vars
std::shared_ptr< multipacking_gadget< FieldT > > pack_source
const pb_linear_combination_array< FieldT > bits
const pb_variable_array< FieldT > target_bits