27 #ifndef CRYPTO3_ALGEBRA_FIELDS_POWER_HPP
28 #define CRYPTO3_ALGEBRA_FIELDS_POWER_HPP
32 #include <nil/crypto3/multiprecision/number.hpp>
33 #include <nil/crypto3/multiprecision/cpp_int.hpp>
40 template<
typename FieldValueType,
typename NumberType>
41 constexpr FieldValueType
power(
const FieldValueType &base,
const NumberType &exponent) {
42 FieldValueType result = FieldValueType::one();
47 bool found_one =
false;
49 for (
long i = nil::crypto3::multiprecision::msb(exponent); i >= 0; --i) {
51 result = result.squared();
54 if (nil::crypto3::multiprecision::bit_test(exponent, i)) {
56 result = result * base;
constexpr FieldValueType power(const FieldValueType &base, const NumberType &exponent)
Definition: algebra/include/nil/crypto3/algebra/fields/detail/exponentiation.hpp:41