nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType > Struct Template Reference

#include <verifier.hpp>

+ Collaboration diagram for nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >:

Public Types

typedef CurveType curve_type
 
typedef curve_type::template g1_type g1_type
 
typedef g1_type::value_type g1_value_type
 
typedef curve_type::template g2_type g2_type
 
typedef g2_type::value_type g2_value_type
 
typedef curve_type::gt_type gt_type
 
typedef gt_type::value_type gt_value_type
 
typedef curve_type::scalar_field_type scalar_field_type
 
typedef scalar_field_type::value_type scalar_field_value_type
 

Public Member Functions

scalar_field_value_type derive_non_zero ()
 
void invalidate ()
 
void merge ()
 
template<typename InputGTIterator >
std::enable_if< std::is_same< gt_value_type, typename std::iterator_traits< InputGTIterator >::value_type >::value >::type merge_nonrandom (InputGTIterator a_first, InputGTIterator a_last, const gt_value_type &out)
 
template<typename InputG1Iterator , typename InputG2Iterator >
std::enable_if< std::is_same< g1_value_type, typename std::iterator_traits< InputG1Iterator >::value_type >::value &&std::is_same< g2_value_type, typename std::iterator_traits< InputG2Iterator >::value_type >::value >::type merge_random (InputG1Iterator a_first, InputG1Iterator a_last, InputG2Iterator b_first, InputG2Iterator b_last, const gt_value_type &out)
 
 pairing_check ()
 
template<typename InputG1Iterator , typename InputG2Iterator , typename = typename std::enable_if< std::is_same<g1_value_type, typename std::iterator_traits<InputG1Iterator>::value_type>::value && std::is_same<g2_value_type, typename std::iterator_traits<InputG2Iterator>::value_type>::value, bool>::type>
 pairing_check (InputG1Iterator a_first, InputG1Iterator a_last, InputG2Iterator b_first, InputG2Iterator b_last, const gt_value_type &out)
 
bool verify ()
 

Public Attributes

gt_value_type left
 
bool non_random_check_done
 
gt_value_type right
 
bool valid
 

Detailed Description

template<typename CurveType, typename DistributionType, typename GeneratorType>
struct nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >

TODO: optimize this simple version of pairing checker PairingCheck represents a check of the form e(A,B)e(C,D)... = T. Checks can be aggregated together using random linear combination. The efficiency comes from keeping the results from the miller loop output before proceding to a final exponentiation when verifying if all checks are verified. It is a tuple:

  • a miller loop result that is to be multiplied by other miller loop results before going into a final exponentiation result
  • a right side result which is already in the right subgroup Gt which is to be compared to the left side when "final_exponentiatiat"-ed

Member Typedef Documentation

◆ curve_type

template<typename CurveType , typename DistributionType , typename GeneratorType >
typedef CurveType nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::curve_type

◆ g1_type

template<typename CurveType , typename DistributionType , typename GeneratorType >
typedef curve_type::template g1_type nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::g1_type

◆ g1_value_type

template<typename CurveType , typename DistributionType , typename GeneratorType >
typedef g1_type::value_type nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::g1_value_type

◆ g2_type

template<typename CurveType , typename DistributionType , typename GeneratorType >
typedef curve_type::template g2_type nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::g2_type

◆ g2_value_type

template<typename CurveType , typename DistributionType , typename GeneratorType >
typedef g2_type::value_type nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::g2_value_type

◆ gt_type

template<typename CurveType , typename DistributionType , typename GeneratorType >
typedef curve_type::gt_type nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::gt_type

◆ gt_value_type

template<typename CurveType , typename DistributionType , typename GeneratorType >
typedef gt_type::value_type nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::gt_value_type

◆ scalar_field_type

template<typename CurveType , typename DistributionType , typename GeneratorType >
typedef curve_type::scalar_field_type nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::scalar_field_type

◆ scalar_field_value_type

template<typename CurveType , typename DistributionType , typename GeneratorType >
typedef scalar_field_type::value_type nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::scalar_field_value_type

Constructor & Destructor Documentation

◆ pairing_check() [1/2]

template<typename CurveType , typename DistributionType , typename GeneratorType >
nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::pairing_check ( )
inline

◆ pairing_check() [2/2]

template<typename CurveType , typename DistributionType , typename GeneratorType >
template<typename InputG1Iterator , typename InputG2Iterator , typename = typename std::enable_if< std::is_same<g1_value_type, typename std::iterator_traits<InputG1Iterator>::value_type>::value && std::is_same<g2_value_type, typename std::iterator_traits<InputG2Iterator>::value_type>::value, bool>::type>
nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::pairing_check ( InputG1Iterator  a_first,
InputG1Iterator  a_last,
InputG2Iterator  b_first,
InputG2Iterator  b_last,
const gt_value_type out 
)
inline

returns a pairing tuple that is scaled by a random element. When aggregating pairing checks, this creates a random linear combination of all checks so that it is secure. Specifically we have e(A,B)e(C,D)... = out <=> e(g,h)^{ab + cd} = out We rescale using a random element $r$ to give e(rA,B)e(rC,D) ... = out^r <=> e(A,B)^r e(C,D)^r = out^r <=> e(g,h)^{abr + cdr} = out^r (e(g,h)^{ab + cd})^r = out^r

Member Function Documentation

◆ derive_non_zero()

template<typename CurveType , typename DistributionType , typename GeneratorType >
scalar_field_value_type nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::derive_non_zero ( )
inline

◆ invalidate()

template<typename CurveType , typename DistributionType , typename GeneratorType >
void nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::invalidate ( )
inline

◆ merge()

template<typename CurveType , typename DistributionType , typename GeneratorType >
void nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::merge ( )
inline

◆ merge_nonrandom()

template<typename CurveType , typename DistributionType , typename GeneratorType >
template<typename InputGTIterator >
std::enable_if<std::is_same< gt_value_type, typename std::iterator_traits<InputGTIterator>::value_type>::value>::type nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::merge_nonrandom ( InputGTIterator  a_first,
InputGTIterator  a_last,
const gt_value_type out 
)
inline

◆ merge_random()

template<typename CurveType , typename DistributionType , typename GeneratorType >
template<typename InputG1Iterator , typename InputG2Iterator >
std::enable_if< std::is_same<g1_value_type, typename std::iterator_traits<InputG1Iterator>::value_type>::value && std::is_same<g2_value_type, typename std::iterator_traits<InputG2Iterator>::value_type>::value>::type nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::merge_random ( InputG1Iterator  a_first,
InputG1Iterator  a_last,
InputG2Iterator  b_first,
InputG2Iterator  b_last,
const gt_value_type out 
)
inline

◆ verify()

template<typename CurveType , typename DistributionType , typename GeneratorType >
bool nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::verify ( )
inline

Member Data Documentation

◆ left

template<typename CurveType , typename DistributionType , typename GeneratorType >
gt_value_type nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::left

◆ non_random_check_done

template<typename CurveType , typename DistributionType , typename GeneratorType >
bool nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::non_random_check_done

◆ right

template<typename CurveType , typename DistributionType , typename GeneratorType >
gt_value_type nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::right

◆ valid

template<typename CurveType , typename DistributionType , typename GeneratorType >
bool nil::crypto3::zk::snark::pairing_check< CurveType, DistributionType, GeneratorType >::valid

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