/usr/include/botan-1.10/botan/algo_factory.h is in libbotan1.10-dev 1.10.8-2+deb8u2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | /*
* Algorithm Factory
* (C) 2008 Jack Lloyd
*
* Distributed under the terms of the Botan license
*/
#ifndef BOTAN_ALGORITHM_FACTORY_H__
#define BOTAN_ALGORITHM_FACTORY_H__
#include <botan/types.h>
#include <string>
#include <vector>
namespace Botan {
/**
* Forward declarations (don't need full definitions here)
*/
class BlockCipher;
class StreamCipher;
class HashFunction;
class MessageAuthenticationCode;
class PBKDF;
template<typename T> class Algorithm_Cache;
class Engine;
class Mutex_Factory;
/**
* Algorithm Factory
*/
class BOTAN_DLL Algorithm_Factory
{
public:
/**
* Constructor
* @param mf a mutex factory
*/
Algorithm_Factory(Mutex_Factory& mf);
/**
* Destructor
*/
~Algorithm_Factory();
/**
* @param engine to add (Algorithm_Factory takes ownership)
*/
void add_engine(Engine* engine);
/**
* Clear out any cached objects
*/
void clear_caches();
/**
* @param algo_spec the algorithm we are querying
* @returns list of providers of this algorithm
*/
std::vector<std::string> providers_of(const std::string& algo_spec);
/**
* @param algo_spec the algorithm we are setting a provider for
* @param provider the provider we would like to use
*/
void set_preferred_provider(const std::string& algo_spec,
const std::string& provider);
/**
* @param algo_spec the algorithm we want
* @param provider the provider we would like to use
* @returns pointer to const prototype object, ready to clone(), or NULL
*/
const BlockCipher*
prototype_block_cipher(const std::string& algo_spec,
const std::string& provider = "");
/**
* @param algo_spec the algorithm we want
* @param provider the provider we would like to use
* @returns pointer to freshly created instance of the request algorithm
*/
BlockCipher* make_block_cipher(const std::string& algo_spec,
const std::string& provider = "");
/**
* @param algo the algorithm to add
* @param provider the provider of this algorithm
*/
void add_block_cipher(BlockCipher* algo, const std::string& provider);
/**
* @param algo_spec the algorithm we want
* @param provider the provider we would like to use
* @returns pointer to const prototype object, ready to clone(), or NULL
*/
const StreamCipher*
prototype_stream_cipher(const std::string& algo_spec,
const std::string& provider = "");
/**
* @param algo_spec the algorithm we want
* @param provider the provider we would like to use
* @returns pointer to freshly created instance of the request algorithm
*/
StreamCipher* make_stream_cipher(const std::string& algo_spec,
const std::string& provider = "");
/**
* @param algo the algorithm to add
* @param provider the provider of this algorithm
*/
void add_stream_cipher(StreamCipher* algo, const std::string& provider);
/**
* @param algo_spec the algorithm we want
* @param provider the provider we would like to use
* @returns pointer to const prototype object, ready to clone(), or NULL
*/
const HashFunction*
prototype_hash_function(const std::string& algo_spec,
const std::string& provider = "");
/**
* @param algo_spec the algorithm we want
* @param provider the provider we would like to use
* @returns pointer to freshly created instance of the request algorithm
*/
HashFunction* make_hash_function(const std::string& algo_spec,
const std::string& provider = "");
/**
* @param algo the algorithm to add
* @param provider the provider of this algorithm
*/
void add_hash_function(HashFunction* algo, const std::string& provider);
/**
* @param algo_spec the algorithm we want
* @param provider the provider we would like to use
* @returns pointer to const prototype object, ready to clone(), or NULL
*/
const MessageAuthenticationCode*
prototype_mac(const std::string& algo_spec,
const std::string& provider = "");
/**
* @param algo_spec the algorithm we want
* @param provider the provider we would like to use
* @returns pointer to freshly created instance of the request algorithm
*/
MessageAuthenticationCode* make_mac(const std::string& algo_spec,
const std::string& provider = "");
/**
* @param algo the algorithm to add
* @param provider the provider of this algorithm
*/
void add_mac(MessageAuthenticationCode* algo,
const std::string& provider);
/**
* @param algo_spec the algorithm we want
* @param provider the provider we would like to use
* @returns pointer to const prototype object, ready to clone(), or NULL
*/
const PBKDF* prototype_pbkdf(const std::string& algo_spec,
const std::string& provider = "");
/**
* @param algo_spec the algorithm we want
* @param provider the provider we would like to use
* @returns pointer to freshly created instance of the request algorithm
*/
PBKDF* make_pbkdf(const std::string& algo_spec,
const std::string& provider = "");
/**
* @param algo the algorithm to add
* @param provider the provider of this algorithm
*/
void add_pbkdf(PBKDF* algo, const std::string& provider);
/**
* An iterator for the engines in this factory
* @deprecated Avoid in new code
*/
class BOTAN_DLL Engine_Iterator
{
public:
/**
* @return next engine in the sequence
*/
Engine* next() { return af.get_engine_n(n++); }
/**
* @param a an algorithm factory
*/
Engine_Iterator(const Algorithm_Factory& a) :
af(a) { n = 0; }
private:
const Algorithm_Factory& af;
size_t n;
};
friend class Engine_Iterator;
private:
Algorithm_Factory(const Algorithm_Factory&) {}
Algorithm_Factory& operator=(const Algorithm_Factory&)
{ return (*this); }
Engine* get_engine_n(size_t n) const;
std::vector<Engine*> engines;
Algorithm_Cache<BlockCipher>* block_cipher_cache;
Algorithm_Cache<StreamCipher>* stream_cipher_cache;
Algorithm_Cache<HashFunction>* hash_cache;
Algorithm_Cache<MessageAuthenticationCode>* mac_cache;
Algorithm_Cache<PBKDF>* pbkdf_cache;
};
}
#endif
|