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

#include <gadget.hpp>

Inheritance diagram for gadgetlib2::R1P_OR_Gadget:
Inheritance graph
[legend]
Collaboration diagram for gadgetlib2::R1P_OR_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
 

Public Attributes

const VariableArray input_
 
const Variable result_
 

Friends

class OR_Gadget
 

Additional Inherited Members

- Protected Attributes inherited from gadgetlib2::Gadget
ProtoboardPtr pb_
 

Detailed Description

Definition at line 279 of file gadget.hpp.

Member Function Documentation

◆ generateConstraints()

void gadgetlib2::R1P_OR_Gadget::generateConstraints ( )
virtual

Implements gadgetlib2::Gadget.

Definition at line 297 of file gadget.cpp.

298 {
300  sum_, 1 - result_, 0, "sum * (1 - result) = 0 | sum == sum(input[i])");
302  sumInverse_,
303  sum_,
304  result_,
305  "sum * sumInverse = result | sum == sum(input[i])");
306 }
Here is the call graph for this function:

◆ generateWitness()

void gadgetlib2::R1P_OR_Gadget::generateWitness ( )
virtual

Reimplemented from gadgetlib2::Gadget.

Definition at line 308 of file gadget.cpp.

309 {
310  FElem sum = 0;
311  for (size_t i = 0; i < input_.size(); ++i) { // sum(input[i]) ==> sum
312  sum += val(input_[i]);
313  }
314  if (sum == 0) { // OR(input[0], input[1], ...) == 0
315  val(sumInverse_) = 0;
316  val(result_) = 0;
317  } else { // OR(input[0], input[1], ...) == 1
318  val(sumInverse_) = sum.inverse(R1P);
319  val(result_) = 1;
320  }
321 }
Here is the call graph for this function:

Friends And Related Function Documentation

◆ OR_Gadget

friend class OR_Gadget
friend

Definition at line 295 of file gadget.hpp.

Member Data Documentation

◆ input_

const VariableArray gadgetlib2::R1P_OR_Gadget::input_

Definition at line 291 of file gadget.hpp.

◆ result_

const Variable gadgetlib2::R1P_OR_Gadget::result_

Definition at line 292 of file gadget.hpp.


The documentation for this class was generated from the following files:
gadgetlib2::R1P_OR_Gadget::input_
const VariableArray input_
Definition: gadget.hpp:291
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::R1P_OR_Gadget::result_
const Variable result_
Definition: gadget.hpp:292
gadgetlib2::sum
LinearCombination sum(const VariableArray &inputs)
Definition: variable.cpp:616
gadgetlib2::R1P
@ R1P
Definition: variable.hpp:37