nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType > Class Template Reference

#include <miller_loop.hpp>

+ Inheritance diagram for nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType >:
+ Collaboration diagram for nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType >:

Public Member Functions

void generate_r1cs_constraints ()
 
void generate_r1cs_witness ()
 
 mnt_miller_loop_add_line_eval (blueprint< field_type > &bp, const bool invert_Q, const g1_precomputation< CurveType > &prec_P, const precompute_G2_component_coeffs< CurveType > &c, const element_g2< CurveType > &Q, std::shared_ptr< typename component_policy::Fqk_variable_type > &g_RQ_at_P)
 

Public Attributes

precompute_G2_component_coeffs< CurveType > c
 
std::shared_ptr< typename component_policy::Fqe_mul_by_lc_component_type > compute_g_RQ_at_P_c1
 
std::shared_ptr< typename component_policy::Fqk_variable_type > & g_RQ_at_P
 
std::shared_ptr< typename component_policy::Fqe_variable_type > g_RQ_at_P_c1
 
std::shared_ptr< typename component_policy::Fqe_variable_type > gamma_twist
 
bool invert_Q
 
g1_precomputation< CurveType > prec_P
 
element_g2< CurveType > Q
 

Protected Attributes

blueprint< CurveType::scalar_field_type > & bp
 

Detailed Description

template<typename CurveType>
class nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType >

Component for addition step in the Miller loop.

Technical note:

mnt_Fqk g_RQ_at_P = mnt_Fqk(prec_P.PY_twist_squared, -prec_P.PX * c.gamma_twist + c.gamma_X - prec_Q.QY);

(later in Miller loop: f = f * g_RQ_at_P)

Note the slight interface change: this component will allocate g_RQ_at_P inside itself (!)

Constructor & Destructor Documentation

◆ mnt_miller_loop_add_line_eval()

template<typename CurveType >
nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType >::mnt_miller_loop_add_line_eval ( blueprint< field_type > &  bp,
const bool  invert_Q,
const g1_precomputation< CurveType > &  prec_P,
const precompute_G2_component_coeffs< CurveType > &  c,
const element_g2< CurveType > &  Q,
std::shared_ptr< typename component_policy::Fqk_variable_type > &  g_RQ_at_P 
)
inline

Member Function Documentation

◆ generate_r1cs_constraints()

template<typename CurveType >
void nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType >::generate_r1cs_constraints ( )
inline

◆ generate_r1cs_witness()

template<typename CurveType >
void nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType >::generate_r1cs_witness ( )
inline

Member Data Documentation

◆ bp

blueprint<CurveType::scalar_field_type >& nil::crypto3::zk::components::component< CurveType::scalar_field_type >::bp
protectedinherited

◆ c

template<typename CurveType >
precompute_G2_component_coeffs<CurveType> nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType >::c

◆ compute_g_RQ_at_P_c1

template<typename CurveType >
std::shared_ptr<typename component_policy::Fqe_mul_by_lc_component_type> nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType >::compute_g_RQ_at_P_c1

◆ g_RQ_at_P

template<typename CurveType >
std::shared_ptr<typename component_policy::Fqk_variable_type>& nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType >::g_RQ_at_P

◆ g_RQ_at_P_c1

template<typename CurveType >
std::shared_ptr<typename component_policy::Fqe_variable_type> nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType >::g_RQ_at_P_c1

◆ gamma_twist

template<typename CurveType >
std::shared_ptr<typename component_policy::Fqe_variable_type> nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType >::gamma_twist

◆ invert_Q

template<typename CurveType >
bool nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType >::invert_Q

◆ prec_P

template<typename CurveType >
g1_precomputation<CurveType> nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType >::prec_P

◆ Q

template<typename CurveType >
element_g2<CurveType> nil::crypto3::zk::components::mnt_miller_loop_add_line_eval< CurveType >::Q

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