/* * Modular Exponentiation * (C) 1999-2007 Jack Lloyd * * Botan is released under the Simplified BSD License (see license.txt) */ #ifndef BOTAN_DEFAULT_MODEXP_H_ #define BOTAN_DEFAULT_MODEXP_H_ #include #include #include namespace Botan { /** * Fixed Window Exponentiator */ class Fixed_Window_Exponentiator : public Modular_Exponentiator { public: void set_exponent(const BigInt&) override; void set_base(const BigInt&) override; BigInt execute() const override; Modular_Exponentiator* copy() const override { return new Fixed_Window_Exponentiator(*this); } Fixed_Window_Exponentiator(const BigInt&, Power_Mod::Usage_Hints); private: Modular_Reducer m_reducer; BigInt m_exp; size_t m_window_bits; std::vector m_g; Power_Mod::Usage_Hints m_hints; }; /** * Montgomery Exponentiator */ class Montgomery_Exponentiator : public Modular_Exponentiator { public: void set_exponent(const BigInt&) override; void set_base(const BigInt&) override; BigInt execute() const override; Modular_Exponentiator* copy() const override { return new Montgomery_Exponentiator(*this); } Montgomery_Exponentiator(const BigInt&, Power_Mod::Usage_Hints); private: BigInt m_exp, m_modulus, m_R_mod, m_R2_mod; Modular_Reducer m_reducer; word m_mod_prime; size_t m_mod_words, m_exp_bits, m_window_bits; Power_Mod::Usage_Hints m_hints; std::vector m_g; }; } #endif