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

#include <gadget.hpp>

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

Public Member Functions

void generateConstraints ()
 
void generateWitness ()
 
virtual VariableArray indicatorVariables () const
 
- Public Member Functions inherited from gadgetlib2::LooseMUX_GadgetBase
virtual ~LooseMUX_GadgetBase ()=0
 
- 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 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 Attributes

MultiPackedWordArray inputs_
 
const Variable index_
 
const VariableArray output_
 
const Variable successFlag_
 

Friends

class LooseMUX_Gadget
 

Additional Inherited Members

- Protected Member Functions inherited from gadgetlib2::LooseMUX_GadgetBase
 LooseMUX_GadgetBase (ProtoboardPtr pb)
 
- Protected Attributes inherited from gadgetlib2::Gadget
ProtoboardPtr pb_
 

Detailed Description

Definition at line 394 of file gadget.hpp.

Member Function Documentation

◆ generateConstraints()

void gadgetlib2::R1P_LooseMUX_Gadget::generateConstraints ( )
virtual

Implements gadgetlib2::Gadget.

Definition at line 513 of file gadget.cpp.

514 {
515  const size_t n = inputs_.size();
516  for (size_t i = 0; i < n; ++i) {
518  indicators_[i],
519  (index_ - i),
520  0,
521  GADGETLIB2_FMT("indicators[%u] * (index - %u) = 0", i, i));
522  }
524  sum(indicators_), 1, successFlag_, "sum(indicators) * 1 = successFlag");
526  for (auto &curGadget : computeResult_) {
527  curGadget->generateConstraints();
528  }
529 }
Here is the call graph for this function:

◆ generateWitness()

void gadgetlib2::R1P_LooseMUX_Gadget::generateWitness ( )
virtual

Reimplemented from gadgetlib2::Gadget.

Definition at line 531 of file gadget.cpp.

532 {
533  const size_t n = inputs_.size();
534  /* assumes that idx can be fit in ulong; true for our purposes for now */
535  const size_t index = val(index_).asLong();
536  const FElem arraySize = n;
537  for (size_t i = 0; i < n; ++i) {
538  val(indicators_[i]) = 0; // Redundant, but just in case.
539  }
540  if (index >= n) { // || index < 0
541  val(successFlag_) = 0;
542  } else { // index in bounds
543  val(indicators_[index]) = 1;
544  val(successFlag_) = 1;
545  }
546  for (auto &curGadget : computeResult_) {
547  curGadget->generateWitness();
548  }
549 }
Here is the call graph for this function:

◆ indicatorVariables()

VariableArray gadgetlib2::R1P_LooseMUX_Gadget::indicatorVariables ( ) const
virtual

Implements gadgetlib2::LooseMUX_GadgetBase.

Definition at line 551 of file gadget.cpp.

552 {
553  return indicators_;
554 }

Friends And Related Function Documentation

◆ LooseMUX_Gadget

friend class LooseMUX_Gadget
friend

Definition at line 417 of file gadget.hpp.

Member Data Documentation

◆ index_

const Variable gadgetlib2::R1P_LooseMUX_Gadget::index_

Definition at line 411 of file gadget.hpp.

◆ inputs_

MultiPackedWordArray gadgetlib2::R1P_LooseMUX_Gadget::inputs_

Definition at line 410 of file gadget.hpp.

◆ output_

const VariableArray gadgetlib2::R1P_LooseMUX_Gadget::output_

Definition at line 412 of file gadget.hpp.

◆ successFlag_

const Variable gadgetlib2::R1P_LooseMUX_Gadget::successFlag_

Definition at line 413 of file gadget.hpp.


The documentation for this class was generated from the following files:
gadgetlib2::GADGETLIB2_FMT
::std::string GADGETLIB2_FMT(const char *format,...)
Definition: infrastructure.cpp:49
gadgetlib2::R1P_LooseMUX_Gadget::successFlag_
const Variable successFlag_
Definition: gadget.hpp:413
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::FElem::asLong
long asLong() const
Definition: variable.hpp:140
gadgetlib2::R1P_LooseMUX_Gadget::index_
const Variable index_
Definition: gadget.hpp:411
gadgetlib2::R1P_LooseMUX_Gadget::inputs_
MultiPackedWordArray inputs_
Definition: gadget.hpp:410
gadgetlib2::Gadget::enforceBooleanity
void enforceBooleanity(const Variable &var)
Definition: gadget.hpp:108
gadgetlib2::sum
LinearCombination sum(const VariableArray &inputs)
Definition: variable.cpp:616