aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlloyd <[email protected]>2008-11-12 21:19:47 +0000
committerlloyd <[email protected]>2008-11-12 21:19:47 +0000
commit1c7f4ac5cade236cf53598abf5c043945cbc9a8f (patch)
treeb68fb295f9c01255f7a0e196d9201dbb2c4c64b6
parent36b82adcae6e0f6b2b9e5f588f6c81477847eaaf (diff)
Remove Library_State::add_engine and Algorithm_Factory::add_engine,
replacing with an updated constructor to Algorithm_Factory taking a vector of Engine*. The semantics of adding engines at runtime were not defined nor very clear, it seems best to prohibit this unless and until it is explicitly thought through (and until a need for it presents itself).
-rw-r--r--src/algo_factory/algo_factory.h39
-rw-r--r--src/libstate/libstate.cpp31
-rw-r--r--src/libstate/libstate.h2
3 files changed, 37 insertions, 35 deletions
diff --git a/src/algo_factory/algo_factory.h b/src/algo_factory/algo_factory.h
index fbaf26ebf..c71594ee3 100644
--- a/src/algo_factory/algo_factory.h
+++ b/src/algo_factory/algo_factory.h
@@ -21,6 +21,8 @@ class StreamCipher;
class HashFunction;
class MessageAuthenticationCode;
+class Engine;
+
/**
* Algorithm Factory
*/
@@ -29,20 +31,17 @@ class BOTAN_DLL Algorithm_Factory
public:
/**
* Contructor
+ * @param engines the list of engines to use
* @param mf a mutex factory
*/
- Algorithm_Factory(Mutex_Factory& mf);
+ Algorithm_Factory(const std::vector<Engine*>& engines,
+ Mutex_Factory& mf);
/**
* Destructor
*/
~Algorithm_Factory();
- /**
- * Add an engine implementation to this factory (how steampunk)
- */
- void add_engine(class Engine*);
-
/*
* Provider management
*/
@@ -54,37 +53,49 @@ class BOTAN_DLL Algorithm_Factory
/*
* Block cipher operations
*/
- const BlockCipher* prototype_block_cipher(const std::string& algo_spec,
- const std::string& provider = "");
+ const BlockCipher*
+ prototype_block_cipher(const std::string& algo_spec,
+ const std::string& provider = "");
+
BlockCipher* make_block_cipher(const std::string& algo_spec,
const std::string& provider = "");
+
void add_block_cipher(BlockCipher* hash, const std::string& provider);
/*
* Stream cipher operations
*/
- const StreamCipher* prototype_stream_cipher(const std::string& algo_spec,
- const std::string& provider = "");
+ const StreamCipher*
+ prototype_stream_cipher(const std::string& algo_spec,
+ const std::string& provider = "");
+
StreamCipher* make_stream_cipher(const std::string& algo_spec,
const std::string& provider = "");
+
void add_stream_cipher(StreamCipher* hash, const std::string& provider);
/*
* Hash function operations
*/
- const HashFunction* prototype_hash_function(const std::string& algo_spec,
- const std::string& provider = "");
+ const HashFunction*
+ prototype_hash_function(const std::string& algo_spec,
+ const std::string& provider = "");
+
HashFunction* make_hash_function(const std::string& algo_spec,
const std::string& provider = "");
+
void add_hash_function(HashFunction* hash, const std::string& provider);
/*
* MAC operations
*/
- const MessageAuthenticationCode* prototype_mac(const std::string& algo_spec,
- const std::string& provider = "");
+ const MessageAuthenticationCode*
+ prototype_mac(const std::string& algo_spec,
+ const std::string& provider = "");
+
MessageAuthenticationCode* make_mac(const std::string& algo_spec,
const std::string& provider = "");
+
void add_mac(MessageAuthenticationCode* mac,
const std::string& provider);
diff --git a/src/libstate/libstate.cpp b/src/libstate/libstate.cpp
index 160f07678..b75fbae88 100644
--- a/src/libstate/libstate.cpp
+++ b/src/libstate/libstate.cpp
@@ -275,38 +275,31 @@ void Library_State::initialize(bool thread_safe)
load_default_config();
- m_algorithm_factory = new Algorithm_Factory(*mutex_factory);
+ std::vector<Engine*> engines;
- m_algorithm_factory->add_engine(new Default_Engine);
-
-#if defined(BOTAN_HAS_ENGINE_IA32_ASSEMBLER)
- m_algorithm_factory->add_engine(new IA32_Assembler_Engine);
+#if defined(BOTAN_HAS_ENGINE_GNU_MP)
+ engines.push_back(new GMP_Engine);
#endif
-#if defined(BOTAN_HAS_ENGINE_AMD64_ASSEMBLER)
- m_algorithm_factory->add_engine(new AMD64_Assembler_Engine);
+#if defined(BOTAN_HAS_ENGINE_OPENSSL)
+ engines.push_back(new OpenSSL_Engine);
#endif
#if defined(BOTAN_HAS_ENGINE_SSE2_ASSEMBLER)
- m_algorithm_factory->add_engine(new SSE2_Assembler_Engine);
+ engines.push_back(new SSE2_Assembler_Engine);
#endif
-#if defined(BOTAN_HAS_ENGINE_OPENSSL)
- m_algorithm_factory->add_engine(new OpenSSL_Engine);
+#if defined(BOTAN_HAS_ENGINE_AMD64_ASSEMBLER)
+ engines.push_back(new AMD64_Assembler_Engine);
#endif
-#if defined(BOTAN_HAS_ENGINE_GNU_MP)
- m_algorithm_factory->add_engine(new GMP_Engine);
+#if defined(BOTAN_HAS_ENGINE_IA32_ASSEMBLER)
+ engines.push_back(new IA32_Assembler_Engine);
#endif
- }
+ engines.push_back(new Default_Engine);
-/**
-* Add a new engine
-*/
-void Library_State::add_engine(Engine* engine)
- {
- m_algorithm_factory->add_engine(engine);
+ m_algorithm_factory = new Algorithm_Factory(engines, *mutex_factory);
}
/*************************************************
diff --git a/src/libstate/libstate.h b/src/libstate/libstate.h
index 53a70a636..e45d1a7f3 100644
--- a/src/libstate/libstate.h
+++ b/src/libstate/libstate.h
@@ -29,8 +29,6 @@ class BOTAN_DLL Library_State
Algorithm_Factory& algorithm_factory();
- void add_engine(class Engine*);
-
Allocator* get_allocator(const std::string& = "") const;
void add_allocator(Allocator*);
void set_default_allocator(const std::string&);