Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
adapters.cpp
Go to the documentation of this file.
1 
11 
14 
15 namespace gadgetlib2
16 {
17 
19 
21 {
22  const variable_index_t var = lt.variable_.index_;
23  const Fp_elem_t coeff = convert(lt.coeff_);
24  return {var, coeff};
25 }
26 
28 {
29  sparse_vec_t sparse_vec;
30  sparse_vec.reserve(lc.linearTerms_.size());
31  for (auto lt : lc.linearTerms_) {
32  sparse_vec.emplace_back(convert(lt));
33  }
34  const Fp_elem_t offset = convert(lc.constant_);
35  return {sparse_vec, offset};
36 }
37 
38 GLA::constraint_t GLA::convert(const Constraint &constraint) const
39 {
40  const auto rank1_constraint =
41  dynamic_cast<const Rank1Constraint &>(constraint);
42  return constraint_t(
43  convert(rank1_constraint.a()),
44  convert(rank1_constraint.b()),
45  convert(rank1_constraint.c()));
46 }
47 
49 {
50  constraint_sys_t retval;
51  retval.reserve(constraint_sys.constraintsPtrs_.size());
52  for (auto constraintPtr : constraint_sys.constraintsPtrs_) {
53  retval.emplace_back(convert(*constraintPtr));
54  }
55  return retval;
56 }
57 
59 {
60  assignment_t retval;
61  for (const auto &assignmentPair : assignment) {
62  const variable_index_t var = assignmentPair.first.index_;
63  const Fp_elem_t elem = convert(assignmentPair.second);
64  retval[var] = elem;
65  }
66  return retval;
67 }
68 
70 { // This is a hack, used for testing
71  Variable::nextFreeIndex_ = 0;
72 }
73 
74 /***TODO: Remove reliance of GadgetLibAdapter conversion on global variable
75 indices, and the resulting limit of single protoboard instance at a time. This
76 limitation is to prevent a logic bug that may occur if the variables used are
77 given different indices in different generations of the same constraint system.
78 The indices are assigned on the Variable constructor, using the global variable
79 nextFreeIndex. Thus, creating two protoboards in the same program may cause
80 unexpected behavior when converting.
81 Moreover, the bug will create more variables than needed in the converted
82 system, e.g. if variables 0,1,3,4 were used in the gadgetlib2 generated system,
83 then the conversion will create a new r1cs system with variables 0,1,2,3,4 and
84 assign variable 2 the value zero (when converting the assignment). Everything
85 should be fixed soon. If you are sure you know what you are doing, you can
86 comment out the ASSERT line.
87 */
89 {
90  // GADGETLIB_ASSERT(pb.numVars()==getNextFreeIndex(), "Some Variables were
91  // created and not used, or, more than one protoboard was used.");
92  return protoboard_t(
94 }
95 
97 {
99  fElem.promoteToFieldType(
100  gadgetlib2::R1P); // convert fElem from FConst to R1P_Elem
101  const R1P_Elem *pR1P = dynamic_cast<R1P_Elem *>(fElem.elem_.get());
102  return pR1P->elem_;
103 }
104 
106  const GLA::linear_combination_t &lhs, const GLA::linear_term_t &rhs)
107 {
108  return lhs.first.size() == 1 && lhs.first.at(0) == rhs &&
109  lhs.second == Fp(0);
110 }
111 
112 } // namespace gadgetlib2
gadgetlib2::GadgetLibAdapter
Definition: adapters.hpp:37
gadgetlib2::GadgetLibAdapter::resetVariableIndex
static void resetVariableIndex()
Definition: adapters.cpp:69
gadgetlib2::FElem::promoteToFieldType
void promoteToFieldType(FieldType type)
Definition: variable.cpp:86
gadgetlib2::GadgetLibAdapter::constraint_t
::std::tuple< linear_combination_t, linear_combination_t, linear_combination_t > constraint_t
Definition: adapters.hpp:47
gadgetlib2::GadgetLibAdapter::convert
linear_term_t convert(const LinearTerm &lt) const
Definition: adapters.cpp:20
gadgetlib2::LinearTerm
LinearTerm.
Definition: variable.hpp:474
gadgetlib2::ConstraintSystem::constraintsPtrs_
::std::vector< ConstraintPtr > constraintsPtrs_
Definition: constraint.hpp:157
gadgetlib2::GadgetLibAdapter::constraint_sys_t
::std::vector< constraint_t > constraint_sys_t
Definition: adapters.hpp:48
gadgetlib2::Protoboard::constraintSystem
ConstraintSystem constraintSystem() const
Definition: protoboard.hpp:101
gadgetlib2::GadgetLibAdapter::sparse_vec_t
::std::vector< linear_term_t > sparse_vec_t
Definition: adapters.hpp:43
gadgetlib2::VariableAssignment
::std::map< Variable, FElem, Variable::VariableStrictOrder > VariableAssignment
Definition: variable.hpp:348
adapters.hpp
gadgetlib2::GLA
GadgetLibAdapter GLA
Definition: adapters.cpp:18
gadgetlib2::GadgetLibAdapter::Fp_elem_t
gadgetlib2::Fp Fp_elem_t
Definition: adapters.hpp:41
gadgetlib2::LinearCombination::constant_
FElem constant_
Definition: variable.hpp:507
gadgetlib2::GadgetLibAdapter::variable_index_t
unsigned long variable_index_t
Definition: adapters.hpp:40
gadgetlib2::FElem
Definition: variable.hpp:101
gadgetlib2::GadgetLibAdapter::assignment_t
::std::map< variable_index_t, Fp_elem_t > assignment_t
Definition: adapters.hpp:49
gadgetlib2::Protoboard
Definition: protoboard.hpp:38
gadgetlib2::Variable
A formal variable, field agnostic.
Definition: variable.hpp:306
gadgetlib2::Protoboard::assignment
VariableAssignment assignment() const
Definition: protoboard.hpp:102
gadgetlib2::ConstraintSystem
Definition: constraint.hpp:153
gadgetlib2::Rank1Constraint
Definition: constraint.hpp:83
gadgetlib2::operator==
bool operator==(const GLA::linear_combination_t &lhs, const GLA::linear_term_t &rhs)
Definition: adapters.cpp:105
gadgetlib2::LinearCombination::linearTerms_
::std::vector< LinearTerm > linearTerms_
Definition: variable.hpp:506
gadgetlib2::LinearCombination
LinearCombination.
Definition: variable.hpp:503
gadgetlib2::GadgetLibAdapter::linear_term_t
::std::pair< variable_index_t, Fp_elem_t > linear_term_t
Definition: adapters.hpp:42
gadgetlib2::GadgetLibAdapter::linear_combination_t
::std::pair< sparse_vec_t, Fp_elem_t > linear_combination_t
Definition: adapters.hpp:44
gadgetlib2
Definition: adapters.cpp:15
gadgetlib2::GadgetLibAdapter::protoboard_t
::std::pair< constraint_sys_t, assignment_t > protoboard_t
Definition: adapters.hpp:50
gadgetlib2::R1P
@ R1P
Definition: variable.hpp:37
gadgetlib2::Constraint
Definition: constraint.hpp:42
gadgetlib2::Fp
libff::Fr< libff::default_ec_pp > Fp
Definition: pp.hpp:29
gadgetlib2::R1P_Elem
Definition: variable.hpp:245