1 /** @file
2 *****************************************************************************
3 * @author This file is part of libff, developed by SCIPR Lab
4 * and contributors (see AUTHORS).
5 * @copyright MIT license (see LICENSE file)
6 *****************************************************************************/
7
8 #include <libff/algebra/curves/bn128/bn128_pp.hpp>
9 #include <libff/common/profiling.hpp>
10
11 namespace libff {
12
init_public_params()13 void bn128_pp::init_public_params()
14 {
15 init_bn128_params();
16 }
17
final_exponentiation(const bn128_GT & elt)18 bn128_GT bn128_pp::final_exponentiation(const bn128_GT &elt)
19 {
20 return bn128_final_exponentiation(elt);
21 }
22
precompute_G1(const bn128_G1 & P)23 bn128_ate_G1_precomp bn128_pp::precompute_G1(const bn128_G1 &P)
24 {
25 return bn128_ate_precompute_G1(P);
26 }
27
precompute_G2(const bn128_G2 & Q)28 bn128_ate_G2_precomp bn128_pp::precompute_G2(const bn128_G2 &Q)
29 {
30 return bn128_ate_precompute_G2(Q);
31 }
32
miller_loop(const bn128_ate_G1_precomp & prec_P,const bn128_ate_G2_precomp & prec_Q)33 bn128_Fq12 bn128_pp::miller_loop(const bn128_ate_G1_precomp &prec_P,
34 const bn128_ate_G2_precomp &prec_Q)
35 {
36 enter_block("Call to miller_loop<bn128_pp>");
37 bn128_Fq12 result = bn128_ate_miller_loop(prec_P, prec_Q);
38 leave_block("Call to miller_loop<bn128_pp>");
39 return result;
40 }
41
double_miller_loop(const bn128_ate_G1_precomp & prec_P1,const bn128_ate_G2_precomp & prec_Q1,const bn128_ate_G1_precomp & prec_P2,const bn128_ate_G2_precomp & prec_Q2)42 bn128_Fq12 bn128_pp::double_miller_loop(const bn128_ate_G1_precomp &prec_P1,
43 const bn128_ate_G2_precomp &prec_Q1,
44 const bn128_ate_G1_precomp &prec_P2,
45 const bn128_ate_G2_precomp &prec_Q2)
46 {
47 enter_block("Call to double_miller_loop<bn128_pp>");
48 bn128_Fq12 result = bn128_double_ate_miller_loop(prec_P1, prec_Q1, prec_P2, prec_Q2);
49 leave_block("Call to double_miller_loop<bn128_pp>");
50 return result;
51 }
52
pairing(const bn128_G1 & P,const bn128_G2 & Q)53 bn128_Fq12 bn128_pp::pairing(const bn128_G1 &P,
54 const bn128_G2 &Q)
55 {
56 enter_block("Call to pairing<bn128_pp>");
57 bn128_ate_G1_precomp prec_P = bn128_pp::precompute_G1(P);
58 bn128_ate_G2_precomp prec_Q = bn128_pp::precompute_G2(Q);
59
60 bn128_Fq12 result = bn128_pp::miller_loop(prec_P, prec_Q);
61 leave_block("Call to pairing<bn128_pp>");
62 return result;
63 }
64
reduced_pairing(const bn128_G1 & P,const bn128_G2 & Q)65 bn128_GT bn128_pp::reduced_pairing(const bn128_G1 &P,
66 const bn128_G2 &Q)
67 {
68 enter_block("Call to reduced_pairing<bn128_pp>");
69 const bn128_Fq12 f = bn128_pp::pairing(P, Q);
70 const bn128_GT result = bn128_pp::final_exponentiation(f);
71 leave_block("Call to reduced_pairing<bn128_pp>");
72 return result;
73 }
74
75 } // libff
76