26 #ifndef CRYPTO3_ALGEBRA_PAIRING_MNT4_298_FINAL_EXPONENTIATION_HPP
27 #define CRYPTO3_ALGEBRA_PAIRING_MNT4_298_FINAL_EXPONENTIATION_HPP
38 template<std::
size_t Version = 298>
50 static typename gt_type::value_type
51 final_exponentiation_last_chunk(
const typename gt_type::value_type &elt,
52 const typename gt_type::value_type &elt_inv) {
54 const typename gt_type::value_type elt_q = elt.Frobenius_map(1);
55 typename gt_type::value_type w1_part =
56 elt_q.cyclotomic_exp(params_type::final_exponent_last_chunk_w1);
57 typename gt_type::value_type w0_part;
58 if (params_type::final_exponent_last_chunk_is_w0_neg) {
59 w0_part = elt_inv.cyclotomic_exp(params_type::final_exponent_last_chunk_abs_of_w0);
61 w0_part = elt.cyclotomic_exp(params_type::final_exponent_last_chunk_abs_of_w0);
63 typename gt_type::value_type result = w1_part * w0_part;
68 static typename gt_type::value_type
69 final_exponentiation_first_chunk(
const typename gt_type::value_type &elt,
70 const typename gt_type::value_type &elt_inv) {
75 const typename gt_type::value_type elt_q2 = elt.Frobenius_map(2);
77 const typename gt_type::value_type elt_q2_over_elt = elt_q2 * elt_inv;
79 return elt_q2_over_elt;
83 static typename gt_type::value_type
process(
const typename gt_type::value_type &elt) {
85 const typename gt_type::value_type elt_inv = elt.inversed();
86 const typename gt_type::value_type elt_to_first_chunk =
87 final_exponentiation_first_chunk(elt, elt_inv);
88 const typename gt_type::value_type elt_inv_to_first_chunk =
89 final_exponentiation_first_chunk(elt_inv, elt);
90 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/mnt4/298/final_exponentiation.hpp:83
Definition: algebra/include/nil/crypto3/algebra/pairing/mnt4/298/final_exponentiation.hpp:39
A struct representing a mnt4 curve.
Definition: algebra/include/nil/crypto3/algebra/curves/mnt4.hpp:46
policy_type::gt_field_type gt_type
Definition: algebra/include/nil/crypto3/algebra/curves/mnt4.hpp:66