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

#include <gadget.hpp>

Inheritance diagram for gadgetlib2::R1P_CompressionPacking_Gadget:
Inheritance graph
[legend]
Collaboration diagram for gadgetlib2::R1P_CompressionPacking_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 unpacked_
 
const VariableArray packed_
 

Friends

class CompressionPacking_Gadget
 

Additional Inherited Members

- Protected Attributes inherited from gadgetlib2::Gadget
ProtoboardPtr pb_
 

Detailed Description

Definition at line 461 of file gadget.hpp.

Member Function Documentation

◆ generateConstraints()

void gadgetlib2::R1P_CompressionPacking_Gadget::generateConstraints ( )
virtual

Implements gadgetlib2::Gadget.

Definition at line 654 of file gadget.cpp.

655 {
656  const int n = unpacked_.size();
657  LinearCombination packed;
658  FElem two_i(R1P_Elem(1)); // Will hold 2^i
659  for (int i = 0; i < n; ++i) {
660  packed += unpacked_[i] * two_i;
661  two_i += two_i;
662  if (packingMode_ == PackingMode::UNPACK) {
664  }
665  }
667  packed_[0], 1, packed, "packed[0] = sum(2^i * unpacked[i])");
668 }

◆ generateWitness()

void gadgetlib2::R1P_CompressionPacking_Gadget::generateWitness ( )
virtual

Reimplemented from gadgetlib2::Gadget.

Definition at line 670 of file gadget.cpp.

671 {
672  const int n = unpacked_.size();
673  if (packingMode_ == PackingMode::PACK) {
674  FElem packedVal = 0;
675  FElem two_i(R1P_Elem(1)); // will hold 2^i
676  for (int i = 0; i < n; ++i) {
678  val(unpacked_[i]).asLong() == 0 ||
679  val(unpacked_[i]).asLong() == 1,
681  "unpacked[%u] = %u. Expected a Boolean value.",
682  i,
683  val(unpacked_[i]).asLong()));
684  packedVal += two_i * val(unpacked_[i]).asLong();
685  two_i += two_i;
686  }
687  val(packed_[0]) = packedVal;
688  return;
689  }
690  // else (UNPACK)
692  packingMode_ == PackingMode::UNPACK,
693  "Packing gadget created with unknown packing mode.");
694  for (int i = 0; i < n; ++i) {
695  val(unpacked_[i]) = val(packed_[0]).getBit(i, R1P);
696  }
697 }
Here is the call graph for this function:

Friends And Related Function Documentation

◆ CompressionPacking_Gadget

friend class CompressionPacking_Gadget
friend

Definition at line 479 of file gadget.hpp.

Member Data Documentation

◆ packed_

const VariableArray gadgetlib2::R1P_CompressionPacking_Gadget::packed_

Definition at line 476 of file gadget.hpp.

◆ unpacked_

const VariableArray gadgetlib2::R1P_CompressionPacking_Gadget::unpacked_

Definition at line 475 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_CompressionPacking_Gadget::packed_
const VariableArray packed_
Definition: gadget.hpp:476
gadgetlib2::PackingMode::UNPACK
@ UNPACK
gadgetlib2::R1P_CompressionPacking_Gadget::unpacked_
const VariableArray unpacked_
Definition: gadget.hpp:475
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::Gadget::enforceBooleanity
void enforceBooleanity(const Variable &var)
Definition: gadget.hpp:108
gadgetlib2::PackingMode::PACK
@ PACK
GADGETLIB_ASSERT
#define GADGETLIB_ASSERT(predicate, msg)
Definition: infrastructure.hpp:94
gadgetlib2::FElem::getBit
int getBit(unsigned int i, const FieldType &fieldType)
Definition: variable.cpp:128
gadgetlib2::R1P
@ R1P
Definition: variable.hpp:37