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

#include <gadget.hpp>

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

Public Member Functions

void generateConstraints ()
 
void generateWitness ()
 
- 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
 

Static Public Member Functions

static GadgetPtr create (ProtoboardPtr pb, const LinearCombination &condition, const FlagVariable &flag)
 

Additional Inherited Members

- Protected Attributes inherited from gadgetlib2::Gadget
ProtoboardPtr pb_
 

Detailed Description

A gadget for the following semantics: condition != 0 --> flag = 1 condition == 0 --> flag = 0 Uses 2 constraints

Definition at line 730 of file gadget.hpp.

Member Function Documentation

◆ create()

GadgetPtr gadgetlib2::ConditionalFlag_Gadget::create ( ProtoboardPtr  pb,
const LinearCombination condition,
const FlagVariable flag 
)
static

Definition at line 1008 of file gadget.cpp.

1012 {
1013  GadgetPtr pGadget(new ConditionalFlag_Gadget(pb, condition, flag));
1014  pGadget->init();
1015  return pGadget;
1016 }

◆ generateConstraints()

void gadgetlib2::ConditionalFlag_Gadget::generateConstraints ( )
virtual

Implements gadgetlib2::Gadget.

Definition at line 1018 of file gadget.cpp.

1019 {
1020  pb_->addRank1Constraint(
1021  condition_, negate(flag_), 0, "condition * not(flag) = 0");
1022  pb_->addRank1Constraint(
1023  condition_,
1024  auxConditionInverse_,
1025  flag_,
1026  "condition * auxConditionInverse = flag");
1027 }
Here is the call graph for this function:

◆ generateWitness()

void gadgetlib2::ConditionalFlag_Gadget::generateWitness ( )
virtual

Reimplemented from gadgetlib2::Gadget.

Definition at line 1029 of file gadget.cpp.

1030 {
1031  if (val(condition_) == 0) {
1032  val(flag_) = 0;
1033  val(auxConditionInverse_) = 0;
1034  } else {
1035  val(flag_) = 1;
1036  val(auxConditionInverse_) = val(condition_).inverse(fieldType());
1037  }
1038 }
Here is the call graph for this function:

The documentation for this class was generated from the following files:
gadgetlib2::negate
LinearCombination negate(const LinearCombination &lc)
Definition: variable.cpp:625
gadgetlib2::Gadget::val
FElem & val(const Variable &var)
Definition: gadget.hpp:109
gadgetlib2::GadgetPtr
::std::shared_ptr< Gadget > GadgetPtr
Definition: gadget.hpp:119
gadgetlib2::FElem::inverse
FElem inverse(const FieldType &fieldType)
Definition: variable.cpp:122
gadgetlib2::Gadget::pb_
ProtoboardPtr pb_
Definition: gadget.hpp:87
gadgetlib2::Gadget::fieldType
FieldType fieldType() const
Definition: gadget.hpp:111