Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
Public Types | Public Member Functions | Public Attributes | List of all members
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT > Class Template Reference

#include <mnt_miller_loop.hpp>

Inheritance diagram for libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >:
Inheritance graph
[legend]
Collaboration diagram for libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >:
Collaboration graph
[legend]

Public Types

typedef libff::Fr< ppT > FieldT
 
typedef libff::Fqe< other_curve< ppT > > FqeT
 
typedef libff::Fqk< other_curve< ppT > > FqkT
 
typedef mnt_pairing_params< ppT >::Fqk_special_mul_gadget_type Fqk_special_mul_gadget
 

Public Member Functions

 mnt_e_times_e_times_e_over_e_miller_loop_gadget (protoboard< FieldT > &pb, const G1_precomputation< ppT > &prec_P1, const G2_precomputation< ppT > &prec_Q1, const G1_precomputation< ppT > &prec_P2, const G2_precomputation< ppT > &prec_Q2, const G1_precomputation< ppT > &prec_P3, const G2_precomputation< ppT > &prec_Q3, const G1_precomputation< ppT > &prec_P4, const G2_precomputation< ppT > &prec_Q4, const Fqk_variable< ppT > &result, const std::string &annotation_prefix)
 
void generate_r1cs_constraints ()
 
void generate_r1cs_witness ()
 
- Public Member Functions inherited from libsnark::gadget< libff::Fr< ppT > >
 gadget (protoboard< libff::Fr< ppT > > &pb, const std::string &annotation_prefix)
 

Public Attributes

std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P1s
 
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P1s
 
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P2s
 
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P2s
 
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P3s
 
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P3s
 
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RR_at_P4s
 
std::vector< std::shared_ptr< Fqk_variable< ppT > > > g_RQ_at_P4s
 
std::vector< std::shared_ptr< Fqk_variable< ppT > > > fs
 
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps1
 
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps1
 
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps2
 
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps2
 
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps3
 
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps3
 
std::vector< std::shared_ptr< mnt_miller_loop_add_line_eval< ppT > > > addition_steps4
 
std::vector< std::shared_ptr< mnt_miller_loop_dbl_line_eval< ppT > > > doubling_steps4
 
std::vector< std::shared_ptr< Fqk_sqr_gadget< ppT > > > dbl_sqrs
 
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls1
 
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls1
 
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls2
 
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls2
 
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls3
 
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls3
 
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > dbl_muls4
 
std::vector< std::shared_ptr< Fqk_special_mul_gadget > > add_muls4
 
size_t f_count
 
size_t add_count
 
size_t dbl_count
 
G1_precomputation< ppT > prec_P1
 
G2_precomputation< ppT > prec_Q1
 
G1_precomputation< ppT > prec_P2
 
G2_precomputation< ppT > prec_Q2
 
G1_precomputation< ppT > prec_P3
 
G2_precomputation< ppT > prec_Q3
 
G1_precomputation< ppT > prec_P4
 
G2_precomputation< ppT > prec_Q4
 
Fqk_variable< ppT > result
 

Additional Inherited Members

- Protected Attributes inherited from libsnark::gadget< libff::Fr< ppT > >
protoboard< libff::Fr< ppT > > & pb
 
const std::string annotation_prefix
 

Detailed Description

template<typename ppT>
class libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >

Gadget for verifying a quadruple Miller loop (where the fourth is inverted). This gadget is necessary to implement the Groth16 verifier, and carry out the check: e(\pi.A, \pi.B) = e(vk.\alpha, vk.\beta) * e (acc, g2) * e(\pi.C, vk.\delta) where, g2 is the generator we use for encoding in G2, and where * denotes the group operation in GT.

Definition at line 274 of file mnt_miller_loop.hpp.

Member Typedef Documentation

◆ FieldT

template<typename ppT >
typedef libff::Fr<ppT> libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::FieldT

Definition at line 278 of file mnt_miller_loop.hpp.

◆ FqeT

template<typename ppT >
typedef libff::Fqe<other_curve<ppT> > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::FqeT

Definition at line 279 of file mnt_miller_loop.hpp.

◆ Fqk_special_mul_gadget

template<typename ppT >
typedef mnt_pairing_params<ppT>::Fqk_special_mul_gadget_type libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::Fqk_special_mul_gadget

Definition at line 282 of file mnt_miller_loop.hpp.

◆ FqkT

template<typename ppT >
typedef libff::Fqk<other_curve<ppT> > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::FqkT

Definition at line 280 of file mnt_miller_loop.hpp.

Constructor & Destructor Documentation

◆ mnt_e_times_e_times_e_over_e_miller_loop_gadget()

template<typename ppT >
libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::mnt_e_times_e_times_e_over_e_miller_loop_gadget ( protoboard< FieldT > &  pb,
const G1_precomputation< ppT > &  prec_P1,
const G2_precomputation< ppT > &  prec_Q1,
const G1_precomputation< ppT > &  prec_P2,
const G2_precomputation< ppT > &  prec_Q2,
const G1_precomputation< ppT > &  prec_P3,
const G2_precomputation< ppT > &  prec_Q3,
const G1_precomputation< ppT > &  prec_P4,
const G2_precomputation< ppT > &  prec_Q4,
const Fqk_variable< ppT > &  result,
const std::string &  annotation_prefix 
)

Member Function Documentation

◆ generate_r1cs_constraints()

template<typename ppT >
void libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::generate_r1cs_constraints ( )

◆ generate_r1cs_witness()

template<typename ppT >
void libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::generate_r1cs_witness ( )

Member Data Documentation

◆ add_count

template<typename ppT >
size_t libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::add_count

Definition at line 322 of file mnt_miller_loop.hpp.

◆ add_muls1

template<typename ppT >
std::vector<std::shared_ptr<Fqk_special_mul_gadget> > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::add_muls1

Definition at line 313 of file mnt_miller_loop.hpp.

◆ add_muls2

template<typename ppT >
std::vector<std::shared_ptr<Fqk_special_mul_gadget> > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::add_muls2

Definition at line 315 of file mnt_miller_loop.hpp.

◆ add_muls3

template<typename ppT >
std::vector<std::shared_ptr<Fqk_special_mul_gadget> > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::add_muls3

Definition at line 317 of file mnt_miller_loop.hpp.

◆ add_muls4

template<typename ppT >
std::vector<std::shared_ptr<Fqk_special_mul_gadget> > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::add_muls4

Definition at line 319 of file mnt_miller_loop.hpp.

◆ addition_steps1

template<typename ppT >
std::vector<std::shared_ptr<mnt_miller_loop_add_line_eval<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::addition_steps1

Definition at line 295 of file mnt_miller_loop.hpp.

◆ addition_steps2

template<typename ppT >
std::vector<std::shared_ptr<mnt_miller_loop_add_line_eval<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::addition_steps2

Definition at line 299 of file mnt_miller_loop.hpp.

◆ addition_steps3

template<typename ppT >
std::vector<std::shared_ptr<mnt_miller_loop_add_line_eval<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::addition_steps3

Definition at line 303 of file mnt_miller_loop.hpp.

◆ addition_steps4

template<typename ppT >
std::vector<std::shared_ptr<mnt_miller_loop_add_line_eval<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::addition_steps4

Definition at line 307 of file mnt_miller_loop.hpp.

◆ dbl_count

template<typename ppT >
size_t libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::dbl_count

Definition at line 323 of file mnt_miller_loop.hpp.

◆ dbl_muls1

template<typename ppT >
std::vector<std::shared_ptr<Fqk_special_mul_gadget> > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::dbl_muls1

Definition at line 312 of file mnt_miller_loop.hpp.

◆ dbl_muls2

template<typename ppT >
std::vector<std::shared_ptr<Fqk_special_mul_gadget> > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::dbl_muls2

Definition at line 314 of file mnt_miller_loop.hpp.

◆ dbl_muls3

template<typename ppT >
std::vector<std::shared_ptr<Fqk_special_mul_gadget> > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::dbl_muls3

Definition at line 316 of file mnt_miller_loop.hpp.

◆ dbl_muls4

template<typename ppT >
std::vector<std::shared_ptr<Fqk_special_mul_gadget> > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::dbl_muls4

Definition at line 318 of file mnt_miller_loop.hpp.

◆ dbl_sqrs

template<typename ppT >
std::vector<std::shared_ptr<Fqk_sqr_gadget<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::dbl_sqrs

Definition at line 311 of file mnt_miller_loop.hpp.

◆ doubling_steps1

template<typename ppT >
std::vector<std::shared_ptr<mnt_miller_loop_dbl_line_eval<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::doubling_steps1

Definition at line 297 of file mnt_miller_loop.hpp.

◆ doubling_steps2

template<typename ppT >
std::vector<std::shared_ptr<mnt_miller_loop_dbl_line_eval<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::doubling_steps2

Definition at line 301 of file mnt_miller_loop.hpp.

◆ doubling_steps3

template<typename ppT >
std::vector<std::shared_ptr<mnt_miller_loop_dbl_line_eval<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::doubling_steps3

Definition at line 305 of file mnt_miller_loop.hpp.

◆ doubling_steps4

template<typename ppT >
std::vector<std::shared_ptr<mnt_miller_loop_dbl_line_eval<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::doubling_steps4

Definition at line 309 of file mnt_miller_loop.hpp.

◆ f_count

template<typename ppT >
size_t libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::f_count

Definition at line 321 of file mnt_miller_loop.hpp.

◆ fs

template<typename ppT >
std::vector<std::shared_ptr<Fqk_variable<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::fs

Definition at line 292 of file mnt_miller_loop.hpp.

◆ g_RQ_at_P1s

template<typename ppT >
std::vector<std::shared_ptr<Fqk_variable<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::g_RQ_at_P1s

Definition at line 285 of file mnt_miller_loop.hpp.

◆ g_RQ_at_P2s

template<typename ppT >
std::vector<std::shared_ptr<Fqk_variable<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::g_RQ_at_P2s

Definition at line 287 of file mnt_miller_loop.hpp.

◆ g_RQ_at_P3s

template<typename ppT >
std::vector<std::shared_ptr<Fqk_variable<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::g_RQ_at_P3s

Definition at line 289 of file mnt_miller_loop.hpp.

◆ g_RQ_at_P4s

template<typename ppT >
std::vector<std::shared_ptr<Fqk_variable<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::g_RQ_at_P4s

Definition at line 291 of file mnt_miller_loop.hpp.

◆ g_RR_at_P1s

template<typename ppT >
std::vector<std::shared_ptr<Fqk_variable<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::g_RR_at_P1s

Definition at line 284 of file mnt_miller_loop.hpp.

◆ g_RR_at_P2s

template<typename ppT >
std::vector<std::shared_ptr<Fqk_variable<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::g_RR_at_P2s

Definition at line 286 of file mnt_miller_loop.hpp.

◆ g_RR_at_P3s

template<typename ppT >
std::vector<std::shared_ptr<Fqk_variable<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::g_RR_at_P3s

Definition at line 288 of file mnt_miller_loop.hpp.

◆ g_RR_at_P4s

template<typename ppT >
std::vector<std::shared_ptr<Fqk_variable<ppT> > > libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::g_RR_at_P4s

Definition at line 290 of file mnt_miller_loop.hpp.

◆ prec_P1

Definition at line 325 of file mnt_miller_loop.hpp.

◆ prec_P2

Definition at line 327 of file mnt_miller_loop.hpp.

◆ prec_P3

Definition at line 329 of file mnt_miller_loop.hpp.

◆ prec_P4

Definition at line 331 of file mnt_miller_loop.hpp.

◆ prec_Q1

Definition at line 326 of file mnt_miller_loop.hpp.

◆ prec_Q2

Definition at line 328 of file mnt_miller_loop.hpp.

◆ prec_Q3

Definition at line 330 of file mnt_miller_loop.hpp.

◆ prec_Q4

Definition at line 332 of file mnt_miller_loop.hpp.

◆ result

template<typename ppT >
Fqk_variable<ppT> libsnark::mnt_e_times_e_times_e_over_e_miller_loop_gadget< ppT >::result

Definition at line 333 of file mnt_miller_loop.hpp.


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