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

#include <precomputation.hpp>

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

Public Types

typedef CurveType::pairing::fp_type FieldType
 
using fqe_type = typename CurveType::pairing::pair_curve_type::pairing::fqe_type
 

Public Member Functions

void generate_r1cs_constraints ()
 
void generate_r1cs_witness ()
 
 precompute_G2_component_addition_step (blueprint< FieldType > &bp, const bool invert_Q, const precompute_G2_component_coeffs< CurveType > &cur, const precompute_G2_component_coeffs< CurveType > &next, const element_g2< CurveType > &Q)
 

Public Attributes

std::shared_ptr< typename component_policy::Fqe_mul_component_type > compute_gamma
 
std::shared_ptr< typename component_policy::Fqe_mul_component_type > compute_gamma_X
 
std::shared_ptr< typename component_policy::Fqe_sqr_component_type > compute_next_RX
 
std::shared_ptr< typename component_policy::Fqe_mul_component_type > compute_next_RY
 
precompute_G2_component_coeffs< CurveType > cur
 
bool invert_Q
 
precompute_G2_component_coeffs< CurveType > next
 
std::shared_ptr< typename component_policy::Fqe_variable_type > next_RX_plus_RX_plus_QX
 
element_g2< CurveType > Q
 
std::shared_ptr< typename component_policy::Fqe_variable_type > RX_minus_next_RX
 
std::shared_ptr< typename component_policy::Fqe_variable_type > RX_minus_QX
 
std::shared_ptr< typename component_policy::Fqe_variable_type > RY_minus_QY
 
std::shared_ptr< typename component_policy::Fqe_variable_type > RY_plus_next_RY
 

Protected Attributes

blueprint< CurveType::scalar_field_type > & bp
 

Detailed Description

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

Technical note:

g2_precompute_addition_step relates coeffs[i] and coeffs[i+1] as follows

coeffs[i] gamma = (RY - QY) * (RX - QX).inversed() gamma_X = gamma * QX

coeffs[i+1] RX = prev_gamma^2 + (prev_RX + QX) RY = prev_gamma * (prev_RX - RX) - prev_RY

(where prev_ in [i+1] refer to things from [i])

If invert_Q is set to true: use -QY in place of QY everywhere above.

Member Typedef Documentation

◆ FieldType

template<typename CurveType >
typedef CurveType::pairing::fp_type nil::crypto3::zk::components::precompute_G2_component_addition_step< CurveType >::FieldType

◆ fqe_type

template<typename CurveType >
using nil::crypto3::zk::components::precompute_G2_component_addition_step< CurveType >::fqe_type = typename CurveType::pairing::pair_curve_type::pairing::fqe_type

Constructor & Destructor Documentation

◆ precompute_G2_component_addition_step()

template<typename CurveType >
nil::crypto3::zk::components::precompute_G2_component_addition_step< CurveType >::precompute_G2_component_addition_step ( blueprint< FieldType > &  bp,
const bool  invert_Q,
const precompute_G2_component_coeffs< CurveType > &  cur,
const precompute_G2_component_coeffs< CurveType > &  next,
const element_g2< CurveType > &  Q 
)
inline

Member Function Documentation

◆ generate_r1cs_constraints()

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

◆ generate_r1cs_witness()

template<typename CurveType >
void nil::crypto3::zk::components::precompute_G2_component_addition_step< 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

◆ compute_gamma

template<typename CurveType >
std::shared_ptr<typename component_policy::Fqe_mul_component_type> nil::crypto3::zk::components::precompute_G2_component_addition_step< CurveType >::compute_gamma

◆ compute_gamma_X

template<typename CurveType >
std::shared_ptr<typename component_policy::Fqe_mul_component_type> nil::crypto3::zk::components::precompute_G2_component_addition_step< CurveType >::compute_gamma_X

◆ compute_next_RX

template<typename CurveType >
std::shared_ptr<typename component_policy::Fqe_sqr_component_type> nil::crypto3::zk::components::precompute_G2_component_addition_step< CurveType >::compute_next_RX

◆ compute_next_RY

template<typename CurveType >
std::shared_ptr<typename component_policy::Fqe_mul_component_type> nil::crypto3::zk::components::precompute_G2_component_addition_step< CurveType >::compute_next_RY

◆ cur

◆ invert_Q

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

◆ next

◆ next_RX_plus_RX_plus_QX

template<typename CurveType >
std::shared_ptr<typename component_policy::Fqe_variable_type> nil::crypto3::zk::components::precompute_G2_component_addition_step< CurveType >::next_RX_plus_RX_plus_QX

◆ Q

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

◆ RX_minus_next_RX

template<typename CurveType >
std::shared_ptr<typename component_policy::Fqe_variable_type> nil::crypto3::zk::components::precompute_G2_component_addition_step< CurveType >::RX_minus_next_RX

◆ RX_minus_QX

template<typename CurveType >
std::shared_ptr<typename component_policy::Fqe_variable_type> nil::crypto3::zk::components::precompute_G2_component_addition_step< CurveType >::RX_minus_QX

◆ RY_minus_QY

template<typename CurveType >
std::shared_ptr<typename component_policy::Fqe_variable_type> nil::crypto3::zk::components::precompute_G2_component_addition_step< CurveType >::RY_minus_QY

◆ RY_plus_next_RY

template<typename CurveType >
std::shared_ptr<typename component_policy::Fqe_variable_type> nil::crypto3::zk::components::precompute_G2_component_addition_step< CurveType >::RY_plus_next_RY

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