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

#include <gadget.hpp>

Inheritance diagram for gadgetlib2::R1P_InnerProduct_Gadget:
Inheritance graph
[legend]
Collaboration diagram for gadgetlib2::R1P_InnerProduct_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 A_
 
const VariableArray B_
 
const Variable result_
 

Friends

class InnerProduct_Gadget
 

Additional Inherited Members

- Protected Attributes inherited from gadgetlib2::Gadget
ProtoboardPtr pb_
 

Detailed Description

Definition at line 332 of file gadget.hpp.

Member Function Documentation

◆ generateConstraints()

void gadgetlib2::R1P_InnerProduct_Gadget::generateConstraints ( )
virtual

Implements gadgetlib2::Gadget.

Definition at line 399 of file gadget.cpp.

400 {
401  const int n = A_.size();
402  if (n == 1) {
403  addRank1Constraint(A_[0], B_[0], result_, "A[0] * B[0] = result");
404  return;
405  }
406  // else (n > 1)
408  A_[0], B_[0], partialSums_[0], "A[0] * B[0] = partialSums[0]");
409  for (int i = 1; i <= n - 2; ++i) {
411  A_[i],
412  B_[i],
413  partialSums_[i] - partialSums_[i - 1],
415  "A[%u] * B[%u] = partialSums[%u] - partialSums[%u]",
416  i,
417  i,
418  i,
419  i - 1));
420  }
422  A_[n - 1],
423  B_[n - 1],
424  result_ - partialSums_[n - 2],
425  "A[n-1] * B[n-1] = result - partialSums[n-2]");
426 }
Here is the call graph for this function:

◆ generateWitness()

void gadgetlib2::R1P_InnerProduct_Gadget::generateWitness ( )
virtual

Reimplemented from gadgetlib2::Gadget.

Definition at line 428 of file gadget.cpp.

429 {
430  const int n = A_.size();
431  if (n == 1) {
432  val(result_) = val(A_[0]) * val(B_[0]);
433  return;
434  }
435  // else (n > 1)
436  val(partialSums_[0]) = val(A_[0]) * val(B_[0]);
437  for (int i = 1; i <= n - 2; ++i) {
438  val(partialSums_[i]) =
439  val(partialSums_[i - 1]) + val(A_[i]) * val(B_[i]);
440  }
441  val(result_) = val(partialSums_[n - 2]) + val(A_[n - 1]) * val(B_[n - 1]);
442 }
Here is the call graph for this function:

Friends And Related Function Documentation

◆ InnerProduct_Gadget

friend class InnerProduct_Gadget
friend

Definition at line 350 of file gadget.hpp.

Member Data Documentation

◆ A_

const VariableArray gadgetlib2::R1P_InnerProduct_Gadget::A_

Definition at line 346 of file gadget.hpp.

◆ B_

const VariableArray gadgetlib2::R1P_InnerProduct_Gadget::B_

Definition at line 346 of file gadget.hpp.

◆ result_

const Variable gadgetlib2::R1P_InnerProduct_Gadget::result_

Definition at line 347 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_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_InnerProduct_Gadget::A_
const VariableArray A_
Definition: gadget.hpp:346
gadgetlib2::R1P_InnerProduct_Gadget::result_
const Variable result_
Definition: gadget.hpp:347
gadgetlib2::R1P_InnerProduct_Gadget::B_
const VariableArray B_
Definition: gadget.hpp:346