aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/botan.h1
-rw-r--r--include/config.h47
-rw-r--r--include/libstate.h17
-rw-r--r--src/config.cpp114
-rw-r--r--src/dl_group.cpp3
-rw-r--r--src/libstate.cpp106
-rw-r--r--src/mem_pool.cpp3
-rw-r--r--src/oids.cpp17
-rw-r--r--src/pk_core.cpp1
-rw-r--r--src/policy.cpp16
-rw-r--r--src/selftest.cpp3
-rw-r--r--src/x509_ca.cpp5
-rw-r--r--src/x509opt.cpp1
-rw-r--r--src/x509self.cpp1
14 files changed, 118 insertions, 217 deletions
diff --git a/include/botan.h b/include/botan.h
index 74a6628a0..70261398a 100644
--- a/include/botan.h
+++ b/include/botan.h
@@ -5,7 +5,6 @@
#include <botan/base.h>
#include <botan/rng.h>
-#include <botan/config.h>
#include <botan/init.h>
#include <botan/lookup.h>
#include <botan/version.h>
diff --git a/include/config.h b/include/config.h
deleted file mode 100644
index 65147e3e6..000000000
--- a/include/config.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*************************************************
-* Configuration Handling Header File *
-* (C) 1999-2008 Jack Lloyd *
-*************************************************/
-
-#ifndef BOTAN_POLICY_CONF_H__
-#define BOTAN_POLICY_CONF_H__
-
-#include <botan/mutex.h>
-#include <string>
-#include <map>
-
-namespace Botan {
-
-/*************************************************
-* Library Configuration Settings *
-*************************************************/
-class BOTAN_DLL Config
- {
- public:
- Config();
- ~Config();
-
- void load_defaults();
-
- std::string get(const std::string&, const std::string&) const;
- bool is_set(const std::string&, const std::string&) const;
- void set(const std::string&, const std::string&,
- const std::string&, bool = true);
-
- std::string option(const std::string&) const;
-
- void set_option(const std::string, const std::string&);
-
- void add_alias(const std::string&, const std::string&);
- std::string deref_alias(const std::string&) const;
- private:
- Config(const Config&) {}
- Config& operator=(const Config&) { return (*this); }
-
- std::map<std::string, std::string> settings;
- Mutex* mutex;
- };
-
-}
-
-#endif
diff --git a/include/libstate.h b/include/libstate.h
index 63c01d270..f6a616bba 100644
--- a/include/libstate.h
+++ b/include/libstate.h
@@ -43,13 +43,23 @@ class BOTAN_DLL Library_State
Allocator* get_allocator(const std::string& = "") const;
void add_allocator(Allocator*);
- void set_default_allocator(const std::string&) const;
+ void set_default_allocator(const std::string&);
+
+ std::string get(const std::string&, const std::string&) const;
+ bool is_set(const std::string&, const std::string&) const;
+ void set(const std::string&, const std::string&,
+ const std::string&, bool = true);
- class Config& config() const;
std::string option(const std::string&) const;
+ void set_option(const std::string, const std::string&);
+
+ void add_alias(const std::string&, const std::string&);
+ std::string deref_alias(const std::string&) const;
class Mutex* get_mutex() const;
private:
+ void load_default_config();
+
Library_State(const Library_State&) {}
Library_State& operator=(const Library_State&) { return (*this); }
@@ -57,7 +67,8 @@ class BOTAN_DLL Library_State
class Mutex_Factory* mutex_factory;
- mutable class Config* config_obj;
+ std::map<std::string, std::string> config;
+ class Mutex* config_lock;
class Mutex* allocator_lock;
std::map<std::string, Allocator*> alloc_factory;
diff --git a/src/config.cpp b/src/config.cpp
deleted file mode 100644
index 121335c7d..000000000
--- a/src/config.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/*************************************************
-* Configuration Handling Source File *
-* (C) 1999-2007 Jack Lloyd *
-*************************************************/
-
-#include <botan/config.h>
-#include <botan/libstate.h>
-#include <botan/mutex.h>
-#include <botan/stl_util.h>
-#include <botan/lookup.h>
-#include <string>
-
-namespace Botan {
-
-/*************************************************
-* Dereference an alias *
-*************************************************/
-std::string deref_alias(const std::string& name)
- {
- return global_state().config().deref_alias(name);
- }
-
-/*************************************************
-* Get a configuration value *
-*************************************************/
-Config::Config()
- {
- mutex = global_state().get_mutex();
- }
-
-/*************************************************
-* Get a configuration value *
-*************************************************/
-Config::~Config()
- {
- delete mutex;
- }
-
-/*************************************************
-* Get a configuration value *
-*************************************************/
-std::string Config::get(const std::string& section,
- const std::string& key) const
- {
- Mutex_Holder lock(mutex);
-
- return search_map<std::string, std::string>(settings,
- section + "/" + key, "");
- }
-
-/*************************************************
-* See if a particular option has been set *
-*************************************************/
-bool Config::is_set(const std::string& section,
- const std::string& key) const
- {
- Mutex_Holder lock(mutex);
-
- return search_map(settings, section + "/" + key, false, true);
- }
-
-/*************************************************
-* Set a configuration value *
-*************************************************/
-void Config::set(const std::string& section, const std::string& key,
- const std::string& value, bool overwrite)
- {
- Mutex_Holder lock(mutex);
-
- std::string full_key = section + "/" + key;
-
- std::map<std::string, std::string>::const_iterator i =
- settings.find(full_key);
-
- if(overwrite || i == settings.end() || i->second == "")
- settings[full_key] = value;
- }
-
-/*************************************************
-* Add an alias *
-*************************************************/
-void Config::add_alias(const std::string& key, const std::string& value)
- {
- set("alias", key, value);
- }
-
-/*************************************************
-* Dereference an alias to a fixed name *
-*************************************************/
-std::string Config::deref_alias(const std::string& key) const
- {
- std::string result = key;
- while(is_set("alias", result))
- result = get("alias", result);
- return result;
- }
-
-/*************************************************
-* Set/Add an option *
-*************************************************/
-void Config::set_option(const std::string key, const std::string& value)
- {
- set("conf", key, value);
- }
-
-/*************************************************
-* Get an option value *
-*************************************************/
-std::string Config::option(const std::string& key) const
- {
- return get("conf", key);
- }
-
-}
diff --git a/src/dl_group.cpp b/src/dl_group.cpp
index 5db2c045b..f1a7cb26e 100644
--- a/src/dl_group.cpp
+++ b/src/dl_group.cpp
@@ -4,7 +4,6 @@
*************************************************/
#include <botan/dl_group.h>
-#include <botan/config.h>
#include <botan/libstate.h>
#include <botan/parsing.h>
#include <botan/numthry.h>
@@ -29,7 +28,7 @@ DL_Group::DL_Group()
*************************************************/
DL_Group::DL_Group(const std::string& type)
{
- std::string grp_contents = global_state().config().get("dl", type);
+ std::string grp_contents = global_state().get("dl", type);
if(grp_contents == "")
throw Invalid_Argument("DL_Group: Unknown group " + type);
diff --git a/src/libstate.cpp b/src/libstate.cpp
index d0848b52d..f96a53d19 100644
--- a/src/libstate.cpp
+++ b/src/libstate.cpp
@@ -4,15 +4,13 @@
*************************************************/
#include <botan/libstate.h>
-#include <botan/config.h>
#include <botan/modules.h>
#include <botan/engine.h>
#include <botan/stl_util.h>
#include <botan/mutex.h>
#include <botan/charset.h>
-#include <botan/x931_rng.h>
-#include <botan/randpool.h>
#include <botan/selftest.h>
+#include <botan/lookup.h>
#include <algorithm>
namespace Botan {
@@ -27,6 +25,14 @@ Library_State* global_lib_state = 0;
}
/*************************************************
+* Dereference an alias *
+*************************************************/
+std::string deref_alias(const std::string& name)
+ {
+ return global_state().deref_alias(name);
+ }
+
+/*************************************************
* Access the global state object *
*************************************************/
Library_State& global_state()
@@ -82,7 +88,7 @@ Allocator* Library_State::get_allocator(const std::string& type) const
if(!cached_default_allocator)
{
- std::string chosen = config().option("base/default_allocator");
+ std::string chosen = this->option("base/default_allocator");
if(chosen == "")
chosen = "malloc";
@@ -110,14 +116,14 @@ void Library_State::add_allocator(Allocator* allocator)
/*************************************************
* Set the default allocator type *
*************************************************/
-void Library_State::set_default_allocator(const std::string& type) const
+void Library_State::set_default_allocator(const std::string& type)
{
Mutex_Holder lock(allocator_lock);
if(type == "")
return;
- config().set("conf", "base/default_allocator", type);
+ this->set("conf", "base/default_allocator", type);
cached_default_allocator = 0;
}
@@ -143,25 +149,79 @@ void Library_State::add_engine(Engine* engine)
}
/*************************************************
-* Get the configuration object *
+* Get a configuration value *
*************************************************/
-Config& Library_State::config() const
+std::string Library_State::get(const std::string& section,
+ const std::string& key) const
{
- if(!config_obj)
- {
- config_obj = new Config();
- config_obj->load_defaults();
- }
+ Mutex_Holder lock(config_lock);
+
+ return search_map<std::string, std::string>(config,
+ section + "/" + key, "");
+ }
+
+/*************************************************
+* See if a particular option has been set *
+*************************************************/
+bool Library_State::is_set(const std::string& section,
+ const std::string& key) const
+ {
+ Mutex_Holder lock(config_lock);
+
+ return search_map(config, section + "/" + key, false, true);
+ }
+
+/*************************************************
+* Set a configuration value *
+*************************************************/
+void Library_State::set(const std::string& section, const std::string& key,
+ const std::string& value, bool overwrite)
+ {
+ Mutex_Holder lock(config_lock);
+
+ std::string full_key = section + "/" + key;
+
+ std::map<std::string, std::string>::const_iterator i =
+ config.find(full_key);
- return (*config_obj);
+ if(overwrite || i == config.end() || i->second == "")
+ config[full_key] = value;
}
/*************************************************
-* Set the configuration object *
+* Add an alias *
*************************************************/
-std::string Library_State::option(const std::string& name) const
+void Library_State::add_alias(const std::string& key, const std::string& value)
{
- return config().option(name);
+ set("alias", key, value);
+ }
+
+/*************************************************
+* Dereference an alias to a fixed name *
+*************************************************/
+std::string Library_State::deref_alias(const std::string& key) const
+ {
+ std::string result = key;
+ while(is_set("alias", result))
+ result = get("alias", result);
+ return result;
+ }
+
+/*************************************************
+* Set/Add an option *
+*************************************************/
+void Library_State::set_option(const std::string key,
+ const std::string& value)
+ {
+ set("conf", key, value);
+ }
+
+/*************************************************
+* Get an option value *
+*************************************************/
+std::string Library_State::option(const std::string& key) const
+ {
+ return get("conf", key);
}
/*************************************************
@@ -180,6 +240,7 @@ void Library_State::initialize(const InitializerOptions& args,
allocator_lock = get_mutex();
engine_lock = get_mutex();
+ config_lock = get_mutex();
cached_default_allocator = 0;
@@ -189,6 +250,8 @@ void Library_State::initialize(const InitializerOptions& args,
set_default_allocator(modules.default_allocator());
+ load_default_config();
+
std::vector<Engine*> mod_engines = modules.engines();
for(u32bit j = 0; j != mod_engines.size(); ++j)
engines.push_back(mod_engines[j]);
@@ -206,11 +269,7 @@ void Library_State::initialize(const InitializerOptions& args,
Library_State::Library_State()
{
mutex_factory = 0;
-
- allocator_lock = engine_lock = 0;
-
- config_obj = 0;
-
+ allocator_lock = engine_lock = config_lock = 0;
cached_default_allocator = 0;
}
@@ -219,8 +278,6 @@ Library_State::Library_State()
*************************************************/
Library_State::~Library_State()
{
- delete config_obj;
-
std::for_each(engines.begin(), engines.end(), del_fun<Engine>());
cached_default_allocator = 0;
@@ -234,6 +291,7 @@ Library_State::~Library_State()
delete allocator_lock;
delete engine_lock;
delete mutex_factory;
+ delete config_lock;
}
}
diff --git a/src/mem_pool.cpp b/src/mem_pool.cpp
index 7ab121ffb..4c2c30d25 100644
--- a/src/mem_pool.cpp
+++ b/src/mem_pool.cpp
@@ -1,13 +1,12 @@
/*************************************************
* Pooling Allocator Source File *
-* (C) 1999-2007 Jack Lloyd *
+* (C) 1999-2008 Jack Lloyd *
* 2005 Matthew Gregan *
* 2005-2006 Matt Johnston *
*************************************************/
#include <botan/mem_pool.h>
#include <botan/libstate.h>
-#include <botan/config.h>
#include <botan/util.h>
#include <algorithm>
diff --git a/src/oids.cpp b/src/oids.cpp
index 8402edb18..0823625ea 100644
--- a/src/oids.cpp
+++ b/src/oids.cpp
@@ -1,10 +1,9 @@
/*************************************************
* OID Registry Source File *
-* (C) 1999-2007 Jack Lloyd *
+* (C) 1999-2008 Jack Lloyd *
*************************************************/
#include <botan/oids.h>
-#include <botan/config.h>
#include <botan/libstate.h>
namespace Botan {
@@ -18,10 +17,10 @@ void add_oid(const OID& oid, const std::string& name)
{
const std::string oid_str = oid.as_string();
- if(!global_state().config().is_set("oid2str", oid_str))
- global_state().config().set("oid2str", oid_str, name);
- if(!global_state().config().is_set("str2oid", name))
- global_state().config().set("str2oid", name, oid_str);
+ if(!global_state().is_set("oid2str", oid_str))
+ global_state().set("oid2str", oid_str, name);
+ if(!global_state().is_set("str2oid", name))
+ global_state().set("str2oid", name, oid_str);
}
/*************************************************
@@ -29,7 +28,7 @@ void add_oid(const OID& oid, const std::string& name)
*************************************************/
std::string lookup(const OID& oid)
{
- std::string name = global_state().config().get("oid2str", oid.as_string());
+ std::string name = global_state().get("oid2str", oid.as_string());
if(name == "")
return oid.as_string();
return name;
@@ -40,7 +39,7 @@ std::string lookup(const OID& oid)
*************************************************/
OID lookup(const std::string& name)
{
- std::string value = global_state().config().get("str2oid", name);
+ std::string value = global_state().get("str2oid", name);
if(value != "")
return OID(value);
@@ -59,7 +58,7 @@ OID lookup(const std::string& name)
*************************************************/
bool have_oid(const std::string& name)
{
- return global_state().config().is_set("str2oid", name);
+ return global_state().is_set("str2oid", name);
}
/*************************************************
diff --git a/src/pk_core.cpp b/src/pk_core.cpp
index 939ad1c1f..82fe4c217 100644
--- a/src/pk_core.cpp
+++ b/src/pk_core.cpp
@@ -6,7 +6,6 @@
#include <botan/pk_core.h>
#include <botan/numthry.h>
#include <botan/engine.h>
-#include <botan/config.h>
#include <botan/parsing.h>
#include <algorithm>
diff --git a/src/policy.cpp b/src/policy.cpp
index 306a6bb31..bdd26e6d6 100644
--- a/src/policy.cpp
+++ b/src/policy.cpp
@@ -1,9 +1,9 @@
/*************************************************
* Default Policy Source File *
-* (C) 1999-2007 Jack Lloyd *
+* (C) 1999-2008 Jack Lloyd *
*************************************************/
-#include <botan/config.h>
+#include <botan/libstate.h>
namespace Botan {
@@ -12,7 +12,7 @@ namespace {
/*************************************************
* OID loading helper function *
*************************************************/
-void add_oid(Config& config,
+void add_oid(Library_State& config,
const std::string& oid_str,
const std::string& name)
{
@@ -25,7 +25,7 @@ void add_oid(Config& config,
/*************************************************
* Load all of the default OIDs *
*************************************************/
-void set_default_oids(Config& config)
+void set_default_oids(Library_State& config)
{
add_oid(config, "1.2.840.113549.1.1.1", "RSA");
add_oid(config, "2.5.8.1.1", "RSA");
@@ -166,7 +166,7 @@ void set_default_oids(Config& config)
/*************************************************
* Set the default algorithm aliases *
*************************************************/
-void set_default_aliases(Config& config)
+void set_default_aliases(Library_State& config)
{
config.add_alias("OpenPGP.Cipher.1", "IDEA");
config.add_alias("OpenPGP.Cipher.2", "TripleDES");
@@ -210,7 +210,7 @@ void set_default_aliases(Config& config)
/*************************************************
* Set the default configuration toggles *
*************************************************/
-void set_default_config(Config& config)
+void set_default_config(Library_State& config)
{
config.set_option("base/default_pbe",
"PBE-PKCS5v20(SHA-1,TripleDES/CBC)");
@@ -245,7 +245,7 @@ void set_default_config(Config& config)
/*************************************************
* Set the built-in discrete log groups *
*************************************************/
-void set_default_dl_groups(Config& config)
+void set_default_dl_groups(Library_State& config)
{
config.set("dl", "modp/ietf/768",
"-----BEGIN X942 DH PARAMETERS-----"
@@ -375,7 +375,7 @@ void set_default_dl_groups(Config& config)
/*************************************************
* Set the default policy *
*************************************************/
-void Config::load_defaults()
+void Library_State::load_default_config()
{
set_default_config(*this);
set_default_aliases(*this);
diff --git a/src/selftest.cpp b/src/selftest.cpp
index 3c8185ce0..135317bb7 100644
--- a/src/selftest.cpp
+++ b/src/selftest.cpp
@@ -149,8 +149,9 @@ bool passes_self_tests()
"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B"
"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B");
}
- catch(std::exception)
+ catch(std::exception& e)
{
+ printf("%s\n", e.what());
return false;
}
diff --git a/src/x509_ca.cpp b/src/x509_ca.cpp
index 24cc35a74..d455e4988 100644
--- a/src/x509_ca.cpp
+++ b/src/x509_ca.cpp
@@ -8,7 +8,6 @@
#include <botan/der_enc.h>
#include <botan/ber_dec.h>
#include <botan/libstate.h>
-#include <botan/config.h>
#include <botan/lookup.h>
#include <botan/look_pk.h>
#include <botan/numthry.h>
@@ -258,14 +257,14 @@ PK_Signer* choose_sig_format(const Private_Key& key,
if(hash == "")
throw Invalid_State("No value set for x509/ca/rsa_hash");
- hash = global_state().config().deref_alias(hash);
+ hash = global_state().deref_alias(hash);
padding = "EMSA3(" + hash + ")";
format = IEEE_1363;
}
else if(algo_name == "DSA")
{
- std::string hash = global_state().config().deref_alias("SHA-1");
+ std::string hash = global_state().deref_alias("SHA-1");
padding = "EMSA1(" + hash + ")";
format = DER_SEQUENCE;
}
diff --git a/src/x509opt.cpp b/src/x509opt.cpp
index 36b82de00..716884ed5 100644
--- a/src/x509opt.cpp
+++ b/src/x509opt.cpp
@@ -7,7 +7,6 @@
#include <botan/util.h>
#include <botan/parsing.h>
#include <botan/oids.h>
-#include <botan/config.h>
#include <ctime>
namespace Botan {
diff --git a/src/x509self.cpp b/src/x509self.cpp
index 046ca4c8d..6c3baae9b 100644
--- a/src/x509self.cpp
+++ b/src/x509self.cpp
@@ -7,7 +7,6 @@
#include <botan/x509_ext.h>
#include <botan/x509_ca.h>
#include <botan/der_enc.h>
-#include <botan/config.h>
#include <botan/look_pk.h>
#include <botan/oids.h>
#include <botan/pipe.h>