Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
integration.cpp
Go to the documentation of this file.
1 
10 
11 namespace libsnark
12 {
13 
14 linear_combination<libff::Fr<libff::default_ec_pp>>
17 {
18  typedef libff::Fr<libff::default_ec_pp> FieldT;
20 
21  linear_combination<FieldT> result = lc.second * variable<FieldT>(0);
22  for (const GLA::linear_term_t &lt : lc.first) {
23  result = result + lt.second * variable<FieldT>(lt.first + 1);
24  }
25 
26  return result;
27 }
28 
29 r1cs_constraint_system<libff::Fr<libff::default_ec_pp>>
31 {
32  typedef libff::Fr<libff::default_ec_pp> FieldT;
34 
36  const GLA adapter;
37 
38  GLA::protoboard_t converted_pb = adapter.convert(pb);
39  for (const GLA::constraint_t &constr : converted_pb.first) {
40  result.constraints.emplace_back(r1cs_constraint<FieldT>(
41  convert_gadgetlib2_linear_combination(std::get<0>(constr)),
42  convert_gadgetlib2_linear_combination(std::get<1>(constr)),
43  convert_gadgetlib2_linear_combination(std::get<2>(constr))));
44  }
45  // The number of variables is the highest index created.
46  // TODO: If there are multiple protoboards, or variables not assigned to a
47  // protoboard, then getNextFreeIndex() is *not* the number of variables! See
48  // also in get_variable_assignment_from_gadgetlib2.
49  const size_t num_variables = GLA::getNextFreeIndex();
50  result.primary_input_size = pb.numInputs();
51  result.auxiliary_input_size = num_variables - pb.numInputs();
52  return result;
53 }
54 
55 r1cs_variable_assignment<libff::Fr<libff::default_ec_pp>>
57 {
58  typedef libff::Fr<libff::default_ec_pp> FieldT;
60 
61  // The number of variables is the highest index created. This is also the
62  // required size for the assignment vector.
63  // TODO: If there are multiple protoboards, or variables not assigned to a
64  // protoboard, then getNextFreeIndex() is *not* the number of variables! See
65  // also in get_constraint_system_from_gadgetlib2.
66  const size_t num_vars = GLA::getNextFreeIndex();
67  const GLA adapter;
68  r1cs_variable_assignment<FieldT> result(num_vars, FieldT::zero());
69  VariableAssignment assignment = pb.assignment();
70 
71  // Go over all assigned values of the protoboard, from every variable-value
72  // pair, put the value in the variable.index place of the new assignment.
73  for (VariableAssignment::iterator iter = assignment.begin();
74  iter != assignment.end();
75  ++iter) {
76  result[GLA::getVariableIndex(iter->first)] =
77  adapter.convert(iter->second);
78  }
79 
80  return result;
81 }
82 
83 } // namespace libsnark
gadgetlib2::Protoboard::numInputs
size_t numInputs() const
Definition: protoboard.hpp:67
libsnark::r1cs_constraint_system::constraints
std::vector< r1cs_constraint< FieldT > > constraints
Definition: r1cs.hpp:120
libsnark::r1cs_constraint
Definition: protoboard.hpp:23
gadgetlib2::GadgetLibAdapter
Definition: adapters.hpp:37
libsnark::linear_combination
Definition: variable.hpp:40
libsnark
Definition: accumulation_vector.hpp:18
libsnark::r1cs_constraint_system::primary_input_size
size_t primary_input_size
Definition: r1cs.hpp:117
libsnark::variable
Definition: variable.hpp:47
gadgetlib2::GadgetLibAdapter::convert
linear_term_t convert(const LinearTerm &lt) const
Definition: adapters.cpp:20
libsnark::r1cs_constraint_system::auxiliary_input_size
size_t auxiliary_input_size
Definition: r1cs.hpp:118
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
gadgetlib2::VariableAssignment
::std::map< Variable, FElem, Variable::VariableStrictOrder > VariableAssignment
Definition: variable.hpp:348
adapters.hpp
gadgetlib2::GLA
GadgetLibAdapter GLA
Definition: adapters.cpp:18
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::convert_gadgetlib2_linear_combination
linear_combination< libff::Fr< libff::default_ec_pp > > convert_gadgetlib2_linear_combination(const gadgetlib2::GadgetLibAdapter::linear_combination_t &lc)
Definition: integration.cpp:15
gadgetlib2::Protoboard
Definition: protoboard.hpp:38
libsnark::r1cs_variable_assignment
std::vector< FieldT > r1cs_variable_assignment
Definition: r1cs.hpp:88
libsnark::r1cs_constraint_system
Definition: protoboard.hpp:25
integration.hpp
gadgetlib2::Protoboard::assignment
VariableAssignment assignment() const
Definition: protoboard.hpp:102
gadgetlib2::GadgetLibAdapter::linear_combination_t
::std::pair< sparse_vec_t, Fp_elem_t > linear_combination_t
Definition: adapters.hpp:44