26 #ifndef CRYPTO3_ALGEBRA_PAIRING_MNT6_298_FINAL_EXPONENTIATION_HPP
27 #define CRYPTO3_ALGEBRA_PAIRING_MNT6_298_FINAL_EXPONENTIATION_HPP
38 template<std::
size_t Version = 298>
51 static typename gt_type::value_type
52 final_exponentiation_last_chunk(
const typename gt_type::value_type &elt,
53 const typename gt_type::value_type &elt_inv) {
55 const typename gt_type::value_type elt_q = elt.Frobenius_map(1);
56 typename gt_type::value_type w1_part =
57 elt_q.cyclotomic_exp(params_type::final_exponent_last_chunk_w1);
58 typename gt_type::value_type w0_part;
59 if (params_type::final_exponent_last_chunk_is_w0_neg) {
60 w0_part = elt_inv.cyclotomic_exp(params_type::final_exponent_last_chunk_abs_of_w0);
62 w0_part = elt.cyclotomic_exp(params_type::final_exponent_last_chunk_abs_of_w0);
64 typename gt_type::value_type result = w1_part * w0_part;
69 static typename gt_type::value_type
70 final_exponentiation_first_chunk(
const typename gt_type::value_type &elt,
71 const typename gt_type::value_type &elt_inv) {
76 const typename gt_type::value_type elt_q3 = elt.Frobenius_map(3);
78 const typename gt_type::value_type elt_q3_over_elt = elt_q3 * elt_inv;
80 const typename gt_type::value_type alpha = elt_q3_over_elt.Frobenius_map(1);
82 const typename gt_type::value_type beta = alpha * elt_q3_over_elt;
87 static typename gt_type::value_type
process(
const typename gt_type::value_type &elt) {
89 const typename gt_type::value_type elt_inv = elt.inversed();
90 const typename gt_type::value_type elt_to_first_chunk =
91 final_exponentiation_first_chunk(elt, elt_inv);
92 const typename gt_type::value_type elt_inv_to_first_chunk =
93 final_exponentiation_first_chunk(elt_inv, elt);
94 return final_exponentiation_last_chunk(elt_to_first_chunk, elt_inv_to_first_chunk);
Definition: pairing/detail/alt_bn128/params.hpp:38
Definition: pairing/detail/forms/short_weierstrass/projective/types.hpp:36
static gt_type::value_type process(const typename gt_type::value_type &elt)
Definition: algebra/include/nil/crypto3/algebra/pairing/mnt6/298/final_exponentiation.hpp:87
Definition: algebra/include/nil/crypto3/algebra/pairing/mnt6/298/final_exponentiation.hpp:39
A struct representing a mnt6 curve.
Definition: algebra/include/nil/crypto3/algebra/curves/mnt6.hpp:46
policy_type::gt_field_type gt_type
Definition: algebra/include/nil/crypto3/algebra/curves/mnt6.hpp:66
IETF IPsec groups.
Definition: mnt6/base_field.hpp:46