Botan 1.10.17
Botan::Fixed_Base_Power_Mod Class Reference

#include <pow_mod.h>

Inheritance diagram for Botan::Fixed_Base_Power_Mod:
Botan::Power_Mod

Public Types

enum  Usage_Hints {
  NO_HINTS = 0x0000 , BASE_IS_FIXED = 0x0001 , BASE_IS_SMALL = 0x0002 , BASE_IS_LARGE = 0x0004 ,
  BASE_IS_2 = 0x0008 , EXP_IS_FIXED = 0x0100 , EXP_IS_SMALL = 0x0200 , EXP_IS_LARGE = 0x0400
}

Public Member Functions

BigInt execute () const
 Fixed_Base_Power_Mod ()
 Fixed_Base_Power_Mod (const BigInt &, const BigInt &, Usage_Hints=NO_HINTS)
BigInt operator() (const BigInt &e) const
void set_base (const BigInt &) const
void set_exponent (const BigInt &) const
void set_modulus (const BigInt &, Usage_Hints=NO_HINTS) const

Static Public Member Functions

static size_t window_bits (size_t exp_bits, size_t base_bits, Power_Mod::Usage_Hints hints)

Detailed Description

Fixed Base Modular Exponentiator Proxy

Definition at line 87 of file pow_mod.h.

Member Enumeration Documentation

◆ Usage_Hints

Enumerator
NO_HINTS 
BASE_IS_FIXED 
BASE_IS_SMALL 
BASE_IS_LARGE 
BASE_IS_2 
EXP_IS_FIXED 
EXP_IS_SMALL 
EXP_IS_LARGE 

Definition at line 35 of file pow_mod.h.

35 {
36 NO_HINTS = 0x0000,
37
38 BASE_IS_FIXED = 0x0001,
39 BASE_IS_SMALL = 0x0002,
40 BASE_IS_LARGE = 0x0004,
41 BASE_IS_2 = 0x0008,
42
43 EXP_IS_FIXED = 0x0100,
44 EXP_IS_SMALL = 0x0200,
45 EXP_IS_LARGE = 0x0400
46 };

Constructor & Destructor Documentation

◆ Fixed_Base_Power_Mod() [1/2]

◆ Fixed_Base_Power_Mod() [2/2]

Botan::Fixed_Base_Power_Mod::Fixed_Base_Power_Mod ( const BigInt & b,
const BigInt & n,
Usage_Hints hints = NO_HINTS )

Definition at line 206 of file pow_mod.cpp.

207 :
208 Power_Mod(n, Usage_Hints(hints | BASE_IS_FIXED | choose_base_hints(b, n)))
209 {
210 set_base(b);
211 }
void set_base(const BigInt &) const
Definition pow_mod.cpp:83
Power_Mod(const BigInt &=0, Usage_Hints=NO_HINTS)
Definition pow_mod.cpp:17

References Botan::Power_Mod::BASE_IS_FIXED, Botan::Power_Mod::Power_Mod(), and Botan::Power_Mod::set_base().

Member Function Documentation

◆ execute()

BigInt Botan::Power_Mod::execute ( ) const
inherited

Definition at line 109 of file pow_mod.cpp.

110 {
111 if(!core)
112 throw Internal_Error("Power_Mod::execute: core was NULL");
113 return core->execute();
114 }
Internal_Error(const std::string &err)
Definition exceptn.h:47

References Botan::Internal_Error::Internal_Error().

Referenced by Botan::Fixed_Base_Power_Mod::operator()(), Botan::Fixed_Exponent_Power_Mod::operator()(), and Botan::power_mod().

◆ operator()()

BigInt Botan::Fixed_Base_Power_Mod::operator() ( const BigInt & e) const
inline

Definition at line 90 of file pow_mod.h.

91 { set_exponent(e); return execute(); }
void set_exponent(const BigInt &) const
Definition pow_mod.cpp:96
BigInt execute() const
Definition pow_mod.cpp:109

References Botan::Power_Mod::execute(), and Botan::Power_Mod::set_exponent().

◆ set_base()

void Botan::Power_Mod::set_base ( const BigInt & b) const
inherited

Definition at line 83 of file pow_mod.cpp.

84 {
85 if(b.is_zero() || b.is_negative())
86 throw Invalid_Argument("Power_Mod::set_base: arg must be > 0");
87
88 if(!core)
89 throw Internal_Error("Power_Mod::set_base: core was NULL");
90 core->set_base(b);
91 }
std::invalid_argument Invalid_Argument
Definition exceptn.h:20

References Botan::Internal_Error::Internal_Error(), Botan::BigInt::is_negative(), and Botan::BigInt::is_zero().

Referenced by Botan::Fixed_Base_Power_Mod::Fixed_Base_Power_Mod(), Botan::Fixed_Exponent_Power_Mod::operator()(), and Botan::power_mod().

◆ set_exponent()

void Botan::Power_Mod::set_exponent ( const BigInt & e) const
inherited

Definition at line 96 of file pow_mod.cpp.

97 {
98 if(e.is_negative())
99 throw Invalid_Argument("Power_Mod::set_exponent: arg must be > 0");
100
101 if(!core)
102 throw Internal_Error("Power_Mod::set_exponent: core was NULL");
103 core->set_exponent(e);
104 }

References Botan::Internal_Error::Internal_Error(), and Botan::BigInt::is_negative().

Referenced by Botan::Fixed_Exponent_Power_Mod::Fixed_Exponent_Power_Mod(), Botan::Fixed_Base_Power_Mod::operator()(), and Botan::power_mod().

◆ set_modulus()

void Botan::Power_Mod::set_modulus ( const BigInt & n,
Usage_Hints hints = NO_HINTS ) const
inherited

Definition at line 58 of file pow_mod.cpp.

59 {
60 delete core;
61 core = 0;
62
63 if(n != 0)
64 {
65 Algorithm_Factory::Engine_Iterator i(global_state().algorithm_factory());
66
67 while(const Engine* engine = i.next())
68 {
69 core = engine->mod_exp(n, hints);
70
71 if(core)
72 break;
73 }
74
75 if(!core)
76 throw Lookup_Error("Power_Mod: Unable to find a working engine");
77 }
78 }
Library_State & global_state()
Lookup_Error(const std::string &err)
Definition exceptn.h:37

References Botan::global_state(), Botan::Lookup_Error::Lookup_Error(), and Botan::Algorithm_Factory::Engine_Iterator::next().

Referenced by Power_Mod().

◆ window_bits()

size_t Botan::Power_Mod::window_bits ( size_t exp_bits,
size_t base_bits,
Power_Mod::Usage_Hints hints )
staticinherited

Definition at line 119 of file pow_mod.cpp.

121 {
122 static const size_t wsize[][2] = {
123 { 1434, 7 },
124 { 539, 6 },
125 { 197, 4 },
126 { 70, 3 },
127 { 25, 2 },
128 { 0, 0 }
129 };
130
131 size_t window_bits = 1;
132
133 if(exp_bits)
134 {
135 for(size_t j = 0; wsize[j][0]; ++j)
136 {
137 if(exp_bits >= wsize[j][0])
138 {
139 window_bits += wsize[j][1];
140 break;
141 }
142 }
143 }
144
145 if(hints & Power_Mod::BASE_IS_FIXED)
146 window_bits += 2;
147 if(hints & Power_Mod::EXP_IS_LARGE)
148 ++window_bits;
149
150 return window_bits;
151 }
static size_t window_bits(size_t exp_bits, size_t base_bits, Power_Mod::Usage_Hints hints)
Definition pow_mod.cpp:119

References BASE_IS_FIXED, EXP_IS_LARGE, and window_bits().

Referenced by Botan::Fixed_Window_Exponentiator::set_base(), Botan::Montgomery_Exponentiator::set_base(), and window_bits().


The documentation for this class was generated from the following files: