8 #include <botan/internal/def_powm.h>
9 #include <botan/numthry.h>
29 m_g.resize((1 << m_window_bits));
33 for(
size_t i = 2; i != m_g.size(); ++i)
34 m_g[i] = m_reducer.
multiply(m_g[i-1], m_g[1]);
42 const size_t exp_nibbles = (m_exp.
bits() + m_window_bits - 1) / m_window_bits;
46 for(
size_t i = exp_nibbles; i > 0; --i)
48 for(
size_t j = 0; j != m_window_bits; ++j)
51 const uint32_t nibble = m_exp.
get_substring(m_window_bits*(i-1), m_window_bits);
53 x = m_reducer.
multiply(x, m_g[nibble]);
63 : m_reducer{
Modular_Reducer(n)}, m_exp{}, m_window_bits{}, m_g{}, m_hints{hints}
void set_base(const BigInt &) override
Fixed_Window_Exponentiator(const BigInt &, Power_Mod::Usage_Hints)
void set_exponent(const BigInt &) override
BigInt multiply(const BigInt &x, const BigInt &y) const
static size_t window_bits(size_t exp_bits, size_t base_bits, Power_Mod::Usage_Hints hints)
uint32_t get_substring(size_t offset, size_t length) const
BigInt execute() const override
BigInt square(const BigInt &x) const