Botan 2.1.0 Crypto and TLS for C++11

- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

pow_mod.h
Go to the documentation of this file.
1 /*
2 * Modular Exponentiator
3 * (C) 1999-2007 Jack Lloyd
4 *
5 * Botan is released under the Simplified BSD License (see license.txt)
6 */
7
8 #ifndef BOTAN_POWER_MOD_H__
9 #define BOTAN_POWER_MOD_H__
10
11 #include <botan/bigint.h>
12
13 namespace Botan {
14
15 /**
16 * Modular Exponentiator Interface
17 */
18 class BOTAN_DLL Modular_Exponentiator
19 {
20 public:
21 virtual void set_base(const BigInt&) = 0;
22 virtual void set_exponent(const BigInt&) = 0;
23 virtual BigInt execute() const = 0;
24 virtual Modular_Exponentiator* copy() const = 0;
25
26 Modular_Exponentiator() = default;
27 Modular_Exponentiator(const Modular_Exponentiator&) = default;
28 Modular_Exponentiator & operator=(const Modular_Exponentiator&) = default;
29 virtual ~Modular_Exponentiator() = default;
30 };
31
32 /**
33 * Modular Exponentiator Proxy
34 */
35 class BOTAN_DLL Power_Mod
36 {
37 public:
38
39 enum Usage_Hints {
40 NO_HINTS = 0x0000,
41
42 BASE_IS_FIXED = 0x0001,
43 BASE_IS_SMALL = 0x0002,
44 BASE_IS_LARGE = 0x0004,
45 BASE_IS_2 = 0x0008,
46
47 EXP_IS_FIXED = 0x0100,
48 EXP_IS_SMALL = 0x0200,
49 EXP_IS_LARGE = 0x0400
50 };
51
52 /*
53 * Try to choose a good window size
54 */
55 static size_t window_bits(size_t exp_bits, size_t base_bits,
56 Power_Mod::Usage_Hints hints);
57
58 /**
59 * @param modulus the modulus
60 * @param hints Passed to set_modulus if modulus > 0
61 * @param disable_montgomery_arith Disables use of Montgomery
62 * representation. Likely only useful for testing.
63 */
64 void set_modulus(const BigInt& modulus,
65 Usage_Hints = NO_HINTS,
66 bool disable_montgomery_arith = false) const;
67
68 /**
69 * Set the base
70 */
71 void set_base(const BigInt& base) const;
72
73 /**
74 * Set the exponent
75 */
76 void set_exponent(const BigInt& exponent) const;
77
78 /**
79 * All three of the above functions must have already been called.
80 * @return result of g^x%p
81 */
82 BigInt execute() const;
83
84 Power_Mod& operator=(const Power_Mod&);
85
86 /**
87 * @param modulus Optionally call set_modulus
88 * @param hints Passed to set_modulus if modulus > 0
89 * @param disable_montgomery_arith Disables use of Montgomery
90 * representation. Likely only useful for testing.
91 */
92 Power_Mod(const BigInt& modulus = 0,
93 Usage_Hints hints = NO_HINTS,
94 bool disable_montgomery_arith = false);
95 Power_Mod(const Power_Mod&);
96 virtual ~Power_Mod();
97 private:
98 mutable Modular_Exponentiator* m_core;
99 };
100
101 /**
102 * Fixed Exponent Modular Exponentiator Proxy
103 */
104 class BOTAN_DLL Fixed_Exponent_Power_Mod : public Power_Mod
105 {
106 public:
107 BigInt operator()(const BigInt& b) const
108 { set_base(b); return execute(); }
109
110 Fixed_Exponent_Power_Mod() = default;
111
112 Fixed_Exponent_Power_Mod(const BigInt& exponent,
113 const BigInt& modulus,
114 Usage_Hints hints = NO_HINTS);
115 };
116
117 /**
118 * Fixed Base Modular Exponentiator Proxy
119 */
120 class BOTAN_DLL Fixed_Base_Power_Mod : public Power_Mod
121 {
122 public:
123 BigInt operator()(const BigInt& e) const
124 { set_exponent(e); return execute(); }
125
126 Fixed_Base_Power_Mod() = default;
127
128 Fixed_Base_Power_Mod(const BigInt& base,
129 const BigInt& modulus,
130 Usage_Hints hints = NO_HINTS);
131 };
132
133 }
134
135 #endif
Botan::Fixed_Base_Power_Mod
Definition: pow_mod.h:120
Botan::BigInt
Definition: bigint.h:23
Botan::Fixed_Exponent_Power_Mod::operator()
BigInt operator()(const BigInt &b) const
Definition: pow_mod.h:107
Botan::Fixed_Base_Power_Mod::operator()
BigInt operator()(const BigInt &e) const
Definition: pow_mod.h:123
Botan::Power_Mod
Definition: pow_mod.h:35
Botan
Definition: alg_id.cpp:13
Botan::Power_Mod::Usage_Hints
Usage_Hints
Definition: pow_mod.h:39
Botan::Fixed_Exponent_Power_Mod
Definition: pow_mod.h:104
Botan::Modular_Exponentiator
Definition: pow_mod.h:18