nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType > Class Template Reference

#include <exponentiation.hpp>

+ Inheritance diagram for nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >:
+ Collaboration diagram for nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >:

Public Types

typedef FpkT::base_field_type FieldType
 
typedef NumberType integral_type
 

Public Member Functions

template<typename Backend , typename multiprecision::expression_template_option ExpressionTemplates>
 exponentiation_component (blueprint< FieldType > &bp, const Fpk_variableT< FpkT > &elt, const multiprecision::number< Backend, ExpressionTemplates > &power, const Fpk_variableT< FpkT > &result)
 
void generate_r1cs_constraints ()
 
void generate_r1cs_witness ()
 

Public Attributes

std::size_t add_count
 
std::vector< std::shared_ptr< Fpk_mul_componentT< FpkT > > > addition_steps
 
std::size_t dbl_count
 
std::vector< std::shared_ptr< Fpk_sqr_componentT< FpkT > > > doubling_steps
 
Fpk_variableT< FpkT > elt
 
std::size_t intermed_count
 
std::vector< std::shared_ptr< Fpk_variableT< FpkT > > > intermediate
 
std::vector< long > NAF
 
integral_type power
 
Fpk_variableT< FpkT > result
 
std::size_t sub_count
 
std::vector< std::shared_ptr< Fpk_mul_componentT< FpkT > > > subtraction_steps
 

Detailed Description

template<typename FpkT, template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
class nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >

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

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

Member Typedef Documentation

◆ FieldType

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
typedef FpkT::base_field_type nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::FieldType

◆ integral_type

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
typedef NumberType nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::integral_type

Constructor & Destructor Documentation

◆ exponentiation_component()

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
template<typename Backend , typename multiprecision::expression_template_option ExpressionTemplates>
nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::exponentiation_component ( blueprint< FieldType > &  bp,
const Fpk_variableT< FpkT > &  elt,
const multiprecision::number< Backend, ExpressionTemplates > &  power,
const Fpk_variableT< FpkT > &  result 
)
inline

Member Function Documentation

◆ generate_r1cs_constraints()

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
void nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::generate_r1cs_constraints ( )
inline

◆ generate_r1cs_witness()

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
void nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::generate_r1cs_witness ( )
inline

Member Data Documentation

◆ add_count

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
std::size_t nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::add_count

◆ addition_steps

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
std::vector<std::shared_ptr<Fpk_mul_componentT<FpkT> > > nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::addition_steps

◆ dbl_count

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
std::size_t nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::dbl_count

◆ doubling_steps

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
std::vector<std::shared_ptr<Fpk_sqr_componentT<FpkT> > > nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::doubling_steps

◆ elt

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
Fpk_variableT<FpkT> nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::elt

◆ intermed_count

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
std::size_t nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::intermed_count

◆ intermediate

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
std::vector<std::shared_ptr<Fpk_variableT<FpkT> > > nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::intermediate

◆ NAF

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
std::vector<long> nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::NAF

◆ power

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
integral_type nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::power

◆ result

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
Fpk_variableT<FpkT> nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::result

◆ sub_count

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
std::size_t nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::sub_count

◆ subtraction_steps

template<typename FpkT , template< class > class Fpk_variableT, template< class > class Fpk_mul_componentT, template< class > class Fpk_sqr_componentT, typename NumberType = typename FpkT::integral_type>
std::vector<std::shared_ptr<Fpk_mul_componentT<FpkT> > > nil::crypto3::zk::components::exponentiation_component< FpkT, Fpk_variableT, Fpk_mul_componentT, Fpk_sqr_componentT, NumberType >::subtraction_steps

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