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

#include <gadget.hpp>

Inheritance diagram for gadgetlib2::Toggle_Gadget:
Inheritance graph
[legend]
Collaboration diagram for gadgetlib2::Toggle_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 FlagVariable &toggle, const LinearCombination &zeroValue, const LinearCombination &oneValue, const Variable &result)
 

Additional Inherited Members

- Protected Attributes inherited from gadgetlib2::Gadget
ProtoboardPtr pb_
 

Detailed Description

A gadget for the following semantics: If toggle is 0, zeroValue --> result If toggle is 1, oneValue --> result Uses 1 constraint

Definition at line 682 of file gadget.hpp.

Member Function Documentation

◆ create()

GadgetPtr gadgetlib2::Toggle_Gadget::create ( ProtoboardPtr  pb,
const FlagVariable toggle,
const LinearCombination zeroValue,
const LinearCombination oneValue,
const Variable result 
)
static

Definition at line 941 of file gadget.cpp.

947 {
948  GadgetPtr pGadget(
949  new Toggle_Gadget(pb, toggle, zeroValue, oneValue, result));
950  pGadget->init();
951  return pGadget;
952 }

◆ generateConstraints()

void gadgetlib2::Toggle_Gadget::generateConstraints ( )
virtual

Implements gadgetlib2::Gadget.

Definition at line 954 of file gadget.cpp.

955 {
956  pb_->addRank1Constraint(
957  toggle_,
958  oneValue_ - zeroValue_,
959  result_ - zeroValue_,
960  "result = (1 - toggle) * zeroValue + toggle * oneValue");
961 }

◆ generateWitness()

void gadgetlib2::Toggle_Gadget::generateWitness ( )
virtual

Reimplemented from gadgetlib2::Gadget.

Definition at line 963 of file gadget.cpp.

964 {
965  if (val(toggle_) == 0) {
966  val(result_) = val(zeroValue_);
967  } else if (val(toggle_) == 1) {
968  val(result_) = val(oneValue_);
969  } else {
970  GADGETLIB_FATAL("Toggle value must be Boolean.");
971  }
972 }
Here is the call graph for this function:

The documentation for this class was generated from the following files:
gadgetlib2::Gadget::val
FElem & val(const Variable &var)
Definition: gadget.hpp:109
GADGETLIB_FATAL
#define GADGETLIB_FATAL(msg)
Definition: infrastructure.hpp:85
gadgetlib2::GadgetPtr
::std::shared_ptr< Gadget > GadgetPtr
Definition: gadget.hpp:119
gadgetlib2::Gadget::pb_
ProtoboardPtr pb_
Definition: gadget.hpp:87