Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
Public Types | Public Member Functions | Public Attributes | List of all members
libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m > Class Template Reference

#include <exponentiation_gadget.hpp>

Inheritance diagram for libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >:
Inheritance graph
[legend]
Collaboration diagram for libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >:
Collaboration graph
[legend]

Public Types

typedef FpkT::my_Fp FieldT
 

Public Member Functions

 exponentiation_gadget (protoboard< FieldT > &pb, const Fpk_variableT< FpkT > &elt, const libff::bigint< m > &power, const Fpk_variableT< FpkT > &result, const std::string &annotation_prefix)
 
void generate_r1cs_constraints ()
 
void generate_r1cs_witness ()
 
- Public Member Functions inherited from libsnark::gadget< FpkT::my_Fp >
 gadget (protoboard< FpkT::my_Fp > &pb, const std::string &annotation_prefix)
 

Public Attributes

std::vector< long > NAF
 
std::vector< std::shared_ptr< Fpk_variableT< FpkT > > > intermediate
 
std::vector< std::shared_ptr< Fpk_mul_gadgetT< FpkT > > > addition_steps
 
std::vector< std::shared_ptr< Fpk_mul_gadgetT< FpkT > > > subtraction_steps
 
std::vector< std::shared_ptr< Fpk_sqr_gadgetT< FpkT > > > doubling_steps
 
Fpk_variableT< FpkT > elt
 
libff::bigint< m > power
 
Fpk_variableT< FpkT > result
 
size_t intermed_count
 
size_t add_count
 
size_t sub_count
 
size_t dbl_count
 

Additional Inherited Members

- Protected Attributes inherited from libsnark::gadget< FpkT::my_Fp >
protoboard< FpkT::my_Fp > & pb
 
const std::string annotation_prefix
 

Detailed Description

template<typename FpkT, template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
class libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >

The exponentiation gadget verifies field exponentiation in the field F_{p^k}.

Note that the power is a constant (i.e., hardcoded into the gadget).

Definition at line 38 of file exponentiation_gadget.hpp.

Member Typedef Documentation

◆ FieldT

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
typedef FpkT::my_Fp libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::FieldT

Definition at line 41 of file exponentiation_gadget.hpp.

Constructor & Destructor Documentation

◆ exponentiation_gadget()

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::exponentiation_gadget ( protoboard< FieldT > &  pb,
const Fpk_variableT< FpkT > &  elt,
const libff::bigint< m > &  power,
const Fpk_variableT< FpkT > &  result,
const std::string &  annotation_prefix 
)

Member Function Documentation

◆ generate_r1cs_constraints()

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
void libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::generate_r1cs_constraints ( )

◆ generate_r1cs_witness()

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
void libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::generate_r1cs_witness ( )

Member Data Documentation

◆ add_count

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
size_t libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::add_count

Definition at line 54 of file exponentiation_gadget.hpp.

◆ addition_steps

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
std::vector<std::shared_ptr<Fpk_mul_gadgetT<FpkT> > > libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::addition_steps

Definition at line 45 of file exponentiation_gadget.hpp.

◆ dbl_count

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
size_t libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::dbl_count

Definition at line 56 of file exponentiation_gadget.hpp.

◆ doubling_steps

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
std::vector<std::shared_ptr<Fpk_sqr_gadgetT<FpkT> > > libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::doubling_steps

Definition at line 47 of file exponentiation_gadget.hpp.

◆ elt

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
Fpk_variableT<FpkT> libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::elt

Definition at line 49 of file exponentiation_gadget.hpp.

◆ intermed_count

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
size_t libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::intermed_count

Definition at line 53 of file exponentiation_gadget.hpp.

◆ intermediate

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
std::vector<std::shared_ptr<Fpk_variableT<FpkT> > > libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::intermediate

Definition at line 44 of file exponentiation_gadget.hpp.

◆ NAF

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
std::vector<long> libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::NAF

Definition at line 42 of file exponentiation_gadget.hpp.

◆ power

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
libff::bigint<m> libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::power

Definition at line 50 of file exponentiation_gadget.hpp.

◆ result

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
Fpk_variableT<FpkT> libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::result

Definition at line 51 of file exponentiation_gadget.hpp.

◆ sub_count

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
size_t libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::sub_count

Definition at line 55 of file exponentiation_gadget.hpp.

◆ subtraction_steps

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_gadgetT, template< class > class Fpk_sqr_gadgetT, mp_size_t m>
std::vector<std::shared_ptr<Fpk_mul_gadgetT<FpkT> > > libsnark::exponentiation_gadget< FpkT, Fpk_variableT, Fpk_mul_gadgetT, Fpk_sqr_gadgetT, m >::subtraction_steps

Definition at line 46 of file exponentiation_gadget.hpp.


The documentation for this class was generated from the following file: