Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
simple_example.cpp
Go to the documentation of this file.
1 
12 
13 namespace libsnark
14 {
15 
16 /* NOTE: all examples here actually generate one constraint less to account for
17  * soundness constraint in QAP */
18 r1cs_example<libff::Fr<libff::default_ec_pp>>
20 {
21  typedef libff::Fr<libff::default_ec_pp> FieldT;
22 
24  // necessary in case a protoboard was built before, libsnark assumes
25  // variable indices always begin with 0 so we must reset the index before
26  // creating constraints which will be used by libsnark
28 
29  // create a gadgetlib2 gadget. This part is done by both generator and
30  // prover.
32  gadgetlib2::VariableArray A(size, "A");
33  gadgetlib2::VariableArray B(size, "B");
34  gadgetlib2::Variable result("result");
35  auto g = gadgetlib2::InnerProduct_Gadget::create(pb, A, B, result);
36  // create constraints. This part is done by generator.
37  g->generateConstraints();
38  // create assignment (witness). This part is done by prover.
39  for (size_t k = 0; k < size; ++k) {
40  pb->val(A[k]) = std::rand() % 2;
41  pb->val(B[k]) = std::rand() % 2;
42  }
43  g->generateWitness();
44  // translate constraint system to libsnark format.
47  // translate full variable assignment to libsnark format
48  const r1cs_variable_assignment<FieldT> full_assignment =
50  // extract primary and auxiliary input
51  const r1cs_primary_input<FieldT> primary_input(
52  full_assignment.begin(), full_assignment.begin() + cs.num_inputs());
53  const r1cs_auxiliary_input<FieldT> auxiliary_input(
54  full_assignment.begin() + cs.num_inputs(), full_assignment.end());
55 
56  assert(cs.is_valid());
57  assert(cs.is_satisfied(primary_input, auxiliary_input));
58 
59  return r1cs_example<FieldT>(cs, primary_input, auxiliary_input);
60 }
61 
62 } // namespace libsnark
libsnark::r1cs_constraint_system::num_inputs
size_t num_inputs() const
libsnark::r1cs_constraint_system::is_satisfied
bool is_satisfied(const r1cs_primary_input< FieldT > &primary_input, const r1cs_auxiliary_input< FieldT > &auxiliary_input) const
gadgetlib2::GadgetLibAdapter::resetVariableIndex
static void resetVariableIndex()
Definition: adapters.cpp:69
libsnark
Definition: accumulation_vector.hpp:18
libsnark::r1cs_example
Definition: r1cs_examples.hpp:25
simple_example.hpp
libsnark::get_constraint_system_from_gadgetlib2
r1cs_constraint_system< libff::Fr< libff::default_ec_pp > > get_constraint_system_from_gadgetlib2(const gadgetlib2::Protoboard &pb)
Definition: integration.cpp:30
adapters.hpp
gadgetlib2::VariableArray
VariableArray.
Definition: variable.hpp:353
gadget.hpp
libsnark::get_variable_assignment_from_gadgetlib2
r1cs_variable_assignment< libff::Fr< libff::default_ec_pp > > get_variable_assignment_from_gadgetlib2(const gadgetlib2::Protoboard &pb)
Definition: integration.cpp:56
libsnark::r1cs_auxiliary_input
std::vector< FieldT > r1cs_auxiliary_input
Definition: r1cs.hpp:84
libsnark::r1cs_variable_assignment
std::vector< FieldT > r1cs_variable_assignment
Definition: r1cs.hpp:88
libsnark::r1cs_constraint_system::is_valid
bool is_valid() const
gadgetlib2::initPublicParamsFromDefaultPp
PublicParams initPublicParamsFromDefaultPp()
Definition: pp.cpp:23
gadgetlib2::Protoboard::create
static ProtoboardPtr create(const FieldType &fieldType, ParamsCPtr pParams=NULL)
Definition: protoboard.hpp:54
libsnark::r1cs_constraint_system
Definition: protoboard.hpp:25
integration.hpp
gadgetlib2::Variable
A formal variable, field agnostic.
Definition: variable.hpp:306
libsnark::gen_r1cs_example_from_gadgetlib2_protoboard
r1cs_example< libff::Fr< libff::default_ec_pp > > gen_r1cs_example_from_gadgetlib2_protoboard(const size_t size)
Definition: simple_example.cpp:19
libsnark::r1cs_primary_input
std::vector< FieldT > r1cs_primary_input
Definition: r1cs.hpp:82
gadgetlib2::R1P
@ R1P
Definition: variable.hpp:37