Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
Public Member Functions | Friends | List of all members
gadgetlib2::R1P_AND_Gadget Class Reference

#include <gadget.hpp>

Inheritance diagram for gadgetlib2::R1P_AND_Gadget:
Inheritance graph
[legend]
Collaboration diagram for gadgetlib2::R1P_AND_Gadget:
Collaboration graph
[legend]

Public Member Functions

void generateConstraints ()
 
void generateWitness ()
 
- Public Member Functions inherited from gadgetlib2::R1P_Gadget
 R1P_Gadget (ProtoboardPtr pb)
 
virtual ~R1P_Gadget ()=0
 
virtual void addRank1Constraint (const LinearCombination &a, const LinearCombination &b, const LinearCombination &c, const ::std::string &name)
 
- Public Member Functions inherited from gadgetlib2::Gadget
 Gadget (ProtoboardPtr pb)
 
void addUnaryConstraint (const LinearCombination &a, const ::std::string &name)
 
void addRank1Constraint (const LinearCombination &a, const LinearCombination &b, const LinearCombination &c, const ::std::string &name)
 
void enforceBooleanity (const Variable &var)
 
FElemval (const Variable &var)
 
FElem val (const LinearCombination &lc)
 
FieldType fieldType () const
 
bool flagIsSet (const FlagVariable &flag) const
 

Friends

class AND_Gadget
 

Additional Inherited Members

- Protected Attributes inherited from gadgetlib2::Gadget
ProtoboardPtr pb_
 

Detailed Description

Definition at line 199 of file gadget.hpp.

Member Function Documentation

◆ generateConstraints()

void gadgetlib2::R1P_AND_Gadget::generateConstraints ( )
virtual

Implements gadgetlib2::Gadget.

Definition at line 163 of file gadget.cpp.

164 {
166  sum_, result_, 0, "sum * result = 0 | sum == sum(input[i]) - n");
168  sumInverse_,
169  sum_,
170  1 - result_,
171  "sumInverse * sum = 1-result | sum == sum(input[i]) - n");
172 }
Here is the call graph for this function:

◆ generateWitness()

void gadgetlib2::R1P_AND_Gadget::generateWitness ( )
virtual

Reimplemented from gadgetlib2::Gadget.

Definition at line 174 of file gadget.cpp.

175 {
176  FElem sum = 0;
177  for (size_t i = 0; i < input_.size(); ++i) {
178  sum += val(input_[i]);
179  }
180  sum -= input_.size(); // sum(input[i]) - n ==> sum
181  if (sum == 0) { // AND(input[0], input[1], ...) == 1
182  val(sumInverse_) = 0;
183  val(result_) = 1;
184  } else { // AND(input[0], input[1], ...) == 0
185  val(sumInverse_) = sum.inverse(R1P);
186  val(result_) = 0;
187  }
188 }
Here is the call graph for this function:

Friends And Related Function Documentation

◆ AND_Gadget

friend class AND_Gadget
friend

Definition at line 211 of file gadget.hpp.


The documentation for this class was generated from the following files:
gadgetlib2::R1P_Gadget::addRank1Constraint
virtual void addRank1Constraint(const LinearCombination &a, const LinearCombination &b, const LinearCombination &c, const ::std::string &name)
Definition: gadget.cpp:72
gadgetlib2::Gadget::val
FElem & val(const Variable &var)
Definition: gadget.hpp:109
gadgetlib2::sum
LinearCombination sum(const VariableArray &inputs)
Definition: variable.cpp:616
gadgetlib2::R1P
@ R1P
Definition: variable.hpp:37