From 855b569d25b5810213ae7e52c04df4e5e0cf8d46 Mon Sep 17 00:00:00 2001 From: lloyd Date: Wed, 1 Apr 2009 14:54:29 +0000 Subject: Start a new branch for C++0x experimentation. With GCC, build as C++0x (set the binary name to my particular installed GCC 4.4 snapshot). --- src/build-data/cc/gcc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/build-data/cc/gcc b/src/build-data/cc/gcc index 68d79ddf8..bde1e5822 100644 --- a/src/build-data/cc/gcc +++ b/src/build-data/cc/gcc @@ -1,6 +1,6 @@ realname "GNU C++" -binary_name "g++" +binary_name "g++-4.4-20090331" compiler_has_tr1 yes @@ -10,7 +10,7 @@ add_include_dir_option "-I" add_lib_dir_option "-L" add_lib_option "-l" -lang_flags "-D_REENTRANT -ansi -Wno-long-long" +lang_flags "-D_REENTRANT -ansi -Wno-long-long -std=c++0x" warning_flags "-W -Wall" #warning_flags "-Wextra -Wall -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wno-unused-parameter" -- cgit v1.2.3 From 99e8c1a20700631103ec20386f8080eeee4df588 Mon Sep 17 00:00:00 2001 From: lloyd Date: Wed, 1 Apr 2009 15:43:27 +0000 Subject: Remove the mutex classes in favor of C++0x's std::mutex and std::lock_guard --- Attic/mutex.h | 56 ++++++++++++++++++++ Attic/mutex/noop_mutex/info.txt | 10 ++++ Attic/mutex/noop_mutex/mux_noop.cpp | 50 ++++++++++++++++++ Attic/mutex/noop_mutex/mux_noop.h | 26 ++++++++++ Attic/mutex/pthreads/info.txt | 29 +++++++++++ Attic/mutex/pthreads/mux_pthr.cpp | 58 +++++++++++++++++++++ Attic/mutex/pthreads/mux_pthr.h | 26 ++++++++++ Attic/mutex/qt_mutex/info.txt | 18 +++++++ Attic/mutex/qt_mutex/mux_qt.cpp | 35 +++++++++++++ Attic/mutex/qt_mutex/mux_qt.h | 27 ++++++++++ Attic/mutex/win32_crit_section/info.txt | 17 +++++++ Attic/mutex/win32_crit_section/mux_win32.cpp | 34 +++++++++++++ Attic/mutex/win32_crit_section/mux_win32.h | 26 ++++++++++ src/algo_factory/algo_cache.h | 16 +++--- src/algo_factory/algo_factory.cpp | 11 ++-- src/algo_factory/algo_factory.h | 5 +- src/alloc/alloc_mmap/mmap_mem.h | 1 - src/alloc/mem_pool/mem_pool.cpp | 9 ++-- src/alloc/mem_pool/mem_pool.h | 6 +-- src/alloc/system_alloc/defalloc.h | 2 - src/libstate/init.cpp | 35 ++----------- src/libstate/libstate.cpp | 76 +++++++--------------------- src/libstate/libstate.h | 21 ++++---- src/mutex/noop_mutex/info.txt | 10 ---- src/mutex/noop_mutex/mux_noop.cpp | 50 ------------------ src/mutex/noop_mutex/mux_noop.h | 26 ---------- src/mutex/pthreads/info.txt | 29 ----------- src/mutex/pthreads/mux_pthr.cpp | 58 --------------------- src/mutex/pthreads/mux_pthr.h | 26 ---------- src/mutex/qt_mutex/info.txt | 18 ------- src/mutex/qt_mutex/mux_qt.cpp | 35 ------------- src/mutex/qt_mutex/mux_qt.h | 27 ---------- src/mutex/win32_crit_section/info.txt | 17 ------- src/mutex/win32_crit_section/mux_win32.cpp | 34 ------------- src/mutex/win32_crit_section/mux_win32.h | 26 ---------- src/utils/info.txt | 1 - src/utils/mutex.h | 56 -------------------- src/utils/scan_name.cpp | 1 + 38 files changed, 463 insertions(+), 545 deletions(-) create mode 100644 Attic/mutex.h create mode 100644 Attic/mutex/noop_mutex/info.txt create mode 100644 Attic/mutex/noop_mutex/mux_noop.cpp create mode 100644 Attic/mutex/noop_mutex/mux_noop.h create mode 100644 Attic/mutex/pthreads/info.txt create mode 100644 Attic/mutex/pthreads/mux_pthr.cpp create mode 100644 Attic/mutex/pthreads/mux_pthr.h create mode 100644 Attic/mutex/qt_mutex/info.txt create mode 100644 Attic/mutex/qt_mutex/mux_qt.cpp create mode 100644 Attic/mutex/qt_mutex/mux_qt.h create mode 100644 Attic/mutex/win32_crit_section/info.txt create mode 100644 Attic/mutex/win32_crit_section/mux_win32.cpp create mode 100644 Attic/mutex/win32_crit_section/mux_win32.h delete mode 100644 src/mutex/noop_mutex/info.txt delete mode 100644 src/mutex/noop_mutex/mux_noop.cpp delete mode 100644 src/mutex/noop_mutex/mux_noop.h delete mode 100644 src/mutex/pthreads/info.txt delete mode 100644 src/mutex/pthreads/mux_pthr.cpp delete mode 100644 src/mutex/pthreads/mux_pthr.h delete mode 100644 src/mutex/qt_mutex/info.txt delete mode 100644 src/mutex/qt_mutex/mux_qt.cpp delete mode 100644 src/mutex/qt_mutex/mux_qt.h delete mode 100644 src/mutex/win32_crit_section/info.txt delete mode 100644 src/mutex/win32_crit_section/mux_win32.cpp delete mode 100644 src/mutex/win32_crit_section/mux_win32.h delete mode 100644 src/utils/mutex.h diff --git a/Attic/mutex.h b/Attic/mutex.h new file mode 100644 index 000000000..a04ff83c9 --- /dev/null +++ b/Attic/mutex.h @@ -0,0 +1,56 @@ +/* +* Mutex +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_MUTEX_H__ +#define BOTAN_MUTEX_H__ + +#include + +namespace Botan { + +/* +* Mutex Base Class +*/ +class BOTAN_DLL Mutex + { + public: + virtual void lock() = 0; + virtual void unlock() = 0; + virtual ~Mutex() {} + }; + +/* +* Mutex Factory +*/ +class BOTAN_DLL Mutex_Factory + { + public: + virtual Mutex* make() = 0; + virtual ~Mutex_Factory() {} + }; + +/* +* Mutex Holding Class +*/ +class BOTAN_DLL Mutex_Holder + { + public: + Mutex_Holder(Mutex* m) : mux(m) + { + if(!mux) + throw Invalid_Argument("Mutex_Holder: Argument was NULL"); + mux->lock(); + } + + ~Mutex_Holder() { mux->unlock(); } + private: + Mutex* mux; + }; + +} + +#endif diff --git a/Attic/mutex/noop_mutex/info.txt b/Attic/mutex/noop_mutex/info.txt new file mode 100644 index 000000000..1f49f5e1c --- /dev/null +++ b/Attic/mutex/noop_mutex/info.txt @@ -0,0 +1,10 @@ +realname "No-Op Mutex" + +load_on auto + +define MUTEX_NOOP + + +mux_noop.cpp +mux_noop.h + diff --git a/Attic/mutex/noop_mutex/mux_noop.cpp b/Attic/mutex/noop_mutex/mux_noop.cpp new file mode 100644 index 000000000..5c45084fe --- /dev/null +++ b/Attic/mutex/noop_mutex/mux_noop.cpp @@ -0,0 +1,50 @@ +/* +* No-Op Mutex Factory +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include + +namespace Botan { + +/* +* No-Op Mutex Factory +*/ +Mutex* Noop_Mutex_Factory::make() + { + class Noop_Mutex : public Mutex + { + public: + class Mutex_State_Error : public Internal_Error + { + public: + Mutex_State_Error(const std::string& where) : + Internal_Error("Noop_Mutex::" + where + ": " + + "Mutex is already " + where + "ed") {} + }; + + void lock() + { + if(locked) + throw Mutex_State_Error("lock"); + locked = true; + } + + void unlock() + { + if(!locked) + throw Mutex_State_Error("unlock"); + locked = false; + } + + Noop_Mutex() { locked = false; } + private: + bool locked; + }; + + return new Noop_Mutex; + } + +} diff --git a/Attic/mutex/noop_mutex/mux_noop.h b/Attic/mutex/noop_mutex/mux_noop.h new file mode 100644 index 000000000..94201cb7c --- /dev/null +++ b/Attic/mutex/noop_mutex/mux_noop.h @@ -0,0 +1,26 @@ +/* +* No-Op Mutex Factory +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_NOOP_MUTEX_FACTORY_H__ +#define BOTAN_NOOP_MUTEX_FACTORY_H__ + +#include + +namespace Botan { + +/* +* No-Op Mutex Factory +*/ +class BOTAN_DLL Noop_Mutex_Factory : public Mutex_Factory + { + public: + Mutex* make(); + }; + +} + +#endif diff --git a/Attic/mutex/pthreads/info.txt b/Attic/mutex/pthreads/info.txt new file mode 100644 index 000000000..88de70de0 --- /dev/null +++ b/Attic/mutex/pthreads/info.txt @@ -0,0 +1,29 @@ +realname "Pthread Mutex" + +define MUTEX_PTHREAD + +load_on auto + + +mux_pthr.cpp +mux_pthr.h + + + +all!qnx,freebsd,openbsd,netbsd -> pthread + + + +aix +cygwin +darwin +freebsd +hpux +irix +linux +netbsd +openbsd +qnx +solaris +tru64 + diff --git a/Attic/mutex/pthreads/mux_pthr.cpp b/Attic/mutex/pthreads/mux_pthr.cpp new file mode 100644 index 000000000..9f1d9816e --- /dev/null +++ b/Attic/mutex/pthreads/mux_pthr.cpp @@ -0,0 +1,58 @@ +/* +* Pthread Mutex +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include +#include + +#ifndef _POSIX_C_SOURCE + #define _POSIX_C_SOURCE 199506 +#endif + +#include + +namespace Botan { + +/* +* Pthread Mutex Factory +*/ +Mutex* Pthread_Mutex_Factory::make() + { + + class Pthread_Mutex : public Mutex + { + public: + void lock() + { + if(pthread_mutex_lock(&mutex) != 0) + throw Exception("Pthread_Mutex::lock: Error occured"); + } + + void unlock() + { + if(pthread_mutex_unlock(&mutex) != 0) + throw Exception("Pthread_Mutex::unlock: Error occured"); + } + + Pthread_Mutex() + { + if(pthread_mutex_init(&mutex, 0) != 0) + throw Exception("Pthread_Mutex: initialization failed"); + } + + ~Pthread_Mutex() + { + if(pthread_mutex_destroy(&mutex) != 0) + throw Invalid_State("~Pthread_Mutex: mutex is still locked"); + } + private: + pthread_mutex_t mutex; + }; + + return new Pthread_Mutex(); + } + +} diff --git a/Attic/mutex/pthreads/mux_pthr.h b/Attic/mutex/pthreads/mux_pthr.h new file mode 100644 index 000000000..118853947 --- /dev/null +++ b/Attic/mutex/pthreads/mux_pthr.h @@ -0,0 +1,26 @@ +/* +* Pthread Mutex +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_MUTEX_PTHREAD_H__ +#define BOTAN_MUTEX_PTHREAD_H__ + +#include + +namespace Botan { + +/* +* Pthread Mutex Factory +*/ +class BOTAN_DLL Pthread_Mutex_Factory : public Mutex_Factory + { + public: + Mutex* make(); + }; + +} + +#endif diff --git a/Attic/mutex/qt_mutex/info.txt b/Attic/mutex/qt_mutex/info.txt new file mode 100644 index 000000000..a21108c79 --- /dev/null +++ b/Attic/mutex/qt_mutex/info.txt @@ -0,0 +1,18 @@ +realname "Qt Mutex" + +define MUTEX_QT + +note "You'll probably have to add -I/-L flags to the Makefile to find Qt" + +load_on request + + +mux_qt.cpp +mux_qt.h + + +# I think we want to always use qt-mt, not qt -- not much point in supporting +# mutexes in a single threaded application, after all. + +all -> qt-mt + diff --git a/Attic/mutex/qt_mutex/mux_qt.cpp b/Attic/mutex/qt_mutex/mux_qt.cpp new file mode 100644 index 000000000..0f670c8b4 --- /dev/null +++ b/Attic/mutex/qt_mutex/mux_qt.cpp @@ -0,0 +1,35 @@ +/* +* Qt Thread Mutex +* (C) 2004-2007 Justin Karneges +* 2004-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include +#include + +#if !defined(QT_THREAD_SUPPORT) + #error Your version of Qt does not support threads or mutexes +#endif + +namespace Botan { + +/* +* Qt Mutex Factory +*/ +Mutex* Qt_Mutex_Factory::make() + { + class Qt_Mutex : public Mutex + { + public: + void lock() { mutex.lock(); } + void unlock() { mutex.unlock(); } + private: + QMutex mutex; + }; + + return new Qt_Mutex(); + } + +} diff --git a/Attic/mutex/qt_mutex/mux_qt.h b/Attic/mutex/qt_mutex/mux_qt.h new file mode 100644 index 000000000..5aed77f4b --- /dev/null +++ b/Attic/mutex/qt_mutex/mux_qt.h @@ -0,0 +1,27 @@ +/* +* Qt Mutex +* (C) 2004-2007 Justin Karneges +* 2004-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_MUTEX_QT_H__ +#define BOTAN_MUTEX_QT_H__ + +#include + +namespace Botan { + +/* +* Qt Mutex +*/ +class BOTAN_DLL Qt_Mutex_Factory : public Mutex_Factory + { + public: + Mutex* make(); + }; + +} + +#endif diff --git a/Attic/mutex/win32_crit_section/info.txt b/Attic/mutex/win32_crit_section/info.txt new file mode 100644 index 000000000..a2d339c3b --- /dev/null +++ b/Attic/mutex/win32_crit_section/info.txt @@ -0,0 +1,17 @@ +realname "Win32 Mutex" + +define MUTEX_WIN32 +modset win32 + +load_on auto + + +mux_win32.cpp +mux_win32.h + + + +cygwin +windows +mingw + diff --git a/Attic/mutex/win32_crit_section/mux_win32.cpp b/Attic/mutex/win32_crit_section/mux_win32.cpp new file mode 100644 index 000000000..2a967892b --- /dev/null +++ b/Attic/mutex/win32_crit_section/mux_win32.cpp @@ -0,0 +1,34 @@ +/* +* Win32 Mutex +* (C) 2006 Luca Piccarreta +* 2006-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include +#include + +namespace Botan { + +/* +* Win32 Mutex Factory +*/ +Mutex* Win32_Mutex_Factory::make() + { + class Win32_Mutex : public Mutex + { + public: + void lock() { EnterCriticalSection(&mutex); } + void unlock() { LeaveCriticalSection(&mutex); } + + Win32_Mutex() { InitializeCriticalSection(&mutex); } + ~Win32_Mutex() { DeleteCriticalSection(&mutex); } + private: + CRITICAL_SECTION mutex; + }; + + return new Win32_Mutex(); + } + +} diff --git a/Attic/mutex/win32_crit_section/mux_win32.h b/Attic/mutex/win32_crit_section/mux_win32.h new file mode 100644 index 000000000..a91850e71 --- /dev/null +++ b/Attic/mutex/win32_crit_section/mux_win32.h @@ -0,0 +1,26 @@ +/* +* Win32 Mutex +* (C) 2006 Luca Piccarreta +* 2006-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_MUTEX_WIN32_H__ +#define BOTAN_MUTEX_WIN32_H__ + +#include + +namespace Botan { + +/* +* Win32 Mutex Factory +*/ +class BOTAN_DLL Win32_Mutex_Factory : public Mutex_Factory + { + public: + Mutex* make(); + }; +} + +#endif diff --git a/src/algo_factory/algo_cache.h b/src/algo_factory/algo_cache.h index 17ea9964a..97e14f85a 100644 --- a/src/algo_factory/algo_cache.h +++ b/src/algo_factory/algo_cache.h @@ -5,8 +5,9 @@ #ifndef BOTAN_ALGORITHM_CACHE_TEMPLATE_H__ #define BOTAN_ALGORITHM_CACHE_TEMPLATE_H__ -#include +#include #include +#include #include #include #include @@ -47,7 +48,6 @@ class Algorithm_Cache */ std::vector providers_of(const std::string& algo_name); - Algorithm_Cache(Mutex* m) : mutex(m) {} ~Algorithm_Cache(); private: typedef typename std::map >::iterator @@ -57,7 +57,7 @@ class Algorithm_Cache algorithms_iterator find_algorithm(const std::string& algo_spec); - Mutex* mutex; + std::mutex mutex; std::map aliases; std::map pref_providers; std::map > algorithms; @@ -93,7 +93,7 @@ template const T* Algorithm_Cache::get(const std::string& algo_spec, const std::string& requested_provider) { - Mutex_Holder lock(mutex); + std::lock_guard lock(mutex); algorithms_iterator algo = find_algorithm(algo_spec); if(algo == algorithms.end()) // algo not found at all (no providers) @@ -145,7 +145,7 @@ void Algorithm_Cache::add(T* algo, if(!algo) return; - Mutex_Holder lock(mutex); + std::lock_guard lock(mutex); delete algorithms[algo->name()][provider]; algorithms[algo->name()][provider] = algo; @@ -163,7 +163,7 @@ void Algorithm_Cache::add(T* algo, template std::vector Algorithm_Cache::providers_of(const std::string& algo_name) { - Mutex_Holder lock(mutex); + std::lock_guard lock(mutex); std::vector providers; @@ -190,7 +190,7 @@ template void Algorithm_Cache::set_preferred_provider(const std::string& algo_spec, const std::string& provider) { - Mutex_Holder lock(mutex); + std::lock_guard lock(mutex); pref_providers[algo_spec] = provider; } @@ -215,8 +215,6 @@ Algorithm_Cache::~Algorithm_Cache() ++algo; } - - delete mutex; } } diff --git a/src/algo_factory/algo_factory.cpp b/src/algo_factory/algo_factory.cpp index 269c58c3b..71bd26827 100644 --- a/src/algo_factory/algo_factory.cpp +++ b/src/algo_factory/algo_factory.cpp @@ -80,15 +80,14 @@ const T* factory_prototype(const std::string& algo_spec, /** * Setup caches */ -Algorithm_Factory::Algorithm_Factory(const std::vector& engines_in, - Mutex_Factory& mf) +Algorithm_Factory::Algorithm_Factory(const std::vector& engines_in) { engines = engines_in; - block_cipher_cache = new Algorithm_Cache(mf.make()); - stream_cipher_cache = new Algorithm_Cache(mf.make()); - hash_cache = new Algorithm_Cache(mf.make()); - mac_cache = new Algorithm_Cache(mf.make()); + block_cipher_cache = new Algorithm_Cache(); + stream_cipher_cache = new Algorithm_Cache(); + hash_cache = new Algorithm_Cache(); + mac_cache = new Algorithm_Cache(); } /** diff --git a/src/algo_factory/algo_factory.h b/src/algo_factory/algo_factory.h index 73e592013..1f4b577ee 100644 --- a/src/algo_factory/algo_factory.h +++ b/src/algo_factory/algo_factory.h @@ -8,7 +8,7 @@ #ifndef BOTAN_ALGORITHM_FACTORY_H__ #define BOTAN_ALGORITHM_FACTORY_H__ -#include +#include #include #include @@ -37,8 +37,7 @@ class BOTAN_DLL Algorithm_Factory * @param engines_in the list of engines to use * @param mf a mutex factory */ - Algorithm_Factory(const std::vector& engines_in, - Mutex_Factory& mf); + Algorithm_Factory(const std::vector& engines_in); /** * Destructor diff --git a/src/alloc/alloc_mmap/mmap_mem.h b/src/alloc/alloc_mmap/mmap_mem.h index bef166a16..30e6d9ebb 100644 --- a/src/alloc/alloc_mmap/mmap_mem.h +++ b/src/alloc/alloc_mmap/mmap_mem.h @@ -18,7 +18,6 @@ namespace Botan { class BOTAN_DLL MemoryMapping_Allocator : public Pooling_Allocator { public: - MemoryMapping_Allocator(Mutex* m) : Pooling_Allocator(m) {} std::string type() const { return "mmap"; } private: void* alloc_block(u32bit); diff --git a/src/alloc/mem_pool/mem_pool.cpp b/src/alloc/mem_pool/mem_pool.cpp index 38e0c3285..a3858add6 100644 --- a/src/alloc/mem_pool/mem_pool.cpp +++ b/src/alloc/mem_pool/mem_pool.cpp @@ -109,7 +109,7 @@ void Pooling_Allocator::Memory_Block::free(void* ptr, u32bit blocks) throw() /* * Pooling_Allocator Constructor */ -Pooling_Allocator::Pooling_Allocator(Mutex* m) : mutex(m) +Pooling_Allocator::Pooling_Allocator() { last_used = blocks.begin(); } @@ -119,7 +119,6 @@ Pooling_Allocator::Pooling_Allocator(Mutex* m) : mutex(m) */ Pooling_Allocator::~Pooling_Allocator() { - delete mutex; if(blocks.size()) throw Invalid_State("Pooling_Allocator: Never released memory"); } @@ -129,7 +128,7 @@ Pooling_Allocator::~Pooling_Allocator() */ void Pooling_Allocator::destroy() { - Mutex_Holder lock(mutex); + std::lock_guard lock(mutex); blocks.clear(); @@ -146,7 +145,7 @@ void* Pooling_Allocator::allocate(u32bit n) const u32bit BITMAP_SIZE = Memory_Block::bitmap_size(); const u32bit BLOCK_SIZE = Memory_Block::block_size(); - Mutex_Holder lock(mutex); + std::lock_guard lock(mutex); if(n <= BITMAP_SIZE * BLOCK_SIZE) { @@ -183,7 +182,7 @@ void Pooling_Allocator::deallocate(void* ptr, u32bit n) if(ptr == 0 && n == 0) return; - Mutex_Holder lock(mutex); + std::lock_guard lock(mutex); if(n > BITMAP_SIZE * BLOCK_SIZE) dealloc_block(ptr, n); diff --git a/src/alloc/mem_pool/mem_pool.h b/src/alloc/mem_pool/mem_pool.h index a57800972..871f135bd 100644 --- a/src/alloc/mem_pool/mem_pool.h +++ b/src/alloc/mem_pool/mem_pool.h @@ -10,7 +10,7 @@ #include #include -#include +#include #include #include @@ -27,7 +27,7 @@ class BOTAN_DLL Pooling_Allocator : public Allocator void destroy(); - Pooling_Allocator(Mutex*); + Pooling_Allocator(); ~Pooling_Allocator(); private: void get_more_core(u32bit); @@ -66,7 +66,7 @@ class BOTAN_DLL Pooling_Allocator : public Allocator std::vector blocks; std::vector::iterator last_used; std::vector > allocated; - Mutex* mutex; + std::mutex mutex; }; } diff --git a/src/alloc/system_alloc/defalloc.h b/src/alloc/system_alloc/defalloc.h index 627e8df70..ed2682ec0 100644 --- a/src/alloc/system_alloc/defalloc.h +++ b/src/alloc/system_alloc/defalloc.h @@ -30,8 +30,6 @@ class BOTAN_DLL Malloc_Allocator : public Allocator class BOTAN_DLL Locking_Allocator : public Pooling_Allocator { public: - Locking_Allocator(Mutex* m) : Pooling_Allocator(m) {} - std::string type() const { return "locking"; } private: void* alloc_block(u32bit); diff --git a/src/libstate/init.cpp b/src/libstate/init.cpp index b908de6c7..0d9a2420c 100644 --- a/src/libstate/init.cpp +++ b/src/libstate/init.cpp @@ -1,12 +1,11 @@ /** * Default Initialization Function -* (C) 1999-2007 Jack Lloyd +* (C) 1999-2009 Jack Lloyd * * Distributed under the terms of the Botan license */ #include -#include #include namespace Botan { @@ -14,36 +13,8 @@ namespace Botan { /* * Library Initialization */ -void LibraryInitializer::initialize(const std::string& arg_string) +void LibraryInitializer::initialize(const std::string&) { - bool thread_safe = false; - - const std::vector arg_list = split_on(arg_string, ' '); - for(u32bit j = 0; j != arg_list.size(); ++j) - { - if(arg_list[j].size() == 0) - continue; - - std::string name, value; - - if(arg_list[j].find('=') == std::string::npos) - { - name = arg_list[j]; - value = "true"; - } - else - { - std::vector name_and_value = split_on(arg_list[j], '='); - name = name_and_value[0]; - value = name_and_value[1]; - } - - bool is_on = - (value == "1" || value == "true" || value == "yes" || value == "on"); - - if(name == "thread_safe") - thread_safe = is_on; - } try { @@ -55,7 +26,7 @@ void LibraryInitializer::initialize(const std::string& arg_string) */ set_global_state(new Library_State); - global_state().initialize(thread_safe); + global_state().initialize(); } catch(...) { diff --git a/src/libstate/libstate.cpp b/src/libstate/libstate.cpp index 3275c6493..839d71d60 100644 --- a/src/libstate/libstate.cpp +++ b/src/libstate/libstate.cpp @@ -9,21 +9,12 @@ #include #include #include -#include #include #include #include #include #include -#if defined(BOTAN_HAS_MUTEX_PTHREAD) - #include -#elif defined(BOTAN_HAS_MUTEX_WIN32) - #include -#elif defined(BOTAN_HAS_MUTEX_QT) - #include -#endif - #if defined(BOTAN_HAS_ALLOC_MMAP) #include #endif @@ -91,20 +82,12 @@ Library_State* swap_global_state(Library_State* new_state) return old_state; } -/* -* Get a new mutex object -*/ -Mutex* Library_State::get_mutex() const - { - return mutex_factory->make(); - } - /* * Get an allocator by its name */ -Allocator* Library_State::get_allocator(const std::string& type) const +Allocator* Library_State::get_allocator(const std::string& type) { - Mutex_Holder lock(allocator_lock); + std::lock_guard lock(allocator_lock); if(type != "") return search_map(alloc_factory, type, 0); @@ -128,7 +111,7 @@ Allocator* Library_State::get_allocator(const std::string& type) const */ void Library_State::add_allocator(Allocator* allocator) { - Mutex_Holder lock(allocator_lock); + std::lock_guard lock(allocator_lock); allocator->init(); @@ -141,7 +124,7 @@ void Library_State::add_allocator(Allocator* allocator) */ void Library_State::set_default_allocator(const std::string& type) { - Mutex_Holder lock(allocator_lock); + std::lock_guard lock(allocator_lock); if(type == "") return; @@ -154,9 +137,9 @@ void Library_State::set_default_allocator(const std::string& type) * Get a configuration value */ std::string Library_State::get(const std::string& section, - const std::string& key) const + const std::string& key) { - Mutex_Holder lock(config_lock); + std::lock_guard lock(config_lock); return search_map(config, section + "/" + key, ""); @@ -166,9 +149,9 @@ std::string Library_State::get(const std::string& section, * See if a particular option has been set */ bool Library_State::is_set(const std::string& section, - const std::string& key) const + const std::string& key) { - Mutex_Holder lock(config_lock); + std::lock_guard lock(config_lock); return search_map(config, section + "/" + key, false, true); } @@ -179,7 +162,7 @@ bool Library_State::is_set(const std::string& section, void Library_State::set(const std::string& section, const std::string& key, const std::string& value, bool overwrite) { - Mutex_Holder lock(config_lock); + std::lock_guard lock(config_lock); std::string full_key = section + "/" + key; @@ -201,7 +184,7 @@ void Library_State::add_alias(const std::string& key, const std::string& value) /* * Dereference an alias to a fixed name */ -std::string Library_State::deref_alias(const std::string& key) const +std::string Library_State::deref_alias(const std::string& key) { std::string result = key; while(is_set("alias", result)) @@ -221,7 +204,7 @@ void Library_State::set_option(const std::string key, /* * Get an option value */ -std::string Library_State::option(const std::string& key) const +std::string Library_State::option(const std::string& key) { return get("conf", key); } @@ -239,38 +222,18 @@ Algorithm_Factory& Library_State::algorithm_factory() /* * Load a set of modules */ -void Library_State::initialize(bool thread_safe) +void Library_State::initialize() { - if(mutex_factory) + if(m_algorithm_factory) throw Invalid_State("Library_State has already been initialized"); - if(!thread_safe) - { - mutex_factory = new Noop_Mutex_Factory; - } - else - { -#if defined(BOTAN_HAS_MUTEX_PTHREAD) - mutex_factory = new Pthread_Mutex_Factory; -#elif defined(BOTAN_HAS_MUTEX_WIN32) - mutex_factory = new Win32_Mutex_Factory; -#elif defined(BOTAN_HAS_MUTEX_QT) - mutex_factory Qt_Mutex_Factory; -#else - throw Invalid_State("Could not find a thread-safe mutex object to use"); -#endif - } - - allocator_lock = mutex_factory->make(); - config_lock = mutex_factory->make(); - cached_default_allocator = 0; add_allocator(new Malloc_Allocator); - add_allocator(new Locking_Allocator(mutex_factory->make())); + add_allocator(new Locking_Allocator); #if defined(BOTAN_HAS_ALLOC_MMAP) - add_allocator(new MemoryMapping_Allocator(mutex_factory->make())); + add_allocator(new MemoryMapping_Allocator); #endif set_default_allocator("locking"); @@ -301,7 +264,7 @@ void Library_State::initialize(bool thread_safe) engines.push_back(new Default_Engine); - m_algorithm_factory = new Algorithm_Factory(engines, *mutex_factory); + m_algorithm_factory = new Algorithm_Factory(engines); } /* @@ -309,8 +272,6 @@ void Library_State::initialize(bool thread_safe) */ Library_State::Library_State() { - mutex_factory = 0; - allocator_lock = config_lock = 0; cached_default_allocator = 0; m_algorithm_factory = 0; } @@ -321,6 +282,7 @@ Library_State::Library_State() Library_State::~Library_State() { delete m_algorithm_factory; + m_algorithm_factory = 0; cached_default_allocator = 0; @@ -329,10 +291,6 @@ Library_State::~Library_State() allocators[j]->destroy(); delete allocators[j]; } - - delete allocator_lock; - delete mutex_factory; - delete config_lock; } } diff --git a/src/libstate/libstate.h b/src/libstate/libstate.h index 2493863a9..eb3b3b3be 100644 --- a/src/libstate/libstate.h +++ b/src/libstate/libstate.h @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -27,11 +28,11 @@ class BOTAN_DLL Library_State Library_State(); ~Library_State(); - void initialize(bool thread_safe); + void initialize(); Algorithm_Factory& algorithm_factory(); - Allocator* get_allocator(const std::string& = "") const; + Allocator* get_allocator(const std::string& = ""); void add_allocator(Allocator*); void set_default_allocator(const std::string&); @@ -42,7 +43,7 @@ class BOTAN_DLL Library_State * @result the value of the parameter */ std::string get(const std::string& section, - const std::string& key) const; + const std::string& key); /** * Check whether a certain parameter is set @@ -52,7 +53,7 @@ class BOTAN_DLL Library_State * @result true if the parameters value is set, * false otherwise */ - bool is_set(const std::string& section, const std::string& key) const; + bool is_set(const std::string& section, const std::string& key); /** * Set a configuration parameter. @@ -70,7 +71,7 @@ class BOTAN_DLL Library_State * referred to as option). * @param key the desired keys name */ - std::string option(const std::string& key) const; + std::string option(const std::string& key); /** * Set an option. @@ -91,21 +92,17 @@ class BOTAN_DLL Library_State * @param alias the alias to resolve. * @return what the alias stands for */ - std::string deref_alias(const std::string&) const; - - class Mutex* get_mutex() const; + std::string deref_alias(const std::string&); private: void load_default_config(); Library_State(const Library_State&) {} Library_State& operator=(const Library_State&) { return (*this); } - class Mutex_Factory* mutex_factory; - + std::mutex config_lock; std::map config; - class Mutex* config_lock; - class Mutex* allocator_lock; + std::mutex allocator_lock; std::map alloc_factory; mutable Allocator* cached_default_allocator; std::vector allocators; diff --git a/src/mutex/noop_mutex/info.txt b/src/mutex/noop_mutex/info.txt deleted file mode 100644 index 1f49f5e1c..000000000 --- a/src/mutex/noop_mutex/info.txt +++ /dev/null @@ -1,10 +0,0 @@ -realname "No-Op Mutex" - -load_on auto - -define MUTEX_NOOP - - -mux_noop.cpp -mux_noop.h - diff --git a/src/mutex/noop_mutex/mux_noop.cpp b/src/mutex/noop_mutex/mux_noop.cpp deleted file mode 100644 index 5c45084fe..000000000 --- a/src/mutex/noop_mutex/mux_noop.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* -* No-Op Mutex Factory -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include - -namespace Botan { - -/* -* No-Op Mutex Factory -*/ -Mutex* Noop_Mutex_Factory::make() - { - class Noop_Mutex : public Mutex - { - public: - class Mutex_State_Error : public Internal_Error - { - public: - Mutex_State_Error(const std::string& where) : - Internal_Error("Noop_Mutex::" + where + ": " + - "Mutex is already " + where + "ed") {} - }; - - void lock() - { - if(locked) - throw Mutex_State_Error("lock"); - locked = true; - } - - void unlock() - { - if(!locked) - throw Mutex_State_Error("unlock"); - locked = false; - } - - Noop_Mutex() { locked = false; } - private: - bool locked; - }; - - return new Noop_Mutex; - } - -} diff --git a/src/mutex/noop_mutex/mux_noop.h b/src/mutex/noop_mutex/mux_noop.h deleted file mode 100644 index 94201cb7c..000000000 --- a/src/mutex/noop_mutex/mux_noop.h +++ /dev/null @@ -1,26 +0,0 @@ -/* -* No-Op Mutex Factory -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_NOOP_MUTEX_FACTORY_H__ -#define BOTAN_NOOP_MUTEX_FACTORY_H__ - -#include - -namespace Botan { - -/* -* No-Op Mutex Factory -*/ -class BOTAN_DLL Noop_Mutex_Factory : public Mutex_Factory - { - public: - Mutex* make(); - }; - -} - -#endif diff --git a/src/mutex/pthreads/info.txt b/src/mutex/pthreads/info.txt deleted file mode 100644 index 88de70de0..000000000 --- a/src/mutex/pthreads/info.txt +++ /dev/null @@ -1,29 +0,0 @@ -realname "Pthread Mutex" - -define MUTEX_PTHREAD - -load_on auto - - -mux_pthr.cpp -mux_pthr.h - - - -all!qnx,freebsd,openbsd,netbsd -> pthread - - - -aix -cygwin -darwin -freebsd -hpux -irix -linux -netbsd -openbsd -qnx -solaris -tru64 - diff --git a/src/mutex/pthreads/mux_pthr.cpp b/src/mutex/pthreads/mux_pthr.cpp deleted file mode 100644 index 9f1d9816e..000000000 --- a/src/mutex/pthreads/mux_pthr.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* -* Pthread Mutex -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include -#include - -#ifndef _POSIX_C_SOURCE - #define _POSIX_C_SOURCE 199506 -#endif - -#include - -namespace Botan { - -/* -* Pthread Mutex Factory -*/ -Mutex* Pthread_Mutex_Factory::make() - { - - class Pthread_Mutex : public Mutex - { - public: - void lock() - { - if(pthread_mutex_lock(&mutex) != 0) - throw Exception("Pthread_Mutex::lock: Error occured"); - } - - void unlock() - { - if(pthread_mutex_unlock(&mutex) != 0) - throw Exception("Pthread_Mutex::unlock: Error occured"); - } - - Pthread_Mutex() - { - if(pthread_mutex_init(&mutex, 0) != 0) - throw Exception("Pthread_Mutex: initialization failed"); - } - - ~Pthread_Mutex() - { - if(pthread_mutex_destroy(&mutex) != 0) - throw Invalid_State("~Pthread_Mutex: mutex is still locked"); - } - private: - pthread_mutex_t mutex; - }; - - return new Pthread_Mutex(); - } - -} diff --git a/src/mutex/pthreads/mux_pthr.h b/src/mutex/pthreads/mux_pthr.h deleted file mode 100644 index 118853947..000000000 --- a/src/mutex/pthreads/mux_pthr.h +++ /dev/null @@ -1,26 +0,0 @@ -/* -* Pthread Mutex -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_MUTEX_PTHREAD_H__ -#define BOTAN_MUTEX_PTHREAD_H__ - -#include - -namespace Botan { - -/* -* Pthread Mutex Factory -*/ -class BOTAN_DLL Pthread_Mutex_Factory : public Mutex_Factory - { - public: - Mutex* make(); - }; - -} - -#endif diff --git a/src/mutex/qt_mutex/info.txt b/src/mutex/qt_mutex/info.txt deleted file mode 100644 index a21108c79..000000000 --- a/src/mutex/qt_mutex/info.txt +++ /dev/null @@ -1,18 +0,0 @@ -realname "Qt Mutex" - -define MUTEX_QT - -note "You'll probably have to add -I/-L flags to the Makefile to find Qt" - -load_on request - - -mux_qt.cpp -mux_qt.h - - -# I think we want to always use qt-mt, not qt -- not much point in supporting -# mutexes in a single threaded application, after all. - -all -> qt-mt - diff --git a/src/mutex/qt_mutex/mux_qt.cpp b/src/mutex/qt_mutex/mux_qt.cpp deleted file mode 100644 index 0f670c8b4..000000000 --- a/src/mutex/qt_mutex/mux_qt.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* -* Qt Thread Mutex -* (C) 2004-2007 Justin Karneges -* 2004-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include -#include - -#if !defined(QT_THREAD_SUPPORT) - #error Your version of Qt does not support threads or mutexes -#endif - -namespace Botan { - -/* -* Qt Mutex Factory -*/ -Mutex* Qt_Mutex_Factory::make() - { - class Qt_Mutex : public Mutex - { - public: - void lock() { mutex.lock(); } - void unlock() { mutex.unlock(); } - private: - QMutex mutex; - }; - - return new Qt_Mutex(); - } - -} diff --git a/src/mutex/qt_mutex/mux_qt.h b/src/mutex/qt_mutex/mux_qt.h deleted file mode 100644 index 5aed77f4b..000000000 --- a/src/mutex/qt_mutex/mux_qt.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -* Qt Mutex -* (C) 2004-2007 Justin Karneges -* 2004-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_MUTEX_QT_H__ -#define BOTAN_MUTEX_QT_H__ - -#include - -namespace Botan { - -/* -* Qt Mutex -*/ -class BOTAN_DLL Qt_Mutex_Factory : public Mutex_Factory - { - public: - Mutex* make(); - }; - -} - -#endif diff --git a/src/mutex/win32_crit_section/info.txt b/src/mutex/win32_crit_section/info.txt deleted file mode 100644 index a2d339c3b..000000000 --- a/src/mutex/win32_crit_section/info.txt +++ /dev/null @@ -1,17 +0,0 @@ -realname "Win32 Mutex" - -define MUTEX_WIN32 -modset win32 - -load_on auto - - -mux_win32.cpp -mux_win32.h - - - -cygwin -windows -mingw - diff --git a/src/mutex/win32_crit_section/mux_win32.cpp b/src/mutex/win32_crit_section/mux_win32.cpp deleted file mode 100644 index 2a967892b..000000000 --- a/src/mutex/win32_crit_section/mux_win32.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/* -* Win32 Mutex -* (C) 2006 Luca Piccarreta -* 2006-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include -#include - -namespace Botan { - -/* -* Win32 Mutex Factory -*/ -Mutex* Win32_Mutex_Factory::make() - { - class Win32_Mutex : public Mutex - { - public: - void lock() { EnterCriticalSection(&mutex); } - void unlock() { LeaveCriticalSection(&mutex); } - - Win32_Mutex() { InitializeCriticalSection(&mutex); } - ~Win32_Mutex() { DeleteCriticalSection(&mutex); } - private: - CRITICAL_SECTION mutex; - }; - - return new Win32_Mutex(); - } - -} diff --git a/src/mutex/win32_crit_section/mux_win32.h b/src/mutex/win32_crit_section/mux_win32.h deleted file mode 100644 index a91850e71..000000000 --- a/src/mutex/win32_crit_section/mux_win32.h +++ /dev/null @@ -1,26 +0,0 @@ -/* -* Win32 Mutex -* (C) 2006 Luca Piccarreta -* 2006-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_MUTEX_WIN32_H__ -#define BOTAN_MUTEX_WIN32_H__ - -#include - -namespace Botan { - -/* -* Win32 Mutex Factory -*/ -class BOTAN_DLL Win32_Mutex_Factory : public Mutex_Factory - { - public: - Mutex* make(); - }; -} - -#endif diff --git a/src/utils/info.txt b/src/utils/info.txt index ffc19c852..815ad4efc 100644 --- a/src/utils/info.txt +++ b/src/utils/info.txt @@ -27,7 +27,6 @@ exceptn.h loadstor.h mem_ops.h mlock.cpp -mutex.h parsing.cpp parsing.h rotate.h diff --git a/src/utils/mutex.h b/src/utils/mutex.h deleted file mode 100644 index a04ff83c9..000000000 --- a/src/utils/mutex.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -* Mutex -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_MUTEX_H__ -#define BOTAN_MUTEX_H__ - -#include - -namespace Botan { - -/* -* Mutex Base Class -*/ -class BOTAN_DLL Mutex - { - public: - virtual void lock() = 0; - virtual void unlock() = 0; - virtual ~Mutex() {} - }; - -/* -* Mutex Factory -*/ -class BOTAN_DLL Mutex_Factory - { - public: - virtual Mutex* make() = 0; - virtual ~Mutex_Factory() {} - }; - -/* -* Mutex Holding Class -*/ -class BOTAN_DLL Mutex_Holder - { - public: - Mutex_Holder(Mutex* m) : mux(m) - { - if(!mux) - throw Invalid_Argument("Mutex_Holder: Argument was NULL"); - mux->lock(); - } - - ~Mutex_Holder() { mux->unlock(); } - private: - Mutex* mux; - }; - -} - -#endif diff --git a/src/utils/scan_name.cpp b/src/utils/scan_name.cpp index 3425425e2..92fded3c4 100644 --- a/src/utils/scan_name.cpp +++ b/src/utils/scan_name.cpp @@ -8,6 +8,7 @@ SCAN Name Abstraction #include #include #include +#include #include #include -- cgit v1.2.3 From 515faa2ef86221f08fa2ef4f9eae66126d151e06 Mon Sep 17 00:00:00 2001 From: lloyd Date: Wed, 1 Apr 2009 15:48:16 +0000 Subject: Remove copy_if, now included in C++0x (also, it turns out, not being used in the source). --- src/utils/stl_util.h | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/utils/stl_util.h b/src/utils/stl_util.h index 18c8b149b..fc4d4effe 100644 --- a/src/utils/stl_util.h +++ b/src/utils/stl_util.h @@ -12,22 +12,6 @@ namespace Botan { -/* -* Copy-on-Predicate Algorithm -*/ -template -OutputIterator copy_if(InputIterator current, InputIterator end, - OutputIterator dest, Predicate copy_p) - { - while(current != end) - { - if(copy_p(*current)) - *dest++ = *current; - ++current; - } - return dest; - } - /* * Searching through a std::map */ -- cgit v1.2.3 From 62b2008ec3041441a70b8396c7fabba90e42c546 Mon Sep 17 00:00:00 2001 From: lloyd Date: Wed, 1 Apr 2009 16:26:02 +0000 Subject: A few experiments with auto keyword type inference. Looks like things will be much cleaner, though I am looking forward to the new for syntax which will simplify a lot of these uses further. --- src/asn1/asn1_dn.cpp | 70 ++++++++++++++++-------------------------- src/hash/par_hash/par_hash.cpp | 41 ++++++++++++++----------- src/utils/parsing.cpp | 36 +++++++++++----------- 3 files changed, 68 insertions(+), 79 deletions(-) diff --git a/src/asn1/asn1_dn.cpp b/src/asn1/asn1_dn.cpp index c5a132d85..dd5bc94dc 100644 --- a/src/asn1/asn1_dn.cpp +++ b/src/asn1/asn1_dn.cpp @@ -26,9 +26,8 @@ X509_DN::X509_DN() */ X509_DN::X509_DN(const std::multimap& args) { - std::multimap::const_iterator j; - for(j = args.begin(); j != args.end(); ++j) - add_attribute(j->first, j->second); + for(auto i = args.begin(); i != args.end(); ++i) + add_attribute(i->first, i->second); } /* @@ -36,9 +35,8 @@ X509_DN::X509_DN(const std::multimap& args) */ X509_DN::X509_DN(const std::multimap& args) { - std::multimap::const_iterator j; - for(j = args.begin(); j != args.end(); ++j) - add_attribute(OIDS::lookup(j->first), j->second); + for(auto i = args.begin(); i != args.end(); ++i) + add_attribute(OIDS::lookup(i->first), i->second); } /* @@ -59,11 +57,9 @@ void X509_DN::add_attribute(const OID& oid, const std::string& str) if(str == "") return; - typedef std::multimap::iterator rdn_iter; - - std::pair range = dn_info.equal_range(oid); - for(rdn_iter j = range.first; j != range.second; ++j) - if(j->second.value() == str) + auto range = dn_info.equal_range(oid); + for(auto i = range.first; i != range.second; ++i) + if(i->second.value() == str) return; multimap_insert(dn_info, oid, ASN1_String(str)); @@ -75,11 +71,9 @@ void X509_DN::add_attribute(const OID& oid, const std::string& str) */ std::multimap X509_DN::get_attributes() const { - typedef std::multimap::const_iterator rdn_iter; - std::multimap retval; - for(rdn_iter j = dn_info.begin(); j != dn_info.end(); ++j) - multimap_insert(retval, j->first, j->second.value()); + for(auto i = dn_info.begin(); i != dn_info.end(); ++i) + multimap_insert(retval, i->first, i->second.value()); return retval; } @@ -88,11 +82,9 @@ std::multimap X509_DN::get_attributes() const */ std::multimap X509_DN::contents() const { - typedef std::multimap::const_iterator rdn_iter; - std::multimap retval; - for(rdn_iter j = dn_info.begin(); j != dn_info.end(); ++j) - multimap_insert(retval, OIDS::lookup(j->first), j->second.value()); + for(auto i = dn_info.begin(); i != dn_info.end(); ++i) + multimap_insert(retval, OIDS::lookup(i->first), i->second.value()); return retval; } @@ -101,14 +93,13 @@ std::multimap X509_DN::contents() const */ std::vector X509_DN::get_attribute(const std::string& attr) const { - typedef std::multimap::const_iterator rdn_iter; - const OID oid = OIDS::lookup(deref_info_field(attr)); - std::pair range = dn_info.equal_range(oid); + + auto range = dn_info.equal_range(oid); std::vector values; - for(rdn_iter j = range.first; j != range.second; ++j) - values.push_back(j->second.value()); + for(auto i = range.first; i != range.second; ++i) + values.push_back(i->second.value()); return values; } @@ -171,15 +162,13 @@ std::string X509_DN::deref_info_field(const std::string& info) */ bool operator==(const X509_DN& dn1, const X509_DN& dn2) { - typedef std::multimap::const_iterator rdn_iter; - - std::multimap attr1 = dn1.get_attributes(); - std::multimap attr2 = dn2.get_attributes(); + auto attr1 = dn1.get_attributes(); + auto attr2 = dn2.get_attributes(); if(attr1.size() != attr2.size()) return false; - rdn_iter p1 = attr1.begin(); - rdn_iter p2 = attr2.begin(); + auto p1 = attr1.begin(); + auto p2 = attr2.begin(); while(true) { @@ -209,18 +198,15 @@ bool operator!=(const X509_DN& dn1, const X509_DN& dn2) */ bool operator<(const X509_DN& dn1, const X509_DN& dn2) { - typedef std::multimap::const_iterator rdn_iter; - - std::multimap attr1 = dn1.get_attributes(); - std::multimap attr2 = dn2.get_attributes(); + auto attr1 = dn1.get_attributes(); + auto attr2 = dn2.get_attributes(); if(attr1.size() < attr2.size()) return true; if(attr1.size() > attr2.size()) return false; - for(rdn_iter p1 = attr1.begin(); p1 != attr1.end(); ++p1) + for(auto p1 = attr1.begin(); p1 != attr1.end(); ++p1) { - std::multimap::const_iterator p2; - p2 = attr2.find(p1->first); + auto p2 = attr2.find(p1->first); if(p2 == attr2.end()) return false; if(p1->second > p2->second) return false; if(p1->second < p2->second) return true; @@ -238,8 +224,6 @@ void do_ava(DER_Encoder& encoder, ASN1_Tag string_type, const std::string& oid_str, bool must_exist = false) { - typedef std::multimap::const_iterator rdn_iter; - const OID oid = OIDS::lookup(oid_str); const bool exists = (dn_info.find(oid) != dn_info.end()); @@ -247,14 +231,14 @@ void do_ava(DER_Encoder& encoder, throw Encoding_Error("X509_DN: No entry for " + oid_str); if(!exists) return; - std::pair range = dn_info.equal_range(oid); + auto range = dn_info.equal_range(oid); - for(rdn_iter j = range.first; j != range.second; ++j) + for(auto i = range.first; i != range.second; ++i) { encoder.start_cons(SET) .start_cons(SEQUENCE) .encode(oid) - .encode(ASN1_String(j->second, string_type)) + .encode(ASN1_String(i->second, string_type)) .end_cons() .end_cons(); } @@ -267,7 +251,7 @@ void do_ava(DER_Encoder& encoder, */ void X509_DN::encode_into(DER_Encoder& der) const { - std::multimap dn_info = get_attributes(); + auto dn_info = get_attributes(); der.start_cons(SEQUENCE); diff --git a/src/hash/par_hash/par_hash.cpp b/src/hash/par_hash/par_hash.cpp index 4b0c7c466..789238647 100644 --- a/src/hash/par_hash/par_hash.cpp +++ b/src/hash/par_hash/par_hash.cpp @@ -1,6 +1,6 @@ /* * Parallel -* (C) 1999-2007 Jack Lloyd +* (C) 1999-2009 Jack Lloyd * * Distributed under the terms of the Botan license */ @@ -18,8 +18,8 @@ u32bit sum_of_hash_lengths(const std::vector& hashes) { u32bit sum = 0; - for(u32bit j = 0; j != hashes.size(); ++j) - sum += hashes[j]->OUTPUT_LENGTH; + for(auto hash = hashes.begin(); hash != hashes.end(); ++hash) + sum += (*hash)->OUTPUT_LENGTH; return sum; } @@ -31,20 +31,21 @@ u32bit sum_of_hash_lengths(const std::vector& hashes) */ void Parallel::add_data(const byte input[], u32bit length) { - for(u32bit j = 0; j != hashes.size(); ++j) - hashes[j]->update(input, length); + for(auto hash = hashes.begin(); hash != hashes.end(); ++hash) + (*hash)->update(input, length); } /* * Finalize the hash */ -void Parallel::final_result(byte hash[]) +void Parallel::final_result(byte out[]) { u32bit offset = 0; - for(u32bit j = 0; j != hashes.size(); ++j) + + for(auto hash = hashes.begin(); hash != hashes.end(); ++hash) { - hashes[j]->final(hash + offset); - offset += hashes[j]->OUTPUT_LENGTH; + (*hash)->final(out + offset); + offset += (*hash)->OUTPUT_LENGTH; } } @@ -54,12 +55,14 @@ void Parallel::final_result(byte hash[]) std::string Parallel::name() const { std::string hash_names; - for(u32bit j = 0; j != hashes.size(); ++j) + + for(auto hash = hashes.begin(); hash != hashes.end(); ++hash) { - if(j) + if(hash != hashes.begin()) hash_names += ','; - hash_names += hashes[j]->name(); + hash_names += (*hash)->name(); } + return "Parallel(" + hash_names + ")"; } @@ -69,8 +72,10 @@ std::string Parallel::name() const HashFunction* Parallel::clone() const { std::vector hash_copies; - for(u32bit j = 0; j != hashes.size(); ++j) - hash_copies.push_back(hashes[j]->clone()); + + for(auto hash = hashes.begin(); hash != hashes.end(); ++hash) + hash_copies.push_back((*hash)->clone()); + return new Parallel(hash_copies); } @@ -79,8 +84,8 @@ HashFunction* Parallel::clone() const */ void Parallel::clear() throw() { - for(u32bit j = 0; j != hashes.size(); ++j) - hashes[j]->clear(); + for(auto hash = hashes.begin(); hash != hashes.end(); ++hash) + (*hash)->clear(); } /* @@ -96,8 +101,8 @@ Parallel::Parallel(const std::vector& hash_in) : */ Parallel::~Parallel() { - for(u32bit j = 0; j != hashes.size(); ++j) - delete hashes[j]; + for(auto hash = hashes.begin(); hash != hashes.end(); ++hash) + delete (*hash); } } diff --git a/src/utils/parsing.cpp b/src/utils/parsing.cpp index bdb9e79dc..556e2f65c 100644 --- a/src/utils/parsing.cpp +++ b/src/utils/parsing.cpp @@ -19,11 +19,11 @@ u32bit to_u32bit(const std::string& number) { u32bit n = 0; - for(std::string::const_iterator j = number.begin(); j != number.end(); ++j) + for(auto i = number.begin(); i != number.end(); ++i) { const u32bit OVERFLOW_MARK = 0xFFFFFFFF / 10; - byte digit = Charset::char2digit(*j); + byte digit = Charset::char2digit(*i); if((n > OVERFLOW_MARK) || (n == OVERFLOW_MARK && digit > 5)) throw Decoding_Error("to_u32bit: Integer overflow"); @@ -103,15 +103,15 @@ std::vector parse_algorithm_name(const std::string& namex) elems.push_back(name.substr(0, name.find('('))); name = name.substr(name.find('(')); - for(std::string::const_iterator j = name.begin(); j != name.end(); ++j) + for(auto i = name.begin(); i != name.end(); ++i) { - char c = *j; + char c = *i; if(c == '(') ++level; if(c == ')') { - if(level == 1 && j == name.end() - 1) + if(level == 1 && i == name.end() - 1) { if(elems.size() == 1) elems.push_back(substring.substr(1)); @@ -120,7 +120,7 @@ std::vector parse_algorithm_name(const std::string& namex) return elems; } - if(level == 0 || (level == 1 && j != name.end() - 1)) + if(level == 0 || (level == 1 && i != name.end() - 1)) throw Invalid_Algorithm_Name(namex); --level; } @@ -152,16 +152,16 @@ std::vector split_on(const std::string& str, char delim) if(str == "") return elems; std::string substr; - for(std::string::const_iterator j = str.begin(); j != str.end(); ++j) + for(auto i = str.begin(); i != str.end(); ++i) { - if(*j == delim) + if(*i == delim) { if(substr != "") elems.push_back(substr); substr.clear(); } else - substr += *j; + substr += *i; } if(substr == "") @@ -179,9 +179,9 @@ std::vector parse_asn1_oid(const std::string& oid) std::string substring; std::vector oid_elems; - for(std::string::const_iterator j = oid.begin(); j != oid.end(); ++j) + for(auto i = oid.begin(); i != oid.end(); ++i) { - char c = *j; + char c = *i; if(c == '.') { @@ -209,8 +209,8 @@ std::vector parse_asn1_oid(const std::string& oid) */ bool x500_name_cmp(const std::string& name1, const std::string& name2) { - std::string::const_iterator p1 = name1.begin(); - std::string::const_iterator p2 = name2.begin(); + auto p1 = name1.begin(); + auto p2 = name2.begin(); while((p1 != name1.end()) && Charset::is_space(*p1)) ++p1; while((p2 != name2.end()) && Charset::is_space(*p2)) ++p2; @@ -255,9 +255,9 @@ u32bit string_to_ipv4(const std::string& str) u32bit ip = 0; - for(size_t j = 0; j != parts.size(); j++) + for(auto part = parts.begin(); part != parts.end(); ++part) { - u32bit octet = to_u32bit(parts[j]); + u32bit octet = to_u32bit(*part); if(octet > 255) throw Decoding_Error("Invalid IP string " + str); @@ -275,11 +275,11 @@ std::string ipv4_to_string(u32bit ip) { std::string str; - for(size_t j = 0; j != sizeof(ip); j++) + for(size_t i = 0; i != sizeof(ip); i++) { - if(j) + if(i) str += "."; - str += to_string(get_byte(j, ip)); + str += to_string(get_byte(i, ip)); } return str; -- cgit v1.2.3 From 327115405b0f483c2b432e2233f355a349b1f9d7 Mon Sep 17 00:00:00 2001 From: lloyd Date: Wed, 1 Apr 2009 16:38:08 +0000 Subject: Replace the (deprecated) auto_ptr with unique_ptr. This was mostly a s/auto_ptr/unique_ptr/, except in the CVC code and one function in ECDSA, which relied on auto_ptr's move semantics (ugh) and had to be modified in various ways. --- checks/cvc_tests.cpp | 18 +++++++-------- checks/ec_tests.cpp | 4 ++-- checks/ecdsa.cpp | 34 +++++++++++++-------------- checks/eckaeg.cpp | 2 +- checks/pk.cpp | 16 ++++++------- checks/pk_bench.cpp | 24 +++++++++---------- checks/x509.cpp | 2 +- src/cert/cvc/cvc_ado.cpp | 4 ++-- src/cert/cvc/cvc_ado.h | 2 +- src/cert/cvc/cvc_ca.cpp | 2 +- src/cert/cvc/cvc_ca.h | 2 +- src/cert/cvc/cvc_cert.cpp | 2 +- src/cert/cvc/cvc_gen_cert.h | 12 +++++----- src/cert/cvc/cvc_req.cpp | 2 +- src/cert/cvc/cvc_self.cpp | 47 +++++++++++++++++++++++--------------- src/cert/cvc/eac_obj.h | 10 ++++---- src/cert/cvc/ecdsa_sig.cpp | 2 +- src/cert/x509/x509_ca.cpp | 4 ++-- src/cert/x509/x509_obj.cpp | 2 +- src/cert/x509/x509self.cpp | 4 ++-- src/cert/x509/x509stor.cpp | 4 ++-- src/math/numbertheory/dsa_gen.cpp | 2 +- src/pubkey/ec_dompar/ec_dompar.cpp | 2 +- src/pubkey/ecc_key/ecc_key.cpp | 2 +- src/pubkey/ecc_key/ecc_key.h | 4 ++-- src/pubkey/ecdsa/ecdsa.cpp | 11 ++++----- src/pubkey/eckaeg/eckaeg.cpp | 4 ++-- src/pubkey/eckaeg/eckaeg.h | 2 +- src/pubkey/keypair/keypair.cpp | 8 +++---- src/pubkey/pubkey/pkcs8.cpp | 10 ++++---- src/pubkey/pubkey/x509_key.cpp | 6 ++--- 31 files changed, 129 insertions(+), 121 deletions(-) diff --git a/checks/cvc_tests.cpp b/checks/cvc_tests.cpp index 792e9c58d..cde8c8b2c 100644 --- a/checks/cvc_tests.cpp +++ b/checks/cvc_tests.cpp @@ -163,8 +163,8 @@ void test_enc_gen_selfsigned(RandomNumberGenerator& rng) } CHECK(ill_date_exc2); //cout << "readable = '" << cert_in.get_ced().readable_string() << "'\n"; - std::auto_ptr p_pk = cert_in.subject_public_key(); - //auto_ptr ecdsa_pk = dynamic_cast >(p_pk); + std::unique_ptr p_pk = cert_in.subject_public_key(); + //unique_ptr ecdsa_pk = dynamic_cast >(p_pk); ECDSA_PublicKey* p_ecdsa_pk = dynamic_cast(p_pk.get()); // let´s see if encoding is truely implicitca, because this is what the key should have // been set to when decoding (see above)(because it has no domain params): @@ -182,7 +182,7 @@ void test_enc_gen_selfsigned(RandomNumberGenerator& rng) CHECK(exc); // set them and try again //cert_in.set_domain_parameters(dom_pars); - std::auto_ptr p_pk2 = cert_in.subject_public_key(); + std::unique_ptr p_pk2 = cert_in.subject_public_key(); ECDSA_PublicKey* p_ecdsa_pk2 = dynamic_cast(p_pk2.get()); p_ecdsa_pk2->set_domain_parameters(dom_pars); CHECK(p_ecdsa_pk2->domain_parameters().get_order() == dom_pars.get_order()); @@ -213,7 +213,7 @@ void test_enc_gen_req(RandomNumberGenerator& rng) // read and check signature... EAC1_1_Req req_in(TEST_DATA_DIR "/my_cv_req.ber"); //req_in.set_domain_parameters(dom_pars); - std::auto_ptr p_pk = req_in.subject_public_key(); + std::unique_ptr p_pk = req_in.subject_public_key(); ECDSA_PublicKey* p_ecdsa_pk = dynamic_cast(p_pk.get()); p_ecdsa_pk->set_domain_parameters(dom_pars); CHECK(p_ecdsa_pk->domain_parameters().get_order() == dom_pars.get_order()); @@ -228,7 +228,7 @@ void test_cvc_req_ext(RandomNumberGenerator&) EAC1_1_Req req_in(TEST_DATA_DIR "/DE1_flen_chars_cvcRequest_ECDSA.der"); EC_Domain_Params dom_pars(get_EC_Dom_Pars_by_oid("1.3.36.3.3.2.8.1.1.5")); // "german curve" //req_in.set_domain_parameters(dom_pars); - std::auto_ptr p_pk = req_in.subject_public_key(); + std::unique_ptr p_pk = req_in.subject_public_key(); ECDSA_PublicKey* p_ecdsa_pk = dynamic_cast(p_pk.get()); p_ecdsa_pk->set_domain_parameters(dom_pars); CHECK(p_ecdsa_pk->domain_parameters().get_order() == dom_pars.get_order()); @@ -390,11 +390,11 @@ void test_ver_cvca(RandomNumberGenerator&) EAC1_1_CVC req_in(TEST_DATA_DIR "/cvca01.cv.crt"); - //auto_ptr ecdsa_pk = dynamic_cast >(p_pk); + //unique_ptr ecdsa_pk = dynamic_cast >(p_pk); //ECDSA_PublicKey* p_ecdsa_pk = dynamic_cast(p_pk.get()); bool exc = false; - std::auto_ptr p_pk2 = req_in.subject_public_key(); + std::unique_ptr p_pk2 = req_in.subject_public_key(); ECDSA_PublicKey* p_ecdsa_pk2 = dynamic_cast(p_pk2.get()); bool ver_ec = req_in.check_signature(*p_pk2); CHECK_MESSAGE(ver_ec, "could not positively verify correct selfsigned cvca certificate"); @@ -512,7 +512,7 @@ void test_cvc_chain(RandomNumberGenerator& rng) CHECK(link12.check_signature(cvca_privk)); EAC1_1_CVC link12_reloaded(TEST_DATA_DIR "/cvc_chain_link12.cer"); EAC1_1_CVC cvca1_reloaded(TEST_DATA_DIR "/cvc_chain_cvca.cer"); - std::auto_ptr cvca1_rel_pk = cvca1_reloaded.subject_public_key(); + std::unique_ptr cvca1_rel_pk = cvca1_reloaded.subject_public_key(); CHECK(link12_reloaded.check_signature(*cvca1_rel_pk)); // create first round dvca-req @@ -542,7 +542,7 @@ void test_cvc_chain(RandomNumberGenerator& rng) // verify the ado and sign the request too - std::auto_ptr ap_pk = dvca_cert1.subject_public_key(); + std::unique_ptr ap_pk = dvca_cert1.subject_public_key(); ECDSA_PublicKey* cert_pk = dynamic_cast(ap_pk.get()); cert_pk->set_domain_parameters(dom_pars); diff --git a/checks/ec_tests.cpp b/checks/ec_tests.cpp index 2d25e2153..b079ebd47 100644 --- a/checks/ec_tests.cpp +++ b/checks/ec_tests.cpp @@ -794,11 +794,11 @@ void test_enc_dec_uncompressed_521_prime_too_large() BigInt bi_b_secp = BigInt::decode ( sv_b_secp.begin(), sv_b_secp.size() ); CurveGFp secp521r1 ( GFpElement ( bi_p_secp,bi_a_secp ), GFpElement ( bi_p_secp, bi_b_secp ), bi_p_secp ); - std::auto_ptr p_G; + std::unique_ptr p_G; bool exc = false; try { - p_G = std::auto_ptr(new PointGFp(OS2ECP ( sv_G_secp_uncomp, secp521r1))); + p_G = std::unique_ptr(new PointGFp(OS2ECP ( sv_G_secp_uncomp, secp521r1))); p_G->check_invariants(); } catch (std::exception e) diff --git a/checks/ecdsa.cpp b/checks/ecdsa.cpp index 532a1c546..37880b755 100644 --- a/checks/ecdsa.cpp +++ b/checks/ecdsa.cpp @@ -70,7 +70,7 @@ void test_hash_larger_than_n(RandomNumberGenerator& rng) { format = "EMSA1_BSI(SHA-1)"; } - std::auto_ptr pk_signer(get_pk_signer(priv_key, format)); + std::unique_ptr pk_signer(get_pk_signer(priv_key, format)); SecureVector signature; bool sig_exc = false; try @@ -93,7 +93,7 @@ void test_hash_larger_than_n(RandomNumberGenerator& rng) if(i==0) // makes no sense to check for sha224 { - std::auto_ptr pk_verifier(get_pk_verifier(priv_key, format)); + std::unique_ptr pk_verifier(get_pk_verifier(priv_key, format)); bool ver = pk_verifier->verify_message(message, signature); CHECK(ver); } @@ -103,10 +103,10 @@ void test_hash_larger_than_n(RandomNumberGenerator& rng) // now check that verification alone fails // sign it with the normal EMSA1 - std::auto_ptr pk_signer(get_pk_signer(priv_key, "EMSA1(SHA-224)")); + std::unique_ptr pk_signer(get_pk_signer(priv_key, "EMSA1(SHA-224)")); SecureVector signature = pk_signer->sign_message(message, rng); - std::auto_ptr pk_verifier(get_pk_verifier(priv_key, "EMSA1_BSI(SHA-224)")); + std::unique_ptr pk_verifier(get_pk_verifier(priv_key, "EMSA1_BSI(SHA-224)")); // verify against EMSA1_BSI // we make sure it doesn't fail because of the invalid signature, @@ -164,7 +164,7 @@ void test_decode_ecdsa_X509() CHECK_MESSAGE(to_hex(cert.authority_key_id()) == "0096452DE588F966C4CCDF161DD1F3F5341B71E7", "error reading authority key id from x509 ecdsa certificate"); CHECK_MESSAGE(to_hex(cert.subject_key_id()) == "0096452DE588F966C4CCDF161DD1F3F5341B71E7", "error reading Subject key id from x509 ecdsa certificate"); - std::auto_ptr pubkey(cert.subject_public_key()); + std::unique_ptr pubkey(cert.subject_public_key()); bool ver_ec = cert.check_signature(*pubkey); CHECK_MESSAGE(ver_ec, "could not positively verify correct selfsigned x509-ecdsa certificate"); } @@ -176,7 +176,7 @@ void test_decode_ver_link_SHA256() X509_Certificate root_cert(TEST_DATA_DIR "/root2_SHA256.cer"); X509_Certificate link_cert(TEST_DATA_DIR "/link_SHA256.cer"); - std::auto_ptr pubkey(root_cert.subject_public_key()); + std::unique_ptr pubkey(root_cert.subject_public_key()); bool ver_ec = link_cert.check_signature(*pubkey); CHECK_MESSAGE(ver_ec, "could not positively verify correct SHA256 link x509-ecdsa certificate"); @@ -188,7 +188,7 @@ void test_decode_ver_link_SHA1() X509_Certificate root_cert(TEST_DATA_DIR "/root_SHA1.163.crt"); X509_Certificate link_cert(TEST_DATA_DIR "/link_SHA1.166.crt"); - std::auto_ptr pubkey(root_cert.subject_public_key()); + std::unique_ptr pubkey(root_cert.subject_public_key()); bool ver_ec = link_cert.check_signature(*pubkey); CHECK_MESSAGE(ver_ec, "could not positively verify correct SHA1 link x509-ecdsa certificate"); } @@ -231,8 +231,8 @@ bool test_ec_sign(RandomNumberGenerator& rng) ECDSA_PrivateKey priv_key(rng, dom_pars); std::string pem_encoded_key = PKCS8::PEM_encode(priv_key); - std::auto_ptr signer(get_pk_signer(priv_key, "EMSA1(SHA-224)")); - std::auto_ptr verifier(get_pk_verifier(priv_key, "EMSA1(SHA-224)")); + std::unique_ptr signer(get_pk_signer(priv_key, "EMSA1(SHA-224)")); + std::unique_ptr verifier(get_pk_verifier(priv_key, "EMSA1(SHA-224)")); for(u32bit i = 0; i != 256; ++i) signer->update((byte)i); @@ -313,11 +313,11 @@ void test_create_and_verify(RandomNumberGenerator& rng) std::ofstream priv_key(TEST_DATA_DIR "/dompar_private.pkcs8.pem"); priv_key << PKCS8::PEM_encode(key); - std::auto_ptr loaded_key(PKCS8::load_key(TEST_DATA_DIR "/wo_dompar_private.pkcs8.pem", rng)); + std::unique_ptr loaded_key(PKCS8::load_key(TEST_DATA_DIR "/wo_dompar_private.pkcs8.pem", rng)); ECDSA_PrivateKey* loaded_ec_key = dynamic_cast(loaded_key.get()); CHECK_MESSAGE(loaded_ec_key, "the loaded key could not be converted into an ECDSA_PrivateKey"); - std::auto_ptr loaded_key_1(PKCS8::load_key(TEST_DATA_DIR "/rsa_private.pkcs8.pem", rng)); + std::unique_ptr loaded_key_1(PKCS8::load_key(TEST_DATA_DIR "/rsa_private.pkcs8.pem", rng)); ECDSA_PrivateKey* loaded_rsa_key = dynamic_cast(loaded_key_1.get()); CHECK_MESSAGE(!loaded_rsa_key, "the loaded key is ECDSA_PrivateKey -> shouldn't be, is a RSA-Key"); @@ -350,7 +350,7 @@ void test_create_and_verify(RandomNumberGenerator& rng) std::string key_odd_oid_str = PKCS8::PEM_encode(key_odd_oid); DataSource_Memory key_data_src(key_odd_oid_str); - std::auto_ptr loaded_key2(PKCS8::load_key(key_data_src, rng)); + std::unique_ptr loaded_key2(PKCS8::load_key(key_data_src, rng)); if(!dynamic_cast(loaded_key.get())) { @@ -420,7 +420,7 @@ void test_read_pkcs8(RandomNumberGenerator& rng) std::cout << "." << std::flush; try { - std::auto_ptr loaded_key(PKCS8::load_key(TEST_DATA_DIR "/wo_dompar_private.pkcs8.pem", rng)); + std::unique_ptr loaded_key(PKCS8::load_key(TEST_DATA_DIR "/wo_dompar_private.pkcs8.pem", rng)); ECDSA_PrivateKey* loaded_ec_key = dynamic_cast(loaded_key.get()); CHECK_MESSAGE(loaded_ec_key, "the loaded key could not be converted into an ECDSA_PrivateKey"); @@ -431,7 +431,7 @@ void test_read_pkcs8(RandomNumberGenerator& rng) bool ver_success = loaded_ec_key->verify(sv_message.begin(), sv_message.size(), signature.begin(), signature.size()); CHECK_MESSAGE(ver_success, "generated signature could not be verified positively"); - std::auto_ptr loaded_key_nodp(PKCS8::load_key(TEST_DATA_DIR "/nodompar_private.pkcs8.pem", rng)); + std::unique_ptr loaded_key_nodp(PKCS8::load_key(TEST_DATA_DIR "/nodompar_private.pkcs8.pem", rng)); // anew in each test with unregistered domain-parameters ECDSA_PrivateKey* loaded_ec_key_nodp = dynamic_cast(loaded_key_nodp.get()); CHECK_MESSAGE(loaded_ec_key_nodp, "the loaded key could not be converted into an ECDSA_PrivateKey"); @@ -442,7 +442,7 @@ void test_read_pkcs8(RandomNumberGenerator& rng) CHECK_MESSAGE(ver_success_nodp, "generated signature could not be verified positively (no_dom)"); try { - std::auto_ptr loaded_key_withdp(PKCS8::load_key(TEST_DATA_DIR "/withdompar_private.pkcs8.pem", rng)); + std::unique_ptr loaded_key_withdp(PKCS8::load_key(TEST_DATA_DIR "/withdompar_private.pkcs8.pem", rng)); std::cout << "Unexpected success: loaded key with unknown OID\n"; } @@ -461,7 +461,7 @@ void test_cp_and_as_ctors(RandomNumberGenerator& rng) { std::cout << "." << std::flush; - std::auto_ptr loaded_key(PKCS8::load_key(TEST_DATA_DIR "/wo_dompar_private.pkcs8.pem", rng)); + std::unique_ptr loaded_key(PKCS8::load_key(TEST_DATA_DIR "/wo_dompar_private.pkcs8.pem", rng)); ECDSA_PrivateKey* loaded_ec_key = dynamic_cast(loaded_key.get()); CHECK_MESSAGE(loaded_ec_key, "the loaded key could not be converted into an ECDSA_PrivateKey"); std::string str_message = ("12345678901234567890abcdef12"); @@ -497,7 +497,7 @@ void test_non_init_ecdsa_keys(RandomNumberGenerator& rng) { std::cout << "." << std::flush; - std::auto_ptr loaded_key(PKCS8::load_key(TEST_DATA_DIR "/wo_dompar_private.pkcs8.pem", rng)); + std::unique_ptr loaded_key(PKCS8::load_key(TEST_DATA_DIR "/wo_dompar_private.pkcs8.pem", rng)); //ECDSA_PrivateKey* loaded_ec_key = dynamic_cast(loaded_key.get()); //CHECK_MESSAGE(loaded_ec_key, "the loaded key could not be converted into an ECDSA_PrivateKey"); std::string str_message = ("12345678901234567890abcdef12"); diff --git a/checks/eckaeg.cpp b/checks/eckaeg.cpp index f25fbb292..501ad8c3d 100644 --- a/checks/eckaeg.cpp +++ b/checks/eckaeg.cpp @@ -103,7 +103,7 @@ void test_eckaeg_some_dp(RandomNumberGenerator& rng) Botan::EC_Domain_Params dom_pars(Botan::get_EC_Dom_Pars_by_oid(oids[i])); Botan::ECKAEG_PrivateKey private_a(rng, dom_pars); Botan::ECKAEG_PublicKey public_a = private_a; - /*auto_ptr x509_key_enc = public_a.x509_encoder(); + /*unique_ptr x509_key_enc = public_a.x509_encoder(); Botan::MemoryVector enc_key_a = Botan::DER_Encoder() .start_cons(Botan::SEQUENCE) .encode(x509_key_enc->alg_id()) diff --git a/checks/pk.cpp b/checks/pk.cpp index c02005245..e8746ad04 100644 --- a/checks/pk.cpp +++ b/checks/pk.cpp @@ -178,7 +178,7 @@ u32bit validate_rsa_enc_pkcs8(const std::string& algo, DataSource_Memory keysource(reinterpret_cast(str[0].c_str()), str[0].length()); - std::auto_ptr privkey(PKCS8::load_key(keysource, rng, pass)); + std::unique_ptr privkey(PKCS8::load_key(keysource, rng, pass)); RSA_PrivateKey* rsapriv = dynamic_cast(privkey.get()); if(!rsapriv) @@ -297,7 +297,7 @@ u32bit validate_rsa_ver(const std::string& algo, std::string emsa = algo.substr(6, std::string::npos); - std::auto_ptr v(get_pk_verifier(key, emsa)); + std::unique_ptr v(get_pk_verifier(key, emsa)); SecureVector msg = decode_hex(str[2]); SecureVector sig = decode_hex(str[3]); @@ -320,7 +320,7 @@ u32bit validate_rsa_ver_x509(const std::string& algo, DataSource_Memory keysource(reinterpret_cast(str[0].c_str()), str[0].length()); - std::auto_ptr key(X509::load_key(keysource)); + std::unique_ptr key(X509::load_key(keysource)); RSA_PublicKey* rsakey = dynamic_cast(key.get()); @@ -329,7 +329,7 @@ u32bit validate_rsa_ver_x509(const std::string& algo, std::string emsa = algo.substr(11, std::string::npos); - std::auto_ptr v(get_pk_verifier(*rsakey, emsa)); + std::unique_ptr v(get_pk_verifier(*rsakey, emsa)); SecureVector msg = decode_hex(str[1]); SecureVector sig = decode_hex(str[2]); @@ -355,7 +355,7 @@ u32bit validate_rw_ver(const std::string& algo, std::string emsa = algo.substr(5, std::string::npos); - std::auto_ptr v(get_pk_verifier(key, emsa)); + std::unique_ptr v(get_pk_verifier(key, emsa)); SecureVector msg = decode_hex(str[2]); SecureVector sig = decode_hex(str[3]); @@ -411,7 +411,7 @@ u32bit validate_dsa_sig(const std::string& algo, DataSource_Memory keysource(reinterpret_cast(str[0].c_str()), str[0].length()); - std::auto_ptr privkey(PKCS8::load_key(keysource, rng, pass)); + std::unique_ptr privkey(PKCS8::load_key(keysource, rng, pass)); DSA_PrivateKey* dsapriv = dynamic_cast(privkey.get()); if(!dsapriv) @@ -443,7 +443,7 @@ u32bit validate_dsa_ver(const std::string& algo, #if defined(BOTAN_HAS_DSA) - std::auto_ptr key(X509::load_key(keysource)); + std::unique_ptr key(X509::load_key(keysource)); DSA_PublicKey* dsakey = dynamic_cast(key.get()); @@ -452,7 +452,7 @@ u32bit validate_dsa_ver(const std::string& algo, std::string emsa = algo.substr(7, std::string::npos); - std::auto_ptr v(get_pk_verifier(*dsakey, emsa)); + std::unique_ptr v(get_pk_verifier(*dsakey, emsa)); SecureVector msg = decode_hex(str[1]); SecureVector sig = decode_hex(str[2]); diff --git a/checks/pk_bench.cpp b/checks/pk_bench.cpp index a944934fb..8e5054a9a 100644 --- a/checks/pk_bench.cpp +++ b/checks/pk_bench.cpp @@ -191,12 +191,12 @@ void benchmark_rsa(RandomNumberGenerator& rng, while(verify_timer.seconds() < seconds || sig_timer.seconds() < seconds) { - std::auto_ptr enc(get_pk_encryptor(key, enc_padding)); - std::auto_ptr dec(get_pk_decryptor(key, enc_padding)); + std::unique_ptr enc(get_pk_encryptor(key, enc_padding)); + std::unique_ptr dec(get_pk_decryptor(key, enc_padding)); benchmark_enc_dec(*enc, *dec, enc_timer, dec_timer, rng, 10000, seconds); - std::auto_ptr sig(get_pk_signer(key, sig_padding)); - std::auto_ptr ver(get_pk_verifier(key, sig_padding)); + std::unique_ptr sig(get_pk_signer(key, sig_padding)); + std::unique_ptr ver(get_pk_verifier(key, sig_padding)); benchmark_sig_ver(*ver, *sig, verify_timer, sig_timer, rng, 10000, seconds); } @@ -246,8 +246,8 @@ void benchmark_rw(RandomNumberGenerator& rng, RW_PrivateKey key(rng, keylen); keygen_timer.stop(); - std::auto_ptr sig(get_pk_signer(key, padding)); - std::auto_ptr ver(get_pk_verifier(key, padding)); + std::unique_ptr sig(get_pk_signer(key, padding)); + std::unique_ptr ver(get_pk_verifier(key, padding)); benchmark_sig_ver(*ver, *sig, verify_timer, sig_timer, rng, 10000, seconds); } @@ -300,8 +300,8 @@ void benchmark_ecdsa(RandomNumberGenerator& rng, ECDSA_PrivateKey key(rng, params); keygen_timer.stop(); - std::auto_ptr sig(get_pk_signer(key, padding)); - std::auto_ptr ver(get_pk_verifier(key, padding)); + std::unique_ptr sig(get_pk_signer(key, padding)); + std::unique_ptr ver(get_pk_verifier(key, padding)); benchmark_sig_ver(*ver, *sig, verify_timer, sig_timer, rng, 1000, seconds); @@ -416,8 +416,8 @@ void benchmark_dsa_nr(RandomNumberGenerator& rng, PRIV_KEY_TYPE key(rng, group); keygen_timer.stop(); - std::auto_ptr sig(get_pk_signer(key, padding)); - std::auto_ptr ver(get_pk_verifier(key, padding)); + std::unique_ptr sig(get_pk_signer(key, padding)); + std::unique_ptr ver(get_pk_verifier(key, padding)); benchmark_sig_ver(*ver, *sig, verify_timer, sig_timer, rng, 1000, seconds); @@ -586,8 +586,8 @@ void benchmark_elg(RandomNumberGenerator& rng, ElGamal_PrivateKey key(rng, group); keygen_timer.stop(); - std::auto_ptr dec(get_pk_decryptor(key, padding)); - std::auto_ptr enc(get_pk_encryptor(key, padding)); + std::unique_ptr dec(get_pk_decryptor(key, padding)); + std::unique_ptr enc(get_pk_encryptor(key, padding)); benchmark_enc_dec(*enc, *dec, enc_timer, dec_timer, rng, 1000, seconds); } diff --git a/checks/x509.cpp b/checks/x509.cpp index 6f191285c..3aba4ce1a 100644 --- a/checks/x509.cpp +++ b/checks/x509.cpp @@ -34,7 +34,7 @@ namespace { u64bit key_id(const Public_Key* key) { - std::auto_ptr encoder(key->x509_encoder()); + std::unique_ptr encoder(key->x509_encoder()); if(!encoder.get()) throw Internal_Error("Public_Key:key_id: No encoder found"); diff --git a/src/cert/cvc/cvc_ado.cpp b/src/cert/cvc/cvc_ado.cpp index 6e1484e90..19d76fe7f 100644 --- a/src/cert/cvc/cvc_ado.cpp +++ b/src/cert/cvc/cvc_ado.cpp @@ -47,12 +47,12 @@ void EAC1_1_ADO::force_decode() } MemoryVector EAC1_1_ADO::make_signed( - std::auto_ptr signer, + PK_Signer& signer, const MemoryRegion& tbs_bits, RandomNumberGenerator& rng) { SecureVector concat_sig = - EAC1_1_obj::make_signature(signer.get(), tbs_bits, rng); + EAC1_1_obj::make_signature(signer, tbs_bits, rng); assert(concat_sig.size() % 2 == 0); MemoryVector result = DER_Encoder() .start_cons(ASN1_Tag(7), APPLICATION) diff --git a/src/cert/cvc/cvc_ado.h b/src/cert/cvc/cvc_ado.h index 2c4f3ce70..ef469cc09 100644 --- a/src/cert/cvc/cvc_ado.h +++ b/src/cert/cvc/cvc_ado.h @@ -47,7 +47,7 @@ class BOTAN_DLL EAC1_1_ADO : public EAC1_1_obj * @param tbs_bits the TBS data to sign */ static MemoryVector make_signed( - std::auto_ptr signer, + PK_Signer& signer, const MemoryRegion& tbs_bits, RandomNumberGenerator& rng); diff --git a/src/cert/cvc/cvc_ca.cpp b/src/cert/cvc/cvc_ca.cpp index 638d3f984..7b1c5fcba 100644 --- a/src/cert/cvc/cvc_ca.cpp +++ b/src/cert/cvc/cvc_ca.cpp @@ -5,7 +5,7 @@ #include namespace Botan { -EAC1_1_CVC EAC1_1_CVC_CA::make_cert(std::auto_ptr signer, +EAC1_1_CVC EAC1_1_CVC_CA::make_cert(PK_Signer& signer, MemoryRegion const& public_key, ASN1_Car const& car, ASN1_Chr const& chr, diff --git a/src/cert/cvc/cvc_ca.h b/src/cert/cvc/cvc_ca.h index 3ec307bb3..87699808f 100644 --- a/src/cert/cvc/cvc_ca.h +++ b/src/cert/cvc/cvc_ca.h @@ -36,7 +36,7 @@ class BOTAN_DLL EAC1_1_CVC_CA * @param ced the CED to appear in the certificate * @param ced the CEX to appear in the certificate */ - static EAC1_1_CVC make_cert(std::auto_ptr signer, + static EAC1_1_CVC make_cert(PK_Signer& signer, MemoryRegion const& public_key, ASN1_Car const& car, ASN1_Chr const& chr, diff --git a/src/cert/cvc/cvc_cert.cpp b/src/cert/cvc/cvc_cert.cpp index 71ca0cf16..7964b8900 100644 --- a/src/cert/cvc/cvc_cert.cpp +++ b/src/cert/cvc/cvc_cert.cpp @@ -61,7 +61,7 @@ void EAC1_1_CVC::force_decode() // XXX: PK algos have no notion of EAC encoder/decoder currently #if 0 ECDSA_PublicKey tmp_pk; - std::auto_ptr dec = tmp_pk.cvc_eac1_1_decoder(); + std::unique_ptr dec = tmp_pk.cvc_eac1_1_decoder(); sig_algo = dec->public_key(enc_pk); diff --git a/src/cert/cvc/cvc_gen_cert.h b/src/cert/cvc/cvc_gen_cert.h index 4a788026c..8620cd89a 100644 --- a/src/cert/cvc/cvc_gen_cert.h +++ b/src/cert/cvc/cvc_gen_cert.h @@ -33,7 +33,7 @@ class BOTAN_DLL EAC1_1_gen_CVC : public EAC1_1_obj // CRTP continuation * Get this certificates public key. * @result this certificates public key */ - std::auto_ptr subject_public_key() const; + std::unique_ptr subject_public_key() const; /** * Find out whether this object is self signed. @@ -75,7 +75,7 @@ class BOTAN_DLL EAC1_1_gen_CVC : public EAC1_1_obj // CRTP continuation * @result the DER encoded signed generalized CVC object */ static MemoryVector make_signed( - std::auto_ptr signer, + PK_Signer& signer, const MemoryRegion& tbs_bits, RandomNumberGenerator& rng); virtual ~EAC1_1_gen_CVC() @@ -103,11 +103,11 @@ template bool EAC1_1_gen_CVC::is_self_signed() const } template MemoryVector EAC1_1_gen_CVC::make_signed( - std::auto_ptr signer, + PK_Signer& signer, const MemoryRegion& tbs_bits, RandomNumberGenerator& rng) // static { - SecureVector concat_sig = EAC1_1_obj::make_signature(signer.get(), tbs_bits, rng); + SecureVector concat_sig = EAC1_1_obj::make_signature(signer, tbs_bits, rng); assert(concat_sig.size() % 2 == 0); return DER_Encoder() .start_cons(ASN1_Tag(33), APPLICATION) @@ -117,9 +117,9 @@ template MemoryVector EAC1_1_gen_CVC::make_sign .get_contents(); } -template std::auto_ptr EAC1_1_gen_CVC::subject_public_key() const +template std::unique_ptr EAC1_1_gen_CVC::subject_public_key() const { - return std::auto_ptr(new ECDSA_PublicKey(m_pk)); + return std::unique_ptr(new ECDSA_PublicKey(m_pk)); } template SecureVector EAC1_1_gen_CVC::build_cert_body(MemoryRegion const& tbs) diff --git a/src/cert/cvc/cvc_req.cpp b/src/cert/cvc/cvc_req.cpp index a9a94827c..c2318dc1b 100644 --- a/src/cert/cvc/cvc_req.cpp +++ b/src/cert/cvc/cvc_req.cpp @@ -44,7 +44,7 @@ void EAC1_1_Req::force_decode() // XXX: No EAC support in ECDSA #if 0 ECDSA_PublicKey tmp_pk; - std::auto_ptr dec = tmp_pk.cvc_eac1_1_decoder(); + std::unique_ptr dec = tmp_pk.cvc_eac1_1_decoder(); sig_algo = dec->public_key(enc_pk); m_pk = tmp_pk; #endif diff --git a/src/cert/cvc/cvc_self.cpp b/src/cert/cvc/cvc_self.cpp index 45a584cb3..c31741956 100644 --- a/src/cert/cvc/cvc_self.cpp +++ b/src/cert/cvc/cvc_self.cpp @@ -84,16 +84,18 @@ EAC1_1_CVC create_self_signed_cert(Private_Key const& key, sig_algo.oid = OIDS::lookup(priv_key->algo_name() + "/" + padding_and_hash); sig_algo = AlgorithmIdentifier(sig_algo.oid, AlgorithmIdentifier::USE_NULL_PARAM); - std::auto_ptr signer(get_pk_signer(*priv_key, padding_and_hash)); + std::unique_ptr signer(get_pk_signer(*priv_key, padding_and_hash)); #if 0 - std::auto_ptr enc(priv_key->cvc_eac1_1_encoder()); + std::unique_ptr enc(priv_key->cvc_eac1_1_encoder()); MemoryVector enc_public_key = enc->public_key(sig_algo); #else MemoryVector enc_public_key; #endif - return EAC1_1_CVC_CA::make_cert(signer, enc_public_key, opt.car, chr, opt.holder_auth_templ, opt.ced, opt.cex, rng); + return EAC1_1_CVC_CA::make_cert(*signer.get(), enc_public_key, + opt.car, chr, opt.holder_auth_templ, + opt.ced, opt.cex, rng); } @@ -113,10 +115,10 @@ EAC1_1_Req create_cvc_req(Private_Key const& key, sig_algo.oid = OIDS::lookup(priv_key->algo_name() + "/" + padding_and_hash); sig_algo = AlgorithmIdentifier(sig_algo.oid, AlgorithmIdentifier::USE_NULL_PARAM); - std::auto_ptr signer(get_pk_signer(*priv_key, padding_and_hash)); + std::unique_ptr signer(get_pk_signer(*priv_key, padding_and_hash)); -#if 0 - std::auto_ptr enc(priv_key->cvc_eac1_1_encoder()); +#if 0 // FIXME + std::unique_ptr enc(priv_key->cvc_eac1_1_encoder()); MemoryVector enc_public_key = enc->public_key(sig_algo); #else MemoryVector enc_public_key; @@ -130,7 +132,10 @@ EAC1_1_Req create_cvc_req(Private_Key const& key, .encode(chr) .get_contents(); - MemoryVector signed_cert = EAC1_1_gen_CVC::make_signed(signer, EAC1_1_gen_CVC::build_cert_body(tbs), rng); + MemoryVector signed_cert = + EAC1_1_gen_CVC::make_signed(*signer.get(), + EAC1_1_gen_CVC::build_cert_body(tbs), rng); + std::tr1::shared_ptr source(new DataSource_Memory(signed_cert)); return EAC1_1_Req(source); } @@ -146,11 +151,15 @@ EAC1_1_ADO create_ado_req(Private_Key const& key, { throw Invalid_Argument("CVC_EAC::create_self_signed_cert(): unsupported key type"); } + std::string padding_and_hash = padding_and_hash_from_oid(req.signature_algorithm().oid); - std::auto_ptr signer(get_pk_signer(*priv_key, padding_and_hash)); + + std::unique_ptr signer(get_pk_signer(*priv_key, padding_and_hash)); + SecureVector tbs_bits = req.BER_encode(); tbs_bits.append(DER_Encoder().encode(car).get_contents()); - MemoryVector signed_cert = EAC1_1_ADO::make_signed(signer, tbs_bits, rng); + + MemoryVector signed_cert = EAC1_1_ADO::make_signed(*signer.get(), tbs_bits, rng); std::tr1::shared_ptr source(new DataSource_Memory(signed_cert)); return EAC1_1_ADO(source); } @@ -210,19 +219,19 @@ EAC1_1_CVC link_cvca(EAC1_1_CVC const& signer, } AlgorithmIdentifier sig_algo = signer.signature_algorithm(); std::string padding_and_hash = padding_and_hash_from_oid(sig_algo.oid); - std::auto_ptr pk_signer(get_pk_signer(*priv_key, padding_and_hash)); - std::auto_ptr pk = signee.subject_public_key(); + std::unique_ptr pk_signer(get_pk_signer(*priv_key, padding_and_hash)); + std::unique_ptr pk = signee.subject_public_key(); ECDSA_PublicKey* subj_pk = dynamic_cast(pk.get()); subj_pk->set_parameter_encoding(ENC_EXPLICIT); #if 0 - std::auto_ptr enc(subj_pk->cvc_eac1_1_encoder()); + std::unique_ptr enc(subj_pk->cvc_eac1_1_encoder()); MemoryVector enc_public_key = enc->public_key(sig_algo); #else MemoryVector enc_public_key; #endif - return EAC1_1_CVC_CA::make_cert(pk_signer, enc_public_key, + return EAC1_1_CVC_CA::make_cert(*pk_signer.get(), enc_public_key, signer.get_car(), signee.get_chr(), signer.get_chat_value(), @@ -250,10 +259,10 @@ EAC1_1_CVC sign_request(EAC1_1_CVC const& signer_cert, chr_str.append(fixed_len_seqnr(seqnr, seqnr_len)); ASN1_Chr chr(chr_str); std::string padding_and_hash = padding_and_hash_from_oid(signee.signature_algorithm().oid); - std::auto_ptr pk_signer(get_pk_signer(*priv_key, padding_and_hash)); - std::auto_ptr pk = signee.subject_public_key(); + std::unique_ptr pk_signer(get_pk_signer(*priv_key, padding_and_hash)); + std::unique_ptr pk = signee.subject_public_key(); ECDSA_PublicKey* subj_pk = dynamic_cast(pk.get()); - std::auto_ptr signer_pk = signer_cert.subject_public_key(); + std::unique_ptr signer_pk = signer_cert.subject_public_key(); // for the case that the domain parameters are not set... // (we use those from the signer because they must fit) @@ -261,8 +270,8 @@ EAC1_1_CVC sign_request(EAC1_1_CVC const& signer_cert, subj_pk->set_parameter_encoding(ENC_IMPLICITCA); -#if 0 - std::auto_ptr enc(subj_pk->cvc_eac1_1_encoder()); +#if 0 // FIXME + std::unique_ptr enc(subj_pk->cvc_eac1_1_encoder()); MemoryVector enc_public_key = enc->public_key(sig_algo); #else MemoryVector enc_public_key; @@ -298,7 +307,7 @@ EAC1_1_CVC sign_request(EAC1_1_CVC const& signer_cert, throw Invalid_Argument("sign_request(): encountered illegal value for CHAT"); // (IS cannot sign certificates) } - return EAC1_1_CVC_CA::make_cert(pk_signer, enc_public_key, + return EAC1_1_CVC_CA::make_cert(*pk_signer.get(), enc_public_key, ASN1_Car(signer_cert.get_chr().iso_8859()), chr, chat_val, diff --git a/src/cert/cvc/eac_obj.h b/src/cert/cvc/eac_obj.h index 04afd7e59..b41b78b2c 100644 --- a/src/cert/cvc/eac_obj.h +++ b/src/cert/cvc/eac_obj.h @@ -54,7 +54,7 @@ class BOTAN_DLL EAC1_1_obj : public EAC_Signed_Object protected: void init(SharedPtrConverter in); - static SecureVector make_signature(PK_Signer* signer, + static SecureVector make_signature(PK_Signer& signer, const MemoryRegion& tbs_bits, RandomNumberGenerator& rng); @@ -68,12 +68,12 @@ template SecureVector EAC1_1_obj::get_concat_si } template SecureVector -EAC1_1_obj::make_signature(PK_Signer* signer, +EAC1_1_obj::make_signature(PK_Signer& signer, const MemoryRegion& tbs_bits, RandomNumberGenerator& rng) { // this is the signature as a der sequence - SecureVector seq_sig = signer->sign_message(tbs_bits, rng); + SecureVector seq_sig = signer.sign_message(tbs_bits, rng); ECDSA_Signature sig(decode_seq(seq_sig)); SecureVector concat_sig(sig.get_concatenation()); @@ -112,12 +112,12 @@ bool EAC1_1_obj::check_signature(Public_Key& pub_key) const if(!dynamic_cast(&pub_key)) return false; - std::auto_ptr enc(new ECDSA_Signature_Encoder(&m_sig)); + std::unique_ptr enc(new ECDSA_Signature_Encoder(&m_sig)); SecureVector seq_sig = enc->signature_bits(); SecureVector to_sign = tbs_data(); PK_Verifying_wo_MR_Key& sig_key = dynamic_cast(pub_key); - std::auto_ptr verifier(get_pk_verifier(sig_key, padding, format)); + std::unique_ptr verifier(get_pk_verifier(sig_key, padding, format)); return verifier->verify_message(to_sign, seq_sig); } catch(...) diff --git a/src/cert/cvc/ecdsa_sig.cpp b/src/cert/cvc/ecdsa_sig.cpp index c33a4550a..1a60f7aa8 100644 --- a/src/cert/cvc/ecdsa_sig.cpp +++ b/src/cert/cvc/ecdsa_sig.cpp @@ -41,7 +41,7 @@ ECDSA_Signature const decode_seq(MemoryRegion const& seq) { ECDSA_Signature sig; - std::auto_ptr dec(new ECDSA_Signature_Decoder(&sig)); + std::unique_ptr dec(new ECDSA_Signature_Decoder(&sig)); dec->signature_bits(seq); return sig; } diff --git a/src/cert/x509/x509_ca.cpp b/src/cert/x509/x509_ca.cpp index 41e314724..05cdce411 100644 --- a/src/cert/x509/x509_ca.cpp +++ b/src/cert/x509/x509_ca.cpp @@ -51,7 +51,7 @@ X509_Certificate X509_CA::sign_request(const PKCS10_Request& req, constraints = Key_Constraints(KEY_CERT_SIGN | CRL_SIGN); else { - std::auto_ptr key(req.subject_public_key()); + std::unique_ptr key(req.subject_public_key()); constraints = X509::find_constraints(*key, req.constraints()); } @@ -269,7 +269,7 @@ PK_Signer* choose_sig_format(const Private_Key& key, sig_algo.oid = OIDS::lookup(algo_name + "/" + padding); - std::auto_ptr encoding(key.x509_encoder()); + std::unique_ptr encoding(key.x509_encoder()); if(!encoding.get()) throw Encoding_Error("Key " + algo_name + " does not support " "X.509 encoding"); diff --git a/src/cert/x509/x509_obj.cpp b/src/cert/x509/x509_obj.cpp index 31b4a309f..95a1c1cca 100644 --- a/src/cert/x509/x509_obj.cpp +++ b/src/cert/x509/x509_obj.cpp @@ -168,7 +168,7 @@ bool X509_Object::check_signature(Public_Key& pub_key) const Signature_Format format = (pub_key.message_parts() >= 2) ? DER_SEQUENCE : IEEE_1363; - std::auto_ptr verifier; + std::unique_ptr verifier; if(dynamic_cast(&pub_key)) { diff --git a/src/cert/x509/x509self.cpp b/src/cert/x509/x509self.cpp index 8afb22a7e..598d6a418 100644 --- a/src/cert/x509/x509self.cpp +++ b/src/cert/x509/x509self.cpp @@ -72,7 +72,7 @@ X509_Certificate create_self_signed_cert(const X509_Cert_Options& opts, AlternativeName subject_alt; MemoryVector pub_key = shared_setup(opts, key); - std::auto_ptr signer(choose_sig_format(key, sig_algo)); + std::unique_ptr signer(choose_sig_format(key, sig_algo)); load_info(opts, subject_dn, subject_alt); Key_Constraints constraints; @@ -110,7 +110,7 @@ PKCS10_Request create_cert_req(const X509_Cert_Options& opts, AlternativeName subject_alt; MemoryVector pub_key = shared_setup(opts, key); - std::auto_ptr signer(choose_sig_format(key, sig_algo)); + std::unique_ptr signer(choose_sig_format(key, sig_algo)); load_info(opts, subject_dn, subject_alt); const u32bit PKCS10_VERSION = 0; diff --git a/src/cert/x509/x509stor.cpp b/src/cert/x509/x509stor.cpp index cb61bc2d2..f91da890b 100644 --- a/src/cert/x509/x509stor.cpp +++ b/src/cert/x509/x509stor.cpp @@ -380,8 +380,8 @@ X509_Code X509_Store::check_sig(const Cert_Info& cert_info, */ X509_Code X509_Store::check_sig(const X509_Object& object, Public_Key* key) { - std::auto_ptr pub_key(key); - std::auto_ptr verifier; + std::unique_ptr pub_key(key); + std::unique_ptr verifier; try { std::vector sig_info = diff --git a/src/math/numbertheory/dsa_gen.cpp b/src/math/numbertheory/dsa_gen.cpp index 83646e50e..d5f6dc792 100644 --- a/src/math/numbertheory/dsa_gen.cpp +++ b/src/math/numbertheory/dsa_gen.cpp @@ -54,7 +54,7 @@ bool generate_dsa_primes(RandomNumberGenerator& rng, "Generating a DSA parameter set with a " + to_string(qbits) + "long q requires a seed at least as many bits long"); - std::auto_ptr hash( + std::unique_ptr hash( af.make_hash_function("SHA-" + to_string(qbits))); const u32bit HASH_SIZE = hash->OUTPUT_LENGTH; diff --git a/src/pubkey/ec_dompar/ec_dompar.cpp b/src/pubkey/ec_dompar/ec_dompar.cpp index 6cfcc0619..c4634877e 100644 --- a/src/pubkey/ec_dompar/ec_dompar.cpp +++ b/src/pubkey/ec_dompar/ec_dompar.cpp @@ -545,7 +545,7 @@ EC_Domain_Params decode_ber_ec_dompar(SecureVector const& encoded) BER_Decoder dec(encoded); BER_Object obj = dec.get_next_object(); ASN1_Tag tag = obj.type_tag; - std::auto_ptr p_result; + std::unique_ptr p_result; if(tag == OBJECT_ID) { diff --git a/src/pubkey/ecc_key/ecc_key.cpp b/src/pubkey/ecc_key/ecc_key.cpp index 9af63bdcd..bebfc3705 100644 --- a/src/pubkey/ecc_key/ecc_key.cpp +++ b/src/pubkey/ecc_key/ecc_key.cpp @@ -166,7 +166,7 @@ void EC_PrivateKey::generate_private_key(RandomNumberGenerator& rng) BigInt tmp_private_value(0); tmp_private_value = BigInt::random_integer(rng, 1, mp_dom_pars->get_order()); - mp_public_point = std::auto_ptr( new PointGFp (mp_dom_pars->get_base_point())); + mp_public_point = std::unique_ptr( new PointGFp (mp_dom_pars->get_base_point())); mp_public_point->mult_this_secure(tmp_private_value, mp_dom_pars->get_order(), mp_dom_pars->get_order()-1); diff --git a/src/pubkey/ecc_key/ecc_key.h b/src/pubkey/ecc_key/ecc_key.h index 0ca9a0e75..9d5f57d9f 100644 --- a/src/pubkey/ecc_key/ecc_key.h +++ b/src/pubkey/ecc_key/ecc_key.h @@ -103,8 +103,8 @@ class BOTAN_DLL EC_PublicKey : public virtual Public_Key SecureVector m_enc_public_point; // stores the public point - std::auto_ptr mp_dom_pars; - std::auto_ptr mp_public_point; + std::unique_ptr mp_dom_pars; + std::unique_ptr mp_public_point; EC_dompar_enc m_param_enc; }; diff --git a/src/pubkey/ecdsa/ecdsa.cpp b/src/pubkey/ecdsa/ecdsa.cpp index 9640c6397..3e3bbf38a 100644 --- a/src/pubkey/ecdsa/ecdsa.cpp +++ b/src/pubkey/ecdsa/ecdsa.cpp @@ -20,7 +20,7 @@ namespace Botan { ECDSA_PrivateKey::ECDSA_PrivateKey(RandomNumberGenerator& rng, const EC_Domain_Params& dom_pars) { - mp_dom_pars = std::auto_ptr(new EC_Domain_Params(dom_pars)); + mp_dom_pars = std::unique_ptr(new EC_Domain_Params(dom_pars)); generate_private_key(rng); try @@ -68,11 +68,10 @@ void ECDSA_PublicKey::set_domain_parameters(const EC_Domain_Params& dom_pars) throw Invalid_State("EC_PublicKey::set_domain_parameters(): point does not lie on provided curve"); } - std::auto_ptr p_tmp_pars(new EC_Domain_Params(dom_pars)); - ECDSA_Core tmp_ecdsa_core(*p_tmp_pars, BigInt(0), tmp_pp); + mp_dom_pars.reset(new EC_Domain_Params(dom_pars)); + ECDSA_Core tmp_ecdsa_core(*mp_dom_pars, BigInt(0), tmp_pp); mp_public_point.reset(new PointGFp(tmp_pp)); m_ecdsa_core = tmp_ecdsa_core; - mp_dom_pars = p_tmp_pars; } void ECDSA_PublicKey::set_all_values(const ECDSA_PublicKey& other) @@ -131,8 +130,8 @@ bool ECDSA_PublicKey::verify(const byte message[], ECDSA_PublicKey::ECDSA_PublicKey(const EC_Domain_Params& dom_par, const PointGFp& public_point) { - mp_dom_pars = std::auto_ptr(new EC_Domain_Params(dom_par)); - mp_public_point = std::auto_ptr(new PointGFp(public_point)); + mp_dom_pars = std::unique_ptr(new EC_Domain_Params(dom_par)); + mp_public_point = std::unique_ptr(new PointGFp(public_point)); m_param_enc = ENC_EXPLICIT; m_ecdsa_core = ECDSA_Core(*mp_dom_pars, BigInt(0), *mp_public_point); } diff --git a/src/pubkey/eckaeg/eckaeg.cpp b/src/pubkey/eckaeg/eckaeg.cpp index 0d094e2e1..1b315d101 100644 --- a/src/pubkey/eckaeg/eckaeg.cpp +++ b/src/pubkey/eckaeg/eckaeg.cpp @@ -63,8 +63,8 @@ void ECKAEG_PublicKey::X509_load_hook() ECKAEG_PublicKey::ECKAEG_PublicKey(EC_Domain_Params const& dom_par, PointGFp const& public_point) { - mp_dom_pars = std::auto_ptr(new EC_Domain_Params(dom_par)); - mp_public_point = std::auto_ptr(new PointGFp(public_point)); + mp_dom_pars = std::unique_ptr(new EC_Domain_Params(dom_par)); + mp_public_point = std::unique_ptr(new PointGFp(public_point)); if(mp_public_point->get_curve() != mp_dom_pars->get_curve()) { throw Invalid_Argument("ECKAEG_PublicKey(): curve of arg. point and curve of arg. domain parameters are different"); diff --git a/src/pubkey/eckaeg/eckaeg.h b/src/pubkey/eckaeg/eckaeg.h index 31b65740c..053a40e4f 100644 --- a/src/pubkey/eckaeg/eckaeg.h +++ b/src/pubkey/eckaeg/eckaeg.h @@ -89,7 +89,7 @@ class BOTAN_DLL ECKAEG_PrivateKey : public ECKAEG_PublicKey, ECKAEG_PrivateKey(RandomNumberGenerator& rng, const EC_Domain_Params& dom_pars) { - mp_dom_pars = std::auto_ptr(new EC_Domain_Params(dom_pars)); + mp_dom_pars = std::unique_ptr(new EC_Domain_Params(dom_pars)); generate_private_key(rng); mp_public_point->check_invariants(); m_eckaeg_core = ECKAEG_Core(*mp_dom_pars, m_private_value, *mp_public_point); diff --git a/src/pubkey/keypair/keypair.cpp b/src/pubkey/keypair/keypair.cpp index 486577fc5..7eaa33395 100644 --- a/src/pubkey/keypair/keypair.cpp +++ b/src/pubkey/keypair/keypair.cpp @@ -22,8 +22,8 @@ void check_key(RandomNumberGenerator& rng, if(encryptor->maximum_input_size() == 0) return; - std::auto_ptr enc(encryptor); - std::auto_ptr dec(decryptor); + std::unique_ptr enc(encryptor); + std::unique_ptr dec(decryptor); SecureVector message(enc->maximum_input_size() - 1); rng.randomize(message, message.size()); @@ -43,8 +43,8 @@ void check_key(RandomNumberGenerator& rng, void check_key(RandomNumberGenerator& rng, PK_Signer* signer, PK_Verifier* verifier) { - std::auto_ptr sig(signer); - std::auto_ptr ver(verifier); + std::unique_ptr sig(signer); + std::unique_ptr ver(verifier); SecureVector message(16); rng.randomize(message, message.size()); diff --git a/src/pubkey/pubkey/pkcs8.cpp b/src/pubkey/pubkey/pkcs8.cpp index 8a464ecfe..87f05da92 100644 --- a/src/pubkey/pubkey/pkcs8.cpp +++ b/src/pubkey/pubkey/pkcs8.cpp @@ -89,7 +89,7 @@ SecureVector PKCS8_decode(DataSource& source, const User_Interface& ui, if(is_encrypted) { DataSource_Memory params(pbe_alg_id.parameters); - std::auto_ptr pbe(get_pbe(pbe_alg_id.oid, params)); + std::unique_ptr pbe(get_pbe(pbe_alg_id.oid, params)); User_Interface::UI_Result result = User_Interface::OK; const std::string passphrase = @@ -138,7 +138,7 @@ SecureVector PKCS8_decode(DataSource& source, const User_Interface& ui, */ void encode(const Private_Key& key, Pipe& pipe, X509_Encoding encoding) { - std::auto_ptr encoder(key.pkcs8_encoder()); + std::unique_ptr encoder(key.pkcs8_encoder()); if(!encoder.get()) throw Encoding_Error("PKCS8::encode: Key does not support encoding"); @@ -175,7 +175,7 @@ void encrypt_key(const Private_Key& key, encode(key, raw_key, RAW_BER); raw_key.end_msg(); - std::auto_ptr pbe(get_pbe(((pbe_algo != "") ? pbe_algo : DEFAULT_PBE))); + std::unique_ptr pbe(get_pbe(((pbe_algo != "") ? pbe_algo : DEFAULT_PBE))); pbe->new_params(rng); pbe->set_key(pass); @@ -244,13 +244,13 @@ Private_Key* load_key(DataSource& source, throw PKCS8_Exception("Unknown algorithm OID: " + alg_id.oid.as_string()); - std::auto_ptr key(get_private_key(alg_name)); + std::unique_ptr key(get_private_key(alg_name)); if(!key.get()) throw PKCS8_Exception("Unknown PK algorithm/OID: " + alg_name + ", " + alg_id.oid.as_string()); - std::auto_ptr decoder(key->pkcs8_decoder(rng)); + std::unique_ptr decoder(key->pkcs8_decoder(rng)); if(!decoder.get()) throw Decoding_Error("Key does not support PKCS #8 decoding"); diff --git a/src/pubkey/pubkey/x509_key.cpp b/src/pubkey/pubkey/x509_key.cpp index 455e627f3..f1fc59410 100644 --- a/src/pubkey/pubkey/x509_key.cpp +++ b/src/pubkey/pubkey/x509_key.cpp @@ -24,7 +24,7 @@ namespace X509 { */ void encode(const Public_Key& key, Pipe& pipe, X509_Encoding encoding) { - std::auto_ptr encoder(key.x509_encoder()); + std::unique_ptr encoder(key.x509_encoder()); if(!encoder.get()) throw Encoding_Error("X509::encode: Key does not support encoding"); @@ -94,12 +94,12 @@ Public_Key* load_key(DataSource& source) throw Decoding_Error("Unknown algorithm OID: " + alg_id.oid.as_string()); - std::auto_ptr key_obj(get_public_key(alg_name)); + std::unique_ptr key_obj(get_public_key(alg_name)); if(!key_obj.get()) throw Decoding_Error("Unknown PK algorithm/OID: " + alg_name + ", " + alg_id.oid.as_string()); - std::auto_ptr decoder(key_obj->x509_decoder()); + std::unique_ptr decoder(key_obj->x509_decoder()); if(!decoder.get()) throw Decoding_Error("Key does not support X.509 decoding"); -- cgit v1.2.3 From 3afb86663583b982e1eab8f46d07fc3d51260602 Mon Sep 17 00:00:00 2001 From: lloyd Date: Wed, 1 Apr 2009 16:42:38 +0000 Subject: Use C++0x std::shared_ptr<> instead of TR1's --- checks/ec_tests.cpp | 6 +++--- checks/gfpmath.cpp | 14 +++++++------- src/cert/cvc/cvc_ado.cpp | 6 +++--- src/cert/cvc/cvc_ado.h | 2 +- src/cert/cvc/cvc_ca.cpp | 2 +- src/cert/cvc/cvc_cert.cpp | 4 ++-- src/cert/cvc/cvc_cert.h | 2 +- src/cert/cvc/cvc_req.cpp | 4 ++-- src/cert/cvc/cvc_req.h | 2 +- src/cert/cvc/cvc_self.cpp | 4 ++-- src/cert/cvc/freestore.h | 11 ++--------- src/math/gfpmath/curve_gfp.cpp | 28 ++++++++++++++-------------- src/math/gfpmath/curve_gfp.h | 16 ++++++++-------- src/math/gfpmath/gfp_element.cpp | 6 +++--- src/math/gfpmath/gfp_element.h | 17 +++++------------ src/math/gfpmath/point_gfp.cpp | 16 ++++++++-------- src/math/gfpmath/point_gfp.h | 10 +++++----- 17 files changed, 68 insertions(+), 82 deletions(-) diff --git a/checks/ec_tests.cpp b/checks/ec_tests.cpp index b079ebd47..5ee2002f3 100644 --- a/checks/ec_tests.cpp +++ b/checks/ec_tests.cpp @@ -80,8 +80,8 @@ void test_point_turn_on_sp_red_mul() CHECK_MESSAGE(r1 == r2, "error with point mul after extra turn on sp red mul"); CHECK(r1.get_affine_x().get_value() != BigInt("0")); - std::tr1::shared_ptr p_r1(new PointGFp(r1)); - std::tr1::shared_ptr p_r2(new PointGFp(r2)); + std::shared_ptr p_r1(new PointGFp(r1)); + std::shared_ptr p_r2(new PointGFp(r2)); p_r1->mult2_in_place(); // wird fĂ¼r Fehler nicht gebraucht p_r2->turn_on_sp_red_mul(); // 1. t_o() macht nur p_r2 kaputt @@ -981,7 +981,7 @@ void test_point_worksp() { EC_Domain_Params dom_pars(get_EC_Dom_Pars_by_oid("1.3.132.0.8")); - std::tr1::shared_ptr > worksp1; + std::shared_ptr > worksp1; assert(worksp1.get() == 0); { PointGFp p = dom_pars.get_base_point(); diff --git a/checks/gfpmath.cpp b/checks/gfpmath.cpp index 2352bba7e..6d8e406e3 100644 --- a/checks/gfpmath.cpp +++ b/checks/gfpmath.cpp @@ -484,13 +484,13 @@ bool test_gfp_shared_vals() GFpElement a(p, BigInt("234090")); GFpElement shcpy_a(1,0); shcpy_a.share_assign(a); - std::tr1::shared_ptr ptr1 = a.get_ptr_mod(); - std::tr1::shared_ptr ptr2 = shcpy_a.get_ptr_mod(); + std::shared_ptr ptr1 = a.get_ptr_mod(); + std::shared_ptr ptr2 = shcpy_a.get_ptr_mod(); CHECK_MESSAGE(ptr1.get() == ptr2.get(), "shared pointers for moduli aren´t equal"); GFpElement b(1,0); b = a; // create a non shared copy - std::tr1::shared_ptr ptr_b_p = b.get_ptr_mod(); + std::shared_ptr ptr_b_p = b.get_ptr_mod(); CHECK_MESSAGE(ptr1.get() != ptr_b_p.get(), "non shared pointers for moduli are equal"); a.turn_on_sp_red_mul(); @@ -513,15 +513,15 @@ bool test_gfp_shared_vals() } swap(a,shcpy_a); - std::tr1::shared_ptr ptr3 = a.get_ptr_mod(); - std::tr1::shared_ptr ptr4 = shcpy_a.get_ptr_mod(); + std::shared_ptr ptr3 = a.get_ptr_mod(); + std::shared_ptr ptr4 = shcpy_a.get_ptr_mod(); CHECK_MESSAGE(ptr3.get() == ptr4.get(), "shared pointers for moduli aren´t equal after swap"); CHECK(ptr1.get() == ptr4.get()); CHECK(ptr2.get() == ptr3.get()); swap(a,b); - std::tr1::shared_ptr ptr_a = a.get_ptr_mod(); - std::tr1::shared_ptr ptr_b = shcpy_a.get_ptr_mod(); + std::shared_ptr ptr_a = a.get_ptr_mod(); + std::shared_ptr ptr_b = shcpy_a.get_ptr_mod(); CHECK(ptr_a.get() == ptr_b_p.get()); CHECK(ptr_b.get() == ptr3.get()); return pass; diff --git a/src/cert/cvc/cvc_ado.cpp b/src/cert/cvc/cvc_ado.cpp index 19d76fe7f..47c972c72 100644 --- a/src/cert/cvc/cvc_ado.cpp +++ b/src/cert/cvc/cvc_ado.cpp @@ -12,7 +12,7 @@ namespace Botan { -EAC1_1_ADO::EAC1_1_ADO(std::tr1::shared_ptr in) +EAC1_1_ADO::EAC1_1_ADO(std::shared_ptr in) { init(in); do_decode(); @@ -20,7 +20,7 @@ EAC1_1_ADO::EAC1_1_ADO(std::tr1::shared_ptr in) EAC1_1_ADO::EAC1_1_ADO(const std::string& in) { - std::tr1::shared_ptr stream(new DataSource_Stream(in, true)); + std::shared_ptr stream(new DataSource_Stream(in, true)); init(stream); do_decode(); } @@ -41,7 +41,7 @@ void EAC1_1_ADO::force_decode() .end_cons() .get_contents(); - std::tr1::shared_ptr req_source(new DataSource_Memory(req_bits)); + std::shared_ptr req_source(new DataSource_Memory(req_bits)); m_req = EAC1_1_Req(req_source); sig_algo = m_req.sig_algo; } diff --git a/src/cert/cvc/cvc_ado.h b/src/cert/cvc/cvc_ado.h index ef469cc09..dbb4a3f47 100644 --- a/src/cert/cvc/cvc_ado.h +++ b/src/cert/cvc/cvc_ado.h @@ -39,7 +39,7 @@ class BOTAN_DLL EAC1_1_ADO : public EAC1_1_obj * Construct a CVC ADO request from a data source * @param source the data source */ - EAC1_1_ADO(std::tr1::shared_ptr source); + EAC1_1_ADO(std::shared_ptr source); /** * Create a signed CVC ADO request from to be signed (TBS) data diff --git a/src/cert/cvc/cvc_ca.cpp b/src/cert/cvc/cvc_ca.cpp index 7b1c5fcba..20cea9104 100644 --- a/src/cert/cvc/cvc_ca.cpp +++ b/src/cert/cvc/cvc_ca.cpp @@ -38,7 +38,7 @@ EAC1_1_CVC EAC1_1_CVC_CA::make_cert(PK_Signer& signer, EAC1_1_CVC::build_cert_body(tbs), rng); - std::tr1::shared_ptr source(new DataSource_Memory(signed_cert)); + std::shared_ptr source(new DataSource_Memory(signed_cert)); return EAC1_1_CVC(source); } diff --git a/src/cert/cvc/cvc_cert.cpp b/src/cert/cvc/cvc_cert.cpp index 7964b8900..352178fd2 100644 --- a/src/cert/cvc/cvc_cert.cpp +++ b/src/cert/cvc/cvc_cert.cpp @@ -78,7 +78,7 @@ void EAC1_1_CVC::force_decode() /* * CVC Certificate Constructor */ -EAC1_1_CVC::EAC1_1_CVC(std::tr1::shared_ptr& in) +EAC1_1_CVC::EAC1_1_CVC(std::shared_ptr& in) { init(in); self_signed = false; @@ -87,7 +87,7 @@ EAC1_1_CVC::EAC1_1_CVC(std::tr1::shared_ptr& in) EAC1_1_CVC::EAC1_1_CVC(const std::string& in) { - std::tr1::shared_ptr stream(new DataSource_Stream(in, true)); + std::shared_ptr stream(new DataSource_Stream(in, true)); init(stream); self_signed = false; do_decode(); diff --git a/src/cert/cvc/cvc_cert.h b/src/cert/cvc/cvc_cert.h index 17671d332..0bc162c0c 100644 --- a/src/cert/cvc/cvc_cert.h +++ b/src/cert/cvc/cvc_cert.h @@ -59,7 +59,7 @@ class BOTAN_DLL EAC1_1_CVC : public EAC1_1_gen_CVC//Signed_Object * Construct a CVC from a data source * @param source the data source */ - EAC1_1_CVC(std::tr1::shared_ptr& source); + EAC1_1_CVC(std::shared_ptr& source); /** * Construct a CVC from a file diff --git a/src/cert/cvc/cvc_req.cpp b/src/cert/cvc/cvc_req.cpp index c2318dc1b..5b2a2c4d4 100644 --- a/src/cert/cvc/cvc_req.cpp +++ b/src/cert/cvc/cvc_req.cpp @@ -50,7 +50,7 @@ void EAC1_1_Req::force_decode() #endif } -EAC1_1_Req::EAC1_1_Req(std::tr1::shared_ptr in) +EAC1_1_Req::EAC1_1_Req(std::shared_ptr in) { init(in); self_signed = true; @@ -59,7 +59,7 @@ EAC1_1_Req::EAC1_1_Req(std::tr1::shared_ptr in) EAC1_1_Req::EAC1_1_Req(const std::string& in) { - std::tr1::shared_ptr stream(new DataSource_Stream(in, true)); + std::shared_ptr stream(new DataSource_Stream(in, true)); init(stream); self_signed = true; do_decode(); diff --git a/src/cert/cvc/cvc_req.h b/src/cert/cvc/cvc_req.h index 8599f539d..4999c332f 100644 --- a/src/cert/cvc/cvc_req.h +++ b/src/cert/cvc/cvc_req.h @@ -36,7 +36,7 @@ class BOTAN_DLL EAC1_1_Req : public EAC1_1_gen_CVC * Construct a CVC request from a data source. * @param source the data source */ - EAC1_1_Req(std::tr1::shared_ptr source); + EAC1_1_Req(std::shared_ptr source); /** * Construct a CVC request from a DER encoded CVC reqeust file. diff --git a/src/cert/cvc/cvc_self.cpp b/src/cert/cvc/cvc_self.cpp index c31741956..47c46ca1c 100644 --- a/src/cert/cvc/cvc_self.cpp +++ b/src/cert/cvc/cvc_self.cpp @@ -136,7 +136,7 @@ EAC1_1_Req create_cvc_req(Private_Key const& key, EAC1_1_gen_CVC::make_signed(*signer.get(), EAC1_1_gen_CVC::build_cert_body(tbs), rng); - std::tr1::shared_ptr source(new DataSource_Memory(signed_cert)); + std::shared_ptr source(new DataSource_Memory(signed_cert)); return EAC1_1_Req(source); } @@ -160,7 +160,7 @@ EAC1_1_ADO create_ado_req(Private_Key const& key, tbs_bits.append(DER_Encoder().encode(car).get_contents()); MemoryVector signed_cert = EAC1_1_ADO::make_signed(*signer.get(), tbs_bits, rng); - std::tr1::shared_ptr source(new DataSource_Memory(signed_cert)); + std::shared_ptr source(new DataSource_Memory(signed_cert)); return EAC1_1_ADO(source); } diff --git a/src/cert/cvc/freestore.h b/src/cert/cvc/freestore.h index f95afa802..a6f779c78 100644 --- a/src/cert/cvc/freestore.h +++ b/src/cert/cvc/freestore.h @@ -7,14 +7,7 @@ #define BOTAN_FREESTORE_H__ #include - -#if defined(BOTAN_USE_STD_TR1) - #include -#elif defined(BOTAN_USE_BOOST_TR1) - #include -#else - #error "Please choose a TR1 implementation in build.h" -#endif +#include namespace Botan { @@ -30,7 +23,7 @@ template class BOTAN_DLL SharedPtrConverter { public: - typedef std::tr1::shared_ptr SharedPtr; + typedef std::shared_ptr SharedPtr; /** * Construct a null pointer equivalent object. diff --git a/src/math/gfpmath/curve_gfp.cpp b/src/math/gfpmath/curve_gfp.cpp index 37555ea06..54799a076 100644 --- a/src/math/gfpmath/curve_gfp.cpp +++ b/src/math/gfpmath/curve_gfp.cpp @@ -13,7 +13,7 @@ namespace Botan { -void CurveGFp::set_shrd_mod(const std::tr1::shared_ptr mod) +void CurveGFp::set_shrd_mod(const std::shared_ptr mod) { mp_mod = mod; mA.turn_off_sp_red_mul();// m.m. is not needed, must be trf. back @@ -33,7 +33,7 @@ CurveGFp::CurveGFp(const GFpElement& a, const GFpElement& b, { throw Invalid_Argument("could not construct curve: moduli of arguments differ"); } - std::tr1::shared_ptr p_mod = std::tr1::shared_ptr(new GFpModulus(p)); + std::shared_ptr p_mod = std::shared_ptr(new GFpModulus(p)); // the above is the creation of the GFpModuls object which will be shared point-wide // (in the context of a point of course) set_shrd_mod(p_mod); @@ -43,21 +43,21 @@ CurveGFp::CurveGFp(const CurveGFp& other) : mA(other.get_a()), mB(other.get_b()) { - mp_mod = std::tr1::shared_ptr(new GFpModulus(*other.mp_mod)); + mp_mod = std::shared_ptr(new GFpModulus(*other.mp_mod)); assert(mp_mod->p_equal_to(mA.get_p())); assert(mp_mod->p_equal_to(mB.get_p())); set_shrd_mod(mp_mod); if(other.mp_mres_a.get()) { - mp_mres_a = std::tr1::shared_ptr(new GFpElement(*other.mp_mres_a)); + mp_mres_a = std::shared_ptr(new GFpElement(*other.mp_mres_a)); } if(other.mp_mres_b.get()) { - mp_mres_b = std::tr1::shared_ptr(new GFpElement(*other.mp_mres_b)); + mp_mres_b = std::shared_ptr(new GFpElement(*other.mp_mres_b)); } if(other.mp_mres_one.get()) { - mp_mres_one = std::tr1::shared_ptr(new GFpElement(*other.mp_mres_one)); + mp_mres_one = std::shared_ptr(new GFpElement(*other.mp_mres_one)); } } @@ -71,21 +71,21 @@ const CurveGFp& CurveGFp::operator=(const CurveGFp& other) mA.swap(a_tmp); mB.swap(b_tmp); - std::tr1::shared_ptr p_mod = std::tr1::shared_ptr(new GFpModulus(*other.mp_mod)); + std::shared_ptr p_mod = std::shared_ptr(new GFpModulus(*other.mp_mod)); set_shrd_mod(p_mod); // exception safety note: no problem if we have a throw from here on... if(other.mp_mres_a.get()) { - mp_mres_a = std::tr1::shared_ptr(new GFpElement(*other.mp_mres_a)); + mp_mres_a = std::shared_ptr(new GFpElement(*other.mp_mres_a)); } if(other.mp_mres_b.get()) { - mp_mres_b = std::tr1::shared_ptr(new GFpElement(*other.mp_mres_b)); + mp_mres_b = std::shared_ptr(new GFpElement(*other.mp_mres_b)); } if(other.mp_mres_one.get()) { - mp_mres_one = std::tr1::shared_ptr(new GFpElement(*other.mp_mres_one)); + mp_mres_one = std::shared_ptr(new GFpElement(*other.mp_mres_one)); } return *this; } @@ -122,7 +122,7 @@ GFpElement const CurveGFp::get_mres_a() const { if(mp_mres_a.get() == 0) { - mp_mres_a = std::tr1::shared_ptr(new GFpElement(mA)); + mp_mres_a = std::shared_ptr(new GFpElement(mA)); mp_mres_a->turn_on_sp_red_mul(); mp_mres_a->get_mres(); } @@ -133,18 +133,18 @@ GFpElement const CurveGFp::get_mres_b() const { if(mp_mres_b.get() == 0) { - mp_mres_b = std::tr1::shared_ptr(new GFpElement(mB)); + mp_mres_b = std::shared_ptr(new GFpElement(mB)); mp_mres_b->turn_on_sp_red_mul(); mp_mres_b->get_mres(); } return GFpElement(*mp_mres_b); } -std::tr1::shared_ptr const CurveGFp::get_mres_one() const +std::shared_ptr const CurveGFp::get_mres_one() const { if(mp_mres_one.get() == 0) { - mp_mres_one = std::tr1::shared_ptr(new GFpElement(mp_mod->get_p(), 1)); + mp_mres_one = std::shared_ptr(new GFpElement(mp_mod->get_p(), 1)); mp_mres_one->turn_on_sp_red_mul(); mp_mres_one->get_mres(); } diff --git a/src/math/gfpmath/curve_gfp.h b/src/math/gfpmath/curve_gfp.h index 90d64b45d..2c9201560 100644 --- a/src/math/gfpmath/curve_gfp.h +++ b/src/math/gfpmath/curve_gfp.h @@ -57,7 +57,7 @@ class BOTAN_DLL CurveGFp * @param mod a shared pointer to a GFpModulus object suitable for * *this. */ - void set_shrd_mod(const std::tr1::shared_ptr mod); + void set_shrd_mod(const std::shared_ptr mod); // getters @@ -99,14 +99,14 @@ class BOTAN_DLL CurveGFp * function. * @result the GFpElement 1, transformed to its m-residue */ - std::tr1::shared_ptr const get_mres_one() const; + std::shared_ptr const get_mres_one() const; /** * Get prime modulus of the field of the curve * @result prime modulus of the field of the curve */ BigInt const get_p() const; - /*inline std::tr1::shared_ptr const get_ptr_p() const + /*inline std::shared_ptr const get_ptr_p() const { return mp_p; }*/ @@ -119,7 +119,7 @@ class BOTAN_DLL CurveGFp * Do NOT spread pointers to a GFpModulus over different threads! * @result a shared pointer to a GFpModulus object */ - inline std::tr1::shared_ptr const get_ptr_mod() const + inline std::shared_ptr const get_ptr_mod() const { return mp_mod; } @@ -131,12 +131,12 @@ class BOTAN_DLL CurveGFp void swap(CurveGFp& other); private: - std::tr1::shared_ptr mp_mod; + std::shared_ptr mp_mod; GFpElement mA; GFpElement mB; - mutable std::tr1::shared_ptr mp_mres_a; - mutable std::tr1::shared_ptr mp_mres_b; - mutable std::tr1::shared_ptr mp_mres_one; + mutable std::shared_ptr mp_mres_a; + mutable std::shared_ptr mp_mres_b; + mutable std::shared_ptr mp_mres_one; }; // relational operators diff --git a/src/math/gfpmath/gfp_element.cpp b/src/math/gfpmath/gfp_element.cpp index 183d7d4ab..7d7b7f34d 100644 --- a/src/math/gfpmath/gfp_element.cpp +++ b/src/math/gfpmath/gfp_element.cpp @@ -173,13 +173,13 @@ GFpElement::GFpElement(const BigInt& p, const BigInt& value, bool use_montgm) m_is_trf(false) { assert(mp_mod.get() == 0); - mp_mod = std::tr1::shared_ptr(new GFpModulus(p)); + mp_mod = std::shared_ptr(new GFpModulus(p)); assert(mp_mod->m_p_dash == 0); if(m_use_montgm) ensure_montgm_precomp(); } -GFpElement::GFpElement(std::tr1::shared_ptr const mod, const BigInt& value, bool use_montgm) +GFpElement::GFpElement(std::shared_ptr const mod, const BigInt& value, bool use_montgm) : mp_mod(), m_value(value % mod->m_p), m_use_montgm(use_montgm), @@ -246,7 +246,7 @@ void GFpElement::ensure_montgm_precomp() const } -void GFpElement::set_shrd_mod(std::tr1::shared_ptr const p_mod) +void GFpElement::set_shrd_mod(std::shared_ptr const p_mod) { mp_mod = p_mod; } diff --git a/src/math/gfpmath/gfp_element.h b/src/math/gfpmath/gfp_element.h index 0a1b4910c..1ee0be0ba 100644 --- a/src/math/gfpmath/gfp_element.h +++ b/src/math/gfpmath/gfp_element.h @@ -15,14 +15,7 @@ #include #include #include - -#if defined(BOTAN_USE_STD_TR1) - #include -#elif defined(BOTAN_USE_BOOST_TR1) - #include -#else - #error "Please choose a TR1 implementation in build.h" -#endif +#include namespace Botan { @@ -40,7 +33,7 @@ struct Illegal_Transformation : public Exception class BOTAN_DLL GFpElement { private: - std::tr1::shared_ptr mp_mod; + std::shared_ptr mp_mod; mutable BigInt m_value; // ordinary residue or m-residue respectively mutable BigInt workspace; @@ -79,7 +72,7 @@ class BOTAN_DLL GFpElement * @param value the element value * @param use_montgm whether this object will use Montgomery multiplication */ - explicit GFpElement(std::tr1::shared_ptr const mod, + explicit GFpElement(std::shared_ptr const mod, const BigInt& value, bool use_mongm = false); /** @@ -190,7 +183,7 @@ class BOTAN_DLL GFpElement * the shared GFpModulus objects! * @result the shared pointer to the GFpModulus of *this */ - inline std::tr1::shared_ptr const get_ptr_mod() const + inline std::shared_ptr const get_ptr_mod() const { return mp_mod; } @@ -203,7 +196,7 @@ class BOTAN_DLL GFpElement * the shared GFpModulus objects! * @param mod a shared pointer to a GFpModulus that will be held in *this */ - void set_shrd_mod(std::tr1::shared_ptr const mod); + void set_shrd_mod(std::shared_ptr const mod); /** * Tells whether this GFpElement is currently transformed to it´ m-residue, diff --git a/src/math/gfpmath/point_gfp.cpp b/src/math/gfpmath/point_gfp.cpp index 9139c3ef9..c997ac525 100644 --- a/src/math/gfpmath/point_gfp.cpp +++ b/src/math/gfpmath/point_gfp.cpp @@ -109,7 +109,7 @@ const PointGFp& PointGFp::assign_within_same_curve(PointGFp const& other) return *this; } -void PointGFp::set_shrd_mod(std::tr1::shared_ptr p_mod) +void PointGFp::set_shrd_mod(std::shared_ptr p_mod) { mX.set_shrd_mod(p_mod); mY.set_shrd_mod(p_mod); @@ -133,7 +133,7 @@ void PointGFp::ensure_worksp() const } } - mp_worksp_gfp_el = std::tr1::shared_ptr >(new std::vector); + mp_worksp_gfp_el = std::shared_ptr >(new std::vector); mp_worksp_gfp_el->reserve(9); for (u32bit i=0; iturn_on_sp_red_mul(); - std::tr1::shared_ptr H(new PointGFp(this->mC)); - std::tr1::shared_ptr tmp; // used for AADA + std::shared_ptr H(new PointGFp(this->mC)); + std::shared_ptr tmp; // used for AADA PointGFp P(*this); BigInt m(scalar); @@ -477,15 +477,15 @@ PointGFp& PointGFp::operator*=(const BigInt& scalar) return *this; } -inline std::tr1::shared_ptr PointGFp::mult_loop(int l, +inline std::shared_ptr PointGFp::mult_loop(int l, const BigInt& m, - std::tr1::shared_ptr H, - std::tr1::shared_ptr tmp, + std::shared_ptr H, + std::shared_ptr tmp, const PointGFp& P) { //assert(l >= (int)m.bits()- 1); tmp = H; - std::tr1::shared_ptr to_add(new PointGFp(P)); // we just need some point + std::shared_ptr to_add(new PointGFp(P)); // we just need some point // so that we can use op= // inside the loop for (int i=l; i >=0; i--) diff --git a/src/math/gfpmath/point_gfp.h b/src/math/gfpmath/point_gfp.h index 771605efc..b001bbbad 100644 --- a/src/math/gfpmath/point_gfp.h +++ b/src/math/gfpmath/point_gfp.h @@ -234,7 +234,7 @@ class BOTAN_DLL PointGFp * @param mod a shared pointer to a GFpModulus that will * be held in the members *this */ - void set_shrd_mod(std::tr1::shared_ptr p_mod); + void set_shrd_mod(std::shared_ptr p_mod); static GFpElement decompress(bool yMod2, GFpElement const& x, const CurveGFp& curve); @@ -242,9 +242,9 @@ class BOTAN_DLL PointGFp static const u32bit GFPEL_WKSP_SIZE = 9; void ensure_worksp() const; - inline std::tr1::shared_ptr mult_loop(int l, const BigInt& m, - std::tr1::shared_ptr H, - std::tr1::shared_ptr tmp, + inline std::shared_ptr mult_loop(int l, const BigInt& m, + std::shared_ptr H, + std::shared_ptr tmp, const PointGFp& P); CurveGFp mC; @@ -257,7 +257,7 @@ class BOTAN_DLL PointGFp mutable bool mZpow2_set; mutable bool mZpow3_set; mutable bool mAZpow4_set; - mutable std::tr1::shared_ptr > mp_worksp_gfp_el; + mutable std::shared_ptr > mp_worksp_gfp_el; }; -- cgit v1.2.3 From 7f715b77711f55d9e30f232ff32001fe9e375a56 Mon Sep 17 00:00:00 2001 From: lloyd Date: Fri, 3 Jul 2009 04:45:58 +0000 Subject: Move mutex from Attic to src to deal with merge conflict --- Attic/mutex/noop_mutex/info.txt | 10 ----- Attic/mutex/noop_mutex/mux_noop.cpp | 50 ------------------------ Attic/mutex/noop_mutex/mux_noop.h | 26 ------------- Attic/mutex/pthreads/info.txt | 29 -------------- Attic/mutex/pthreads/mux_pthr.cpp | 58 ---------------------------- Attic/mutex/pthreads/mux_pthr.h | 26 ------------- Attic/mutex/qt_mutex/info.txt | 18 --------- Attic/mutex/qt_mutex/mux_qt.cpp | 35 ----------------- Attic/mutex/qt_mutex/mux_qt.h | 27 ------------- Attic/mutex/win32_crit_section/info.txt | 17 -------- Attic/mutex/win32_crit_section/mux_win32.cpp | 34 ---------------- Attic/mutex/win32_crit_section/mux_win32.h | 26 ------------- src/mutex/noop_mutex/info.txt | 10 +++++ src/mutex/noop_mutex/mux_noop.cpp | 50 ++++++++++++++++++++++++ src/mutex/noop_mutex/mux_noop.h | 26 +++++++++++++ src/mutex/pthreads/info.txt | 29 ++++++++++++++ src/mutex/pthreads/mux_pthr.cpp | 58 ++++++++++++++++++++++++++++ src/mutex/pthreads/mux_pthr.h | 26 +++++++++++++ src/mutex/qt_mutex/info.txt | 18 +++++++++ src/mutex/qt_mutex/mux_qt.cpp | 35 +++++++++++++++++ src/mutex/qt_mutex/mux_qt.h | 27 +++++++++++++ src/mutex/win32_crit_section/info.txt | 17 ++++++++ src/mutex/win32_crit_section/mux_win32.cpp | 34 ++++++++++++++++ src/mutex/win32_crit_section/mux_win32.h | 26 +++++++++++++ 24 files changed, 356 insertions(+), 356 deletions(-) delete mode 100644 Attic/mutex/noop_mutex/info.txt delete mode 100644 Attic/mutex/noop_mutex/mux_noop.cpp delete mode 100644 Attic/mutex/noop_mutex/mux_noop.h delete mode 100644 Attic/mutex/pthreads/info.txt delete mode 100644 Attic/mutex/pthreads/mux_pthr.cpp delete mode 100644 Attic/mutex/pthreads/mux_pthr.h delete mode 100644 Attic/mutex/qt_mutex/info.txt delete mode 100644 Attic/mutex/qt_mutex/mux_qt.cpp delete mode 100644 Attic/mutex/qt_mutex/mux_qt.h delete mode 100644 Attic/mutex/win32_crit_section/info.txt delete mode 100644 Attic/mutex/win32_crit_section/mux_win32.cpp delete mode 100644 Attic/mutex/win32_crit_section/mux_win32.h create mode 100644 src/mutex/noop_mutex/info.txt create mode 100644 src/mutex/noop_mutex/mux_noop.cpp create mode 100644 src/mutex/noop_mutex/mux_noop.h create mode 100644 src/mutex/pthreads/info.txt create mode 100644 src/mutex/pthreads/mux_pthr.cpp create mode 100644 src/mutex/pthreads/mux_pthr.h create mode 100644 src/mutex/qt_mutex/info.txt create mode 100644 src/mutex/qt_mutex/mux_qt.cpp create mode 100644 src/mutex/qt_mutex/mux_qt.h create mode 100644 src/mutex/win32_crit_section/info.txt create mode 100644 src/mutex/win32_crit_section/mux_win32.cpp create mode 100644 src/mutex/win32_crit_section/mux_win32.h diff --git a/Attic/mutex/noop_mutex/info.txt b/Attic/mutex/noop_mutex/info.txt deleted file mode 100644 index 1f49f5e1c..000000000 --- a/Attic/mutex/noop_mutex/info.txt +++ /dev/null @@ -1,10 +0,0 @@ -realname "No-Op Mutex" - -load_on auto - -define MUTEX_NOOP - - -mux_noop.cpp -mux_noop.h - diff --git a/Attic/mutex/noop_mutex/mux_noop.cpp b/Attic/mutex/noop_mutex/mux_noop.cpp deleted file mode 100644 index 5c45084fe..000000000 --- a/Attic/mutex/noop_mutex/mux_noop.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* -* No-Op Mutex Factory -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include - -namespace Botan { - -/* -* No-Op Mutex Factory -*/ -Mutex* Noop_Mutex_Factory::make() - { - class Noop_Mutex : public Mutex - { - public: - class Mutex_State_Error : public Internal_Error - { - public: - Mutex_State_Error(const std::string& where) : - Internal_Error("Noop_Mutex::" + where + ": " + - "Mutex is already " + where + "ed") {} - }; - - void lock() - { - if(locked) - throw Mutex_State_Error("lock"); - locked = true; - } - - void unlock() - { - if(!locked) - throw Mutex_State_Error("unlock"); - locked = false; - } - - Noop_Mutex() { locked = false; } - private: - bool locked; - }; - - return new Noop_Mutex; - } - -} diff --git a/Attic/mutex/noop_mutex/mux_noop.h b/Attic/mutex/noop_mutex/mux_noop.h deleted file mode 100644 index 94201cb7c..000000000 --- a/Attic/mutex/noop_mutex/mux_noop.h +++ /dev/null @@ -1,26 +0,0 @@ -/* -* No-Op Mutex Factory -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_NOOP_MUTEX_FACTORY_H__ -#define BOTAN_NOOP_MUTEX_FACTORY_H__ - -#include - -namespace Botan { - -/* -* No-Op Mutex Factory -*/ -class BOTAN_DLL Noop_Mutex_Factory : public Mutex_Factory - { - public: - Mutex* make(); - }; - -} - -#endif diff --git a/Attic/mutex/pthreads/info.txt b/Attic/mutex/pthreads/info.txt deleted file mode 100644 index 88de70de0..000000000 --- a/Attic/mutex/pthreads/info.txt +++ /dev/null @@ -1,29 +0,0 @@ -realname "Pthread Mutex" - -define MUTEX_PTHREAD - -load_on auto - - -mux_pthr.cpp -mux_pthr.h - - - -all!qnx,freebsd,openbsd,netbsd -> pthread - - - -aix -cygwin -darwin -freebsd -hpux -irix -linux -netbsd -openbsd -qnx -solaris -tru64 - diff --git a/Attic/mutex/pthreads/mux_pthr.cpp b/Attic/mutex/pthreads/mux_pthr.cpp deleted file mode 100644 index 9f1d9816e..000000000 --- a/Attic/mutex/pthreads/mux_pthr.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* -* Pthread Mutex -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include -#include - -#ifndef _POSIX_C_SOURCE - #define _POSIX_C_SOURCE 199506 -#endif - -#include - -namespace Botan { - -/* -* Pthread Mutex Factory -*/ -Mutex* Pthread_Mutex_Factory::make() - { - - class Pthread_Mutex : public Mutex - { - public: - void lock() - { - if(pthread_mutex_lock(&mutex) != 0) - throw Exception("Pthread_Mutex::lock: Error occured"); - } - - void unlock() - { - if(pthread_mutex_unlock(&mutex) != 0) - throw Exception("Pthread_Mutex::unlock: Error occured"); - } - - Pthread_Mutex() - { - if(pthread_mutex_init(&mutex, 0) != 0) - throw Exception("Pthread_Mutex: initialization failed"); - } - - ~Pthread_Mutex() - { - if(pthread_mutex_destroy(&mutex) != 0) - throw Invalid_State("~Pthread_Mutex: mutex is still locked"); - } - private: - pthread_mutex_t mutex; - }; - - return new Pthread_Mutex(); - } - -} diff --git a/Attic/mutex/pthreads/mux_pthr.h b/Attic/mutex/pthreads/mux_pthr.h deleted file mode 100644 index 118853947..000000000 --- a/Attic/mutex/pthreads/mux_pthr.h +++ /dev/null @@ -1,26 +0,0 @@ -/* -* Pthread Mutex -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_MUTEX_PTHREAD_H__ -#define BOTAN_MUTEX_PTHREAD_H__ - -#include - -namespace Botan { - -/* -* Pthread Mutex Factory -*/ -class BOTAN_DLL Pthread_Mutex_Factory : public Mutex_Factory - { - public: - Mutex* make(); - }; - -} - -#endif diff --git a/Attic/mutex/qt_mutex/info.txt b/Attic/mutex/qt_mutex/info.txt deleted file mode 100644 index a21108c79..000000000 --- a/Attic/mutex/qt_mutex/info.txt +++ /dev/null @@ -1,18 +0,0 @@ -realname "Qt Mutex" - -define MUTEX_QT - -note "You'll probably have to add -I/-L flags to the Makefile to find Qt" - -load_on request - - -mux_qt.cpp -mux_qt.h - - -# I think we want to always use qt-mt, not qt -- not much point in supporting -# mutexes in a single threaded application, after all. - -all -> qt-mt - diff --git a/Attic/mutex/qt_mutex/mux_qt.cpp b/Attic/mutex/qt_mutex/mux_qt.cpp deleted file mode 100644 index 0f670c8b4..000000000 --- a/Attic/mutex/qt_mutex/mux_qt.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* -* Qt Thread Mutex -* (C) 2004-2007 Justin Karneges -* 2004-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include -#include - -#if !defined(QT_THREAD_SUPPORT) - #error Your version of Qt does not support threads or mutexes -#endif - -namespace Botan { - -/* -* Qt Mutex Factory -*/ -Mutex* Qt_Mutex_Factory::make() - { - class Qt_Mutex : public Mutex - { - public: - void lock() { mutex.lock(); } - void unlock() { mutex.unlock(); } - private: - QMutex mutex; - }; - - return new Qt_Mutex(); - } - -} diff --git a/Attic/mutex/qt_mutex/mux_qt.h b/Attic/mutex/qt_mutex/mux_qt.h deleted file mode 100644 index 5aed77f4b..000000000 --- a/Attic/mutex/qt_mutex/mux_qt.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -* Qt Mutex -* (C) 2004-2007 Justin Karneges -* 2004-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_MUTEX_QT_H__ -#define BOTAN_MUTEX_QT_H__ - -#include - -namespace Botan { - -/* -* Qt Mutex -*/ -class BOTAN_DLL Qt_Mutex_Factory : public Mutex_Factory - { - public: - Mutex* make(); - }; - -} - -#endif diff --git a/Attic/mutex/win32_crit_section/info.txt b/Attic/mutex/win32_crit_section/info.txt deleted file mode 100644 index a2d339c3b..000000000 --- a/Attic/mutex/win32_crit_section/info.txt +++ /dev/null @@ -1,17 +0,0 @@ -realname "Win32 Mutex" - -define MUTEX_WIN32 -modset win32 - -load_on auto - - -mux_win32.cpp -mux_win32.h - - - -cygwin -windows -mingw - diff --git a/Attic/mutex/win32_crit_section/mux_win32.cpp b/Attic/mutex/win32_crit_section/mux_win32.cpp deleted file mode 100644 index 2a967892b..000000000 --- a/Attic/mutex/win32_crit_section/mux_win32.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/* -* Win32 Mutex -* (C) 2006 Luca Piccarreta -* 2006-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include -#include - -namespace Botan { - -/* -* Win32 Mutex Factory -*/ -Mutex* Win32_Mutex_Factory::make() - { - class Win32_Mutex : public Mutex - { - public: - void lock() { EnterCriticalSection(&mutex); } - void unlock() { LeaveCriticalSection(&mutex); } - - Win32_Mutex() { InitializeCriticalSection(&mutex); } - ~Win32_Mutex() { DeleteCriticalSection(&mutex); } - private: - CRITICAL_SECTION mutex; - }; - - return new Win32_Mutex(); - } - -} diff --git a/Attic/mutex/win32_crit_section/mux_win32.h b/Attic/mutex/win32_crit_section/mux_win32.h deleted file mode 100644 index a91850e71..000000000 --- a/Attic/mutex/win32_crit_section/mux_win32.h +++ /dev/null @@ -1,26 +0,0 @@ -/* -* Win32 Mutex -* (C) 2006 Luca Piccarreta -* 2006-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_MUTEX_WIN32_H__ -#define BOTAN_MUTEX_WIN32_H__ - -#include - -namespace Botan { - -/* -* Win32 Mutex Factory -*/ -class BOTAN_DLL Win32_Mutex_Factory : public Mutex_Factory - { - public: - Mutex* make(); - }; -} - -#endif diff --git a/src/mutex/noop_mutex/info.txt b/src/mutex/noop_mutex/info.txt new file mode 100644 index 000000000..1f49f5e1c --- /dev/null +++ b/src/mutex/noop_mutex/info.txt @@ -0,0 +1,10 @@ +realname "No-Op Mutex" + +load_on auto + +define MUTEX_NOOP + + +mux_noop.cpp +mux_noop.h + diff --git a/src/mutex/noop_mutex/mux_noop.cpp b/src/mutex/noop_mutex/mux_noop.cpp new file mode 100644 index 000000000..5c45084fe --- /dev/null +++ b/src/mutex/noop_mutex/mux_noop.cpp @@ -0,0 +1,50 @@ +/* +* No-Op Mutex Factory +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include + +namespace Botan { + +/* +* No-Op Mutex Factory +*/ +Mutex* Noop_Mutex_Factory::make() + { + class Noop_Mutex : public Mutex + { + public: + class Mutex_State_Error : public Internal_Error + { + public: + Mutex_State_Error(const std::string& where) : + Internal_Error("Noop_Mutex::" + where + ": " + + "Mutex is already " + where + "ed") {} + }; + + void lock() + { + if(locked) + throw Mutex_State_Error("lock"); + locked = true; + } + + void unlock() + { + if(!locked) + throw Mutex_State_Error("unlock"); + locked = false; + } + + Noop_Mutex() { locked = false; } + private: + bool locked; + }; + + return new Noop_Mutex; + } + +} diff --git a/src/mutex/noop_mutex/mux_noop.h b/src/mutex/noop_mutex/mux_noop.h new file mode 100644 index 000000000..94201cb7c --- /dev/null +++ b/src/mutex/noop_mutex/mux_noop.h @@ -0,0 +1,26 @@ +/* +* No-Op Mutex Factory +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_NOOP_MUTEX_FACTORY_H__ +#define BOTAN_NOOP_MUTEX_FACTORY_H__ + +#include + +namespace Botan { + +/* +* No-Op Mutex Factory +*/ +class BOTAN_DLL Noop_Mutex_Factory : public Mutex_Factory + { + public: + Mutex* make(); + }; + +} + +#endif diff --git a/src/mutex/pthreads/info.txt b/src/mutex/pthreads/info.txt new file mode 100644 index 000000000..88de70de0 --- /dev/null +++ b/src/mutex/pthreads/info.txt @@ -0,0 +1,29 @@ +realname "Pthread Mutex" + +define MUTEX_PTHREAD + +load_on auto + + +mux_pthr.cpp +mux_pthr.h + + + +all!qnx,freebsd,openbsd,netbsd -> pthread + + + +aix +cygwin +darwin +freebsd +hpux +irix +linux +netbsd +openbsd +qnx +solaris +tru64 + diff --git a/src/mutex/pthreads/mux_pthr.cpp b/src/mutex/pthreads/mux_pthr.cpp new file mode 100644 index 000000000..9f1d9816e --- /dev/null +++ b/src/mutex/pthreads/mux_pthr.cpp @@ -0,0 +1,58 @@ +/* +* Pthread Mutex +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include +#include + +#ifndef _POSIX_C_SOURCE + #define _POSIX_C_SOURCE 199506 +#endif + +#include + +namespace Botan { + +/* +* Pthread Mutex Factory +*/ +Mutex* Pthread_Mutex_Factory::make() + { + + class Pthread_Mutex : public Mutex + { + public: + void lock() + { + if(pthread_mutex_lock(&mutex) != 0) + throw Exception("Pthread_Mutex::lock: Error occured"); + } + + void unlock() + { + if(pthread_mutex_unlock(&mutex) != 0) + throw Exception("Pthread_Mutex::unlock: Error occured"); + } + + Pthread_Mutex() + { + if(pthread_mutex_init(&mutex, 0) != 0) + throw Exception("Pthread_Mutex: initialization failed"); + } + + ~Pthread_Mutex() + { + if(pthread_mutex_destroy(&mutex) != 0) + throw Invalid_State("~Pthread_Mutex: mutex is still locked"); + } + private: + pthread_mutex_t mutex; + }; + + return new Pthread_Mutex(); + } + +} diff --git a/src/mutex/pthreads/mux_pthr.h b/src/mutex/pthreads/mux_pthr.h new file mode 100644 index 000000000..118853947 --- /dev/null +++ b/src/mutex/pthreads/mux_pthr.h @@ -0,0 +1,26 @@ +/* +* Pthread Mutex +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_MUTEX_PTHREAD_H__ +#define BOTAN_MUTEX_PTHREAD_H__ + +#include + +namespace Botan { + +/* +* Pthread Mutex Factory +*/ +class BOTAN_DLL Pthread_Mutex_Factory : public Mutex_Factory + { + public: + Mutex* make(); + }; + +} + +#endif diff --git a/src/mutex/qt_mutex/info.txt b/src/mutex/qt_mutex/info.txt new file mode 100644 index 000000000..a21108c79 --- /dev/null +++ b/src/mutex/qt_mutex/info.txt @@ -0,0 +1,18 @@ +realname "Qt Mutex" + +define MUTEX_QT + +note "You'll probably have to add -I/-L flags to the Makefile to find Qt" + +load_on request + + +mux_qt.cpp +mux_qt.h + + +# I think we want to always use qt-mt, not qt -- not much point in supporting +# mutexes in a single threaded application, after all. + +all -> qt-mt + diff --git a/src/mutex/qt_mutex/mux_qt.cpp b/src/mutex/qt_mutex/mux_qt.cpp new file mode 100644 index 000000000..0f670c8b4 --- /dev/null +++ b/src/mutex/qt_mutex/mux_qt.cpp @@ -0,0 +1,35 @@ +/* +* Qt Thread Mutex +* (C) 2004-2007 Justin Karneges +* 2004-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include +#include + +#if !defined(QT_THREAD_SUPPORT) + #error Your version of Qt does not support threads or mutexes +#endif + +namespace Botan { + +/* +* Qt Mutex Factory +*/ +Mutex* Qt_Mutex_Factory::make() + { + class Qt_Mutex : public Mutex + { + public: + void lock() { mutex.lock(); } + void unlock() { mutex.unlock(); } + private: + QMutex mutex; + }; + + return new Qt_Mutex(); + } + +} diff --git a/src/mutex/qt_mutex/mux_qt.h b/src/mutex/qt_mutex/mux_qt.h new file mode 100644 index 000000000..5aed77f4b --- /dev/null +++ b/src/mutex/qt_mutex/mux_qt.h @@ -0,0 +1,27 @@ +/* +* Qt Mutex +* (C) 2004-2007 Justin Karneges +* 2004-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_MUTEX_QT_H__ +#define BOTAN_MUTEX_QT_H__ + +#include + +namespace Botan { + +/* +* Qt Mutex +*/ +class BOTAN_DLL Qt_Mutex_Factory : public Mutex_Factory + { + public: + Mutex* make(); + }; + +} + +#endif diff --git a/src/mutex/win32_crit_section/info.txt b/src/mutex/win32_crit_section/info.txt new file mode 100644 index 000000000..a2d339c3b --- /dev/null +++ b/src/mutex/win32_crit_section/info.txt @@ -0,0 +1,17 @@ +realname "Win32 Mutex" + +define MUTEX_WIN32 +modset win32 + +load_on auto + + +mux_win32.cpp +mux_win32.h + + + +cygwin +windows +mingw + diff --git a/src/mutex/win32_crit_section/mux_win32.cpp b/src/mutex/win32_crit_section/mux_win32.cpp new file mode 100644 index 000000000..2a967892b --- /dev/null +++ b/src/mutex/win32_crit_section/mux_win32.cpp @@ -0,0 +1,34 @@ +/* +* Win32 Mutex +* (C) 2006 Luca Piccarreta +* 2006-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include +#include + +namespace Botan { + +/* +* Win32 Mutex Factory +*/ +Mutex* Win32_Mutex_Factory::make() + { + class Win32_Mutex : public Mutex + { + public: + void lock() { EnterCriticalSection(&mutex); } + void unlock() { LeaveCriticalSection(&mutex); } + + Win32_Mutex() { InitializeCriticalSection(&mutex); } + ~Win32_Mutex() { DeleteCriticalSection(&mutex); } + private: + CRITICAL_SECTION mutex; + }; + + return new Win32_Mutex(); + } + +} diff --git a/src/mutex/win32_crit_section/mux_win32.h b/src/mutex/win32_crit_section/mux_win32.h new file mode 100644 index 000000000..a91850e71 --- /dev/null +++ b/src/mutex/win32_crit_section/mux_win32.h @@ -0,0 +1,26 @@ +/* +* Win32 Mutex +* (C) 2006 Luca Piccarreta +* 2006-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_MUTEX_WIN32_H__ +#define BOTAN_MUTEX_WIN32_H__ + +#include + +namespace Botan { + +/* +* Win32 Mutex Factory +*/ +class BOTAN_DLL Win32_Mutex_Factory : public Mutex_Factory + { + public: + Mutex* make(); + }; +} + +#endif -- cgit v1.2.3 From ce5cab439b617800f48c94ebaeeb7cd3bd786cfe Mon Sep 17 00:00:00 2001 From: lloyd Date: Fri, 3 Jul 2009 04:46:44 +0000 Subject: Move mutex.h to src/mutex (from Attic) --- Attic/mutex.h | 56 ------------------------------------------------------- src/mutex/mutex.h | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 56 deletions(-) delete mode 100644 Attic/mutex.h create mode 100644 src/mutex/mutex.h diff --git a/Attic/mutex.h b/Attic/mutex.h deleted file mode 100644 index a04ff83c9..000000000 --- a/Attic/mutex.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -* Mutex -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_MUTEX_H__ -#define BOTAN_MUTEX_H__ - -#include - -namespace Botan { - -/* -* Mutex Base Class -*/ -class BOTAN_DLL Mutex - { - public: - virtual void lock() = 0; - virtual void unlock() = 0; - virtual ~Mutex() {} - }; - -/* -* Mutex Factory -*/ -class BOTAN_DLL Mutex_Factory - { - public: - virtual Mutex* make() = 0; - virtual ~Mutex_Factory() {} - }; - -/* -* Mutex Holding Class -*/ -class BOTAN_DLL Mutex_Holder - { - public: - Mutex_Holder(Mutex* m) : mux(m) - { - if(!mux) - throw Invalid_Argument("Mutex_Holder: Argument was NULL"); - mux->lock(); - } - - ~Mutex_Holder() { mux->unlock(); } - private: - Mutex* mux; - }; - -} - -#endif diff --git a/src/mutex/mutex.h b/src/mutex/mutex.h new file mode 100644 index 000000000..a04ff83c9 --- /dev/null +++ b/src/mutex/mutex.h @@ -0,0 +1,56 @@ +/* +* Mutex +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_MUTEX_H__ +#define BOTAN_MUTEX_H__ + +#include + +namespace Botan { + +/* +* Mutex Base Class +*/ +class BOTAN_DLL Mutex + { + public: + virtual void lock() = 0; + virtual void unlock() = 0; + virtual ~Mutex() {} + }; + +/* +* Mutex Factory +*/ +class BOTAN_DLL Mutex_Factory + { + public: + virtual Mutex* make() = 0; + virtual ~Mutex_Factory() {} + }; + +/* +* Mutex Holding Class +*/ +class BOTAN_DLL Mutex_Holder + { + public: + Mutex_Holder(Mutex* m) : mux(m) + { + if(!mux) + throw Invalid_Argument("Mutex_Holder: Argument was NULL"); + mux->lock(); + } + + ~Mutex_Holder() { mux->unlock(); } + private: + Mutex* mux; + }; + +} + +#endif -- cgit v1.2.3 From b438a3c6d08893ca77a1d18baef1b02e955eccf8 Mon Sep 17 00:00:00 2001 From: lloyd Date: Fri, 3 Jul 2009 04:47:49 +0000 Subject: Move mutex directory back to the Attic --- Attic/mutex/info.txt | 9 +++++ Attic/mutex/mutex.h | 56 +++++++++++++++++++++++++++ Attic/mutex/noop_mutex/info.txt | 10 +++++ Attic/mutex/noop_mutex/mux_noop.cpp | 50 ++++++++++++++++++++++++ Attic/mutex/noop_mutex/mux_noop.h | 26 +++++++++++++ Attic/mutex/pthreads/info.txt | 29 ++++++++++++++ Attic/mutex/pthreads/mux_pthr.cpp | 58 ++++++++++++++++++++++++++++ Attic/mutex/pthreads/mux_pthr.h | 26 +++++++++++++ Attic/mutex/qt_mutex/info.txt | 18 +++++++++ Attic/mutex/qt_mutex/mux_qt.cpp | 35 +++++++++++++++++ Attic/mutex/qt_mutex/mux_qt.h | 27 +++++++++++++ Attic/mutex/win32_crit_section/info.txt | 17 ++++++++ Attic/mutex/win32_crit_section/mux_win32.cpp | 34 ++++++++++++++++ Attic/mutex/win32_crit_section/mux_win32.h | 26 +++++++++++++ src/mutex/info.txt | 9 ----- src/mutex/mutex.h | 56 --------------------------- src/mutex/noop_mutex/info.txt | 10 ----- src/mutex/noop_mutex/mux_noop.cpp | 50 ------------------------ src/mutex/noop_mutex/mux_noop.h | 26 ------------- src/mutex/pthreads/info.txt | 29 -------------- src/mutex/pthreads/mux_pthr.cpp | 58 ---------------------------- src/mutex/pthreads/mux_pthr.h | 26 ------------- src/mutex/qt_mutex/info.txt | 18 --------- src/mutex/qt_mutex/mux_qt.cpp | 35 ----------------- src/mutex/qt_mutex/mux_qt.h | 27 ------------- src/mutex/win32_crit_section/info.txt | 17 -------- src/mutex/win32_crit_section/mux_win32.cpp | 34 ---------------- src/mutex/win32_crit_section/mux_win32.h | 26 ------------- 28 files changed, 421 insertions(+), 421 deletions(-) create mode 100644 Attic/mutex/info.txt create mode 100644 Attic/mutex/mutex.h create mode 100644 Attic/mutex/noop_mutex/info.txt create mode 100644 Attic/mutex/noop_mutex/mux_noop.cpp create mode 100644 Attic/mutex/noop_mutex/mux_noop.h create mode 100644 Attic/mutex/pthreads/info.txt create mode 100644 Attic/mutex/pthreads/mux_pthr.cpp create mode 100644 Attic/mutex/pthreads/mux_pthr.h create mode 100644 Attic/mutex/qt_mutex/info.txt create mode 100644 Attic/mutex/qt_mutex/mux_qt.cpp create mode 100644 Attic/mutex/qt_mutex/mux_qt.h create mode 100644 Attic/mutex/win32_crit_section/info.txt create mode 100644 Attic/mutex/win32_crit_section/mux_win32.cpp create mode 100644 Attic/mutex/win32_crit_section/mux_win32.h delete mode 100644 src/mutex/info.txt delete mode 100644 src/mutex/mutex.h delete mode 100644 src/mutex/noop_mutex/info.txt delete mode 100644 src/mutex/noop_mutex/mux_noop.cpp delete mode 100644 src/mutex/noop_mutex/mux_noop.h delete mode 100644 src/mutex/pthreads/info.txt delete mode 100644 src/mutex/pthreads/mux_pthr.cpp delete mode 100644 src/mutex/pthreads/mux_pthr.h delete mode 100644 src/mutex/qt_mutex/info.txt delete mode 100644 src/mutex/qt_mutex/mux_qt.cpp delete mode 100644 src/mutex/qt_mutex/mux_qt.h delete mode 100644 src/mutex/win32_crit_section/info.txt delete mode 100644 src/mutex/win32_crit_section/mux_win32.cpp delete mode 100644 src/mutex/win32_crit_section/mux_win32.h diff --git a/Attic/mutex/info.txt b/Attic/mutex/info.txt new file mode 100644 index 000000000..ff79bf753 --- /dev/null +++ b/Attic/mutex/info.txt @@ -0,0 +1,9 @@ +realname "Mutex Wrappers" + +define MUTEX_WRAPPERS + +load_on auto + + +mutex.h + diff --git a/Attic/mutex/mutex.h b/Attic/mutex/mutex.h new file mode 100644 index 000000000..a04ff83c9 --- /dev/null +++ b/Attic/mutex/mutex.h @@ -0,0 +1,56 @@ +/* +* Mutex +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_MUTEX_H__ +#define BOTAN_MUTEX_H__ + +#include + +namespace Botan { + +/* +* Mutex Base Class +*/ +class BOTAN_DLL Mutex + { + public: + virtual void lock() = 0; + virtual void unlock() = 0; + virtual ~Mutex() {} + }; + +/* +* Mutex Factory +*/ +class BOTAN_DLL Mutex_Factory + { + public: + virtual Mutex* make() = 0; + virtual ~Mutex_Factory() {} + }; + +/* +* Mutex Holding Class +*/ +class BOTAN_DLL Mutex_Holder + { + public: + Mutex_Holder(Mutex* m) : mux(m) + { + if(!mux) + throw Invalid_Argument("Mutex_Holder: Argument was NULL"); + mux->lock(); + } + + ~Mutex_Holder() { mux->unlock(); } + private: + Mutex* mux; + }; + +} + +#endif diff --git a/Attic/mutex/noop_mutex/info.txt b/Attic/mutex/noop_mutex/info.txt new file mode 100644 index 000000000..1f49f5e1c --- /dev/null +++ b/Attic/mutex/noop_mutex/info.txt @@ -0,0 +1,10 @@ +realname "No-Op Mutex" + +load_on auto + +define MUTEX_NOOP + + +mux_noop.cpp +mux_noop.h + diff --git a/Attic/mutex/noop_mutex/mux_noop.cpp b/Attic/mutex/noop_mutex/mux_noop.cpp new file mode 100644 index 000000000..5c45084fe --- /dev/null +++ b/Attic/mutex/noop_mutex/mux_noop.cpp @@ -0,0 +1,50 @@ +/* +* No-Op Mutex Factory +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include + +namespace Botan { + +/* +* No-Op Mutex Factory +*/ +Mutex* Noop_Mutex_Factory::make() + { + class Noop_Mutex : public Mutex + { + public: + class Mutex_State_Error : public Internal_Error + { + public: + Mutex_State_Error(const std::string& where) : + Internal_Error("Noop_Mutex::" + where + ": " + + "Mutex is already " + where + "ed") {} + }; + + void lock() + { + if(locked) + throw Mutex_State_Error("lock"); + locked = true; + } + + void unlock() + { + if(!locked) + throw Mutex_State_Error("unlock"); + locked = false; + } + + Noop_Mutex() { locked = false; } + private: + bool locked; + }; + + return new Noop_Mutex; + } + +} diff --git a/Attic/mutex/noop_mutex/mux_noop.h b/Attic/mutex/noop_mutex/mux_noop.h new file mode 100644 index 000000000..94201cb7c --- /dev/null +++ b/Attic/mutex/noop_mutex/mux_noop.h @@ -0,0 +1,26 @@ +/* +* No-Op Mutex Factory +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_NOOP_MUTEX_FACTORY_H__ +#define BOTAN_NOOP_MUTEX_FACTORY_H__ + +#include + +namespace Botan { + +/* +* No-Op Mutex Factory +*/ +class BOTAN_DLL Noop_Mutex_Factory : public Mutex_Factory + { + public: + Mutex* make(); + }; + +} + +#endif diff --git a/Attic/mutex/pthreads/info.txt b/Attic/mutex/pthreads/info.txt new file mode 100644 index 000000000..88de70de0 --- /dev/null +++ b/Attic/mutex/pthreads/info.txt @@ -0,0 +1,29 @@ +realname "Pthread Mutex" + +define MUTEX_PTHREAD + +load_on auto + + +mux_pthr.cpp +mux_pthr.h + + + +all!qnx,freebsd,openbsd,netbsd -> pthread + + + +aix +cygwin +darwin +freebsd +hpux +irix +linux +netbsd +openbsd +qnx +solaris +tru64 + diff --git a/Attic/mutex/pthreads/mux_pthr.cpp b/Attic/mutex/pthreads/mux_pthr.cpp new file mode 100644 index 000000000..9f1d9816e --- /dev/null +++ b/Attic/mutex/pthreads/mux_pthr.cpp @@ -0,0 +1,58 @@ +/* +* Pthread Mutex +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include +#include + +#ifndef _POSIX_C_SOURCE + #define _POSIX_C_SOURCE 199506 +#endif + +#include + +namespace Botan { + +/* +* Pthread Mutex Factory +*/ +Mutex* Pthread_Mutex_Factory::make() + { + + class Pthread_Mutex : public Mutex + { + public: + void lock() + { + if(pthread_mutex_lock(&mutex) != 0) + throw Exception("Pthread_Mutex::lock: Error occured"); + } + + void unlock() + { + if(pthread_mutex_unlock(&mutex) != 0) + throw Exception("Pthread_Mutex::unlock: Error occured"); + } + + Pthread_Mutex() + { + if(pthread_mutex_init(&mutex, 0) != 0) + throw Exception("Pthread_Mutex: initialization failed"); + } + + ~Pthread_Mutex() + { + if(pthread_mutex_destroy(&mutex) != 0) + throw Invalid_State("~Pthread_Mutex: mutex is still locked"); + } + private: + pthread_mutex_t mutex; + }; + + return new Pthread_Mutex(); + } + +} diff --git a/Attic/mutex/pthreads/mux_pthr.h b/Attic/mutex/pthreads/mux_pthr.h new file mode 100644 index 000000000..118853947 --- /dev/null +++ b/Attic/mutex/pthreads/mux_pthr.h @@ -0,0 +1,26 @@ +/* +* Pthread Mutex +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_MUTEX_PTHREAD_H__ +#define BOTAN_MUTEX_PTHREAD_H__ + +#include + +namespace Botan { + +/* +* Pthread Mutex Factory +*/ +class BOTAN_DLL Pthread_Mutex_Factory : public Mutex_Factory + { + public: + Mutex* make(); + }; + +} + +#endif diff --git a/Attic/mutex/qt_mutex/info.txt b/Attic/mutex/qt_mutex/info.txt new file mode 100644 index 000000000..a21108c79 --- /dev/null +++ b/Attic/mutex/qt_mutex/info.txt @@ -0,0 +1,18 @@ +realname "Qt Mutex" + +define MUTEX_QT + +note "You'll probably have to add -I/-L flags to the Makefile to find Qt" + +load_on request + + +mux_qt.cpp +mux_qt.h + + +# I think we want to always use qt-mt, not qt -- not much point in supporting +# mutexes in a single threaded application, after all. + +all -> qt-mt + diff --git a/Attic/mutex/qt_mutex/mux_qt.cpp b/Attic/mutex/qt_mutex/mux_qt.cpp new file mode 100644 index 000000000..0f670c8b4 --- /dev/null +++ b/Attic/mutex/qt_mutex/mux_qt.cpp @@ -0,0 +1,35 @@ +/* +* Qt Thread Mutex +* (C) 2004-2007 Justin Karneges +* 2004-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include +#include + +#if !defined(QT_THREAD_SUPPORT) + #error Your version of Qt does not support threads or mutexes +#endif + +namespace Botan { + +/* +* Qt Mutex Factory +*/ +Mutex* Qt_Mutex_Factory::make() + { + class Qt_Mutex : public Mutex + { + public: + void lock() { mutex.lock(); } + void unlock() { mutex.unlock(); } + private: + QMutex mutex; + }; + + return new Qt_Mutex(); + } + +} diff --git a/Attic/mutex/qt_mutex/mux_qt.h b/Attic/mutex/qt_mutex/mux_qt.h new file mode 100644 index 000000000..5aed77f4b --- /dev/null +++ b/Attic/mutex/qt_mutex/mux_qt.h @@ -0,0 +1,27 @@ +/* +* Qt Mutex +* (C) 2004-2007 Justin Karneges +* 2004-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_MUTEX_QT_H__ +#define BOTAN_MUTEX_QT_H__ + +#include + +namespace Botan { + +/* +* Qt Mutex +*/ +class BOTAN_DLL Qt_Mutex_Factory : public Mutex_Factory + { + public: + Mutex* make(); + }; + +} + +#endif diff --git a/Attic/mutex/win32_crit_section/info.txt b/Attic/mutex/win32_crit_section/info.txt new file mode 100644 index 000000000..a2d339c3b --- /dev/null +++ b/Attic/mutex/win32_crit_section/info.txt @@ -0,0 +1,17 @@ +realname "Win32 Mutex" + +define MUTEX_WIN32 +modset win32 + +load_on auto + + +mux_win32.cpp +mux_win32.h + + + +cygwin +windows +mingw + diff --git a/Attic/mutex/win32_crit_section/mux_win32.cpp b/Attic/mutex/win32_crit_section/mux_win32.cpp new file mode 100644 index 000000000..2a967892b --- /dev/null +++ b/Attic/mutex/win32_crit_section/mux_win32.cpp @@ -0,0 +1,34 @@ +/* +* Win32 Mutex +* (C) 2006 Luca Piccarreta +* 2006-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include +#include + +namespace Botan { + +/* +* Win32 Mutex Factory +*/ +Mutex* Win32_Mutex_Factory::make() + { + class Win32_Mutex : public Mutex + { + public: + void lock() { EnterCriticalSection(&mutex); } + void unlock() { LeaveCriticalSection(&mutex); } + + Win32_Mutex() { InitializeCriticalSection(&mutex); } + ~Win32_Mutex() { DeleteCriticalSection(&mutex); } + private: + CRITICAL_SECTION mutex; + }; + + return new Win32_Mutex(); + } + +} diff --git a/Attic/mutex/win32_crit_section/mux_win32.h b/Attic/mutex/win32_crit_section/mux_win32.h new file mode 100644 index 000000000..a91850e71 --- /dev/null +++ b/Attic/mutex/win32_crit_section/mux_win32.h @@ -0,0 +1,26 @@ +/* +* Win32 Mutex +* (C) 2006 Luca Piccarreta +* 2006-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_MUTEX_WIN32_H__ +#define BOTAN_MUTEX_WIN32_H__ + +#include + +namespace Botan { + +/* +* Win32 Mutex Factory +*/ +class BOTAN_DLL Win32_Mutex_Factory : public Mutex_Factory + { + public: + Mutex* make(); + }; +} + +#endif diff --git a/src/mutex/info.txt b/src/mutex/info.txt deleted file mode 100644 index ff79bf753..000000000 --- a/src/mutex/info.txt +++ /dev/null @@ -1,9 +0,0 @@ -realname "Mutex Wrappers" - -define MUTEX_WRAPPERS - -load_on auto - - -mutex.h - diff --git a/src/mutex/mutex.h b/src/mutex/mutex.h deleted file mode 100644 index a04ff83c9..000000000 --- a/src/mutex/mutex.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -* Mutex -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_MUTEX_H__ -#define BOTAN_MUTEX_H__ - -#include - -namespace Botan { - -/* -* Mutex Base Class -*/ -class BOTAN_DLL Mutex - { - public: - virtual void lock() = 0; - virtual void unlock() = 0; - virtual ~Mutex() {} - }; - -/* -* Mutex Factory -*/ -class BOTAN_DLL Mutex_Factory - { - public: - virtual Mutex* make() = 0; - virtual ~Mutex_Factory() {} - }; - -/* -* Mutex Holding Class -*/ -class BOTAN_DLL Mutex_Holder - { - public: - Mutex_Holder(Mutex* m) : mux(m) - { - if(!mux) - throw Invalid_Argument("Mutex_Holder: Argument was NULL"); - mux->lock(); - } - - ~Mutex_Holder() { mux->unlock(); } - private: - Mutex* mux; - }; - -} - -#endif diff --git a/src/mutex/noop_mutex/info.txt b/src/mutex/noop_mutex/info.txt deleted file mode 100644 index 1f49f5e1c..000000000 --- a/src/mutex/noop_mutex/info.txt +++ /dev/null @@ -1,10 +0,0 @@ -realname "No-Op Mutex" - -load_on auto - -define MUTEX_NOOP - - -mux_noop.cpp -mux_noop.h - diff --git a/src/mutex/noop_mutex/mux_noop.cpp b/src/mutex/noop_mutex/mux_noop.cpp deleted file mode 100644 index 5c45084fe..000000000 --- a/src/mutex/noop_mutex/mux_noop.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* -* No-Op Mutex Factory -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include - -namespace Botan { - -/* -* No-Op Mutex Factory -*/ -Mutex* Noop_Mutex_Factory::make() - { - class Noop_Mutex : public Mutex - { - public: - class Mutex_State_Error : public Internal_Error - { - public: - Mutex_State_Error(const std::string& where) : - Internal_Error("Noop_Mutex::" + where + ": " + - "Mutex is already " + where + "ed") {} - }; - - void lock() - { - if(locked) - throw Mutex_State_Error("lock"); - locked = true; - } - - void unlock() - { - if(!locked) - throw Mutex_State_Error("unlock"); - locked = false; - } - - Noop_Mutex() { locked = false; } - private: - bool locked; - }; - - return new Noop_Mutex; - } - -} diff --git a/src/mutex/noop_mutex/mux_noop.h b/src/mutex/noop_mutex/mux_noop.h deleted file mode 100644 index 94201cb7c..000000000 --- a/src/mutex/noop_mutex/mux_noop.h +++ /dev/null @@ -1,26 +0,0 @@ -/* -* No-Op Mutex Factory -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_NOOP_MUTEX_FACTORY_H__ -#define BOTAN_NOOP_MUTEX_FACTORY_H__ - -#include - -namespace Botan { - -/* -* No-Op Mutex Factory -*/ -class BOTAN_DLL Noop_Mutex_Factory : public Mutex_Factory - { - public: - Mutex* make(); - }; - -} - -#endif diff --git a/src/mutex/pthreads/info.txt b/src/mutex/pthreads/info.txt deleted file mode 100644 index 88de70de0..000000000 --- a/src/mutex/pthreads/info.txt +++ /dev/null @@ -1,29 +0,0 @@ -realname "Pthread Mutex" - -define MUTEX_PTHREAD - -load_on auto - - -mux_pthr.cpp -mux_pthr.h - - - -all!qnx,freebsd,openbsd,netbsd -> pthread - - - -aix -cygwin -darwin -freebsd -hpux -irix -linux -netbsd -openbsd -qnx -solaris -tru64 - diff --git a/src/mutex/pthreads/mux_pthr.cpp b/src/mutex/pthreads/mux_pthr.cpp deleted file mode 100644 index 9f1d9816e..000000000 --- a/src/mutex/pthreads/mux_pthr.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* -* Pthread Mutex -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include -#include - -#ifndef _POSIX_C_SOURCE - #define _POSIX_C_SOURCE 199506 -#endif - -#include - -namespace Botan { - -/* -* Pthread Mutex Factory -*/ -Mutex* Pthread_Mutex_Factory::make() - { - - class Pthread_Mutex : public Mutex - { - public: - void lock() - { - if(pthread_mutex_lock(&mutex) != 0) - throw Exception("Pthread_Mutex::lock: Error occured"); - } - - void unlock() - { - if(pthread_mutex_unlock(&mutex) != 0) - throw Exception("Pthread_Mutex::unlock: Error occured"); - } - - Pthread_Mutex() - { - if(pthread_mutex_init(&mutex, 0) != 0) - throw Exception("Pthread_Mutex: initialization failed"); - } - - ~Pthread_Mutex() - { - if(pthread_mutex_destroy(&mutex) != 0) - throw Invalid_State("~Pthread_Mutex: mutex is still locked"); - } - private: - pthread_mutex_t mutex; - }; - - return new Pthread_Mutex(); - } - -} diff --git a/src/mutex/pthreads/mux_pthr.h b/src/mutex/pthreads/mux_pthr.h deleted file mode 100644 index 118853947..000000000 --- a/src/mutex/pthreads/mux_pthr.h +++ /dev/null @@ -1,26 +0,0 @@ -/* -* Pthread Mutex -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_MUTEX_PTHREAD_H__ -#define BOTAN_MUTEX_PTHREAD_H__ - -#include - -namespace Botan { - -/* -* Pthread Mutex Factory -*/ -class BOTAN_DLL Pthread_Mutex_Factory : public Mutex_Factory - { - public: - Mutex* make(); - }; - -} - -#endif diff --git a/src/mutex/qt_mutex/info.txt b/src/mutex/qt_mutex/info.txt deleted file mode 100644 index a21108c79..000000000 --- a/src/mutex/qt_mutex/info.txt +++ /dev/null @@ -1,18 +0,0 @@ -realname "Qt Mutex" - -define MUTEX_QT - -note "You'll probably have to add -I/-L flags to the Makefile to find Qt" - -load_on request - - -mux_qt.cpp -mux_qt.h - - -# I think we want to always use qt-mt, not qt -- not much point in supporting -# mutexes in a single threaded application, after all. - -all -> qt-mt - diff --git a/src/mutex/qt_mutex/mux_qt.cpp b/src/mutex/qt_mutex/mux_qt.cpp deleted file mode 100644 index 0f670c8b4..000000000 --- a/src/mutex/qt_mutex/mux_qt.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* -* Qt Thread Mutex -* (C) 2004-2007 Justin Karneges -* 2004-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include -#include - -#if !defined(QT_THREAD_SUPPORT) - #error Your version of Qt does not support threads or mutexes -#endif - -namespace Botan { - -/* -* Qt Mutex Factory -*/ -Mutex* Qt_Mutex_Factory::make() - { - class Qt_Mutex : public Mutex - { - public: - void lock() { mutex.lock(); } - void unlock() { mutex.unlock(); } - private: - QMutex mutex; - }; - - return new Qt_Mutex(); - } - -} diff --git a/src/mutex/qt_mutex/mux_qt.h b/src/mutex/qt_mutex/mux_qt.h deleted file mode 100644 index 5aed77f4b..000000000 --- a/src/mutex/qt_mutex/mux_qt.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -* Qt Mutex -* (C) 2004-2007 Justin Karneges -* 2004-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_MUTEX_QT_H__ -#define BOTAN_MUTEX_QT_H__ - -#include - -namespace Botan { - -/* -* Qt Mutex -*/ -class BOTAN_DLL Qt_Mutex_Factory : public Mutex_Factory - { - public: - Mutex* make(); - }; - -} - -#endif diff --git a/src/mutex/win32_crit_section/info.txt b/src/mutex/win32_crit_section/info.txt deleted file mode 100644 index a2d339c3b..000000000 --- a/src/mutex/win32_crit_section/info.txt +++ /dev/null @@ -1,17 +0,0 @@ -realname "Win32 Mutex" - -define MUTEX_WIN32 -modset win32 - -load_on auto - - -mux_win32.cpp -mux_win32.h - - - -cygwin -windows -mingw - diff --git a/src/mutex/win32_crit_section/mux_win32.cpp b/src/mutex/win32_crit_section/mux_win32.cpp deleted file mode 100644 index 2a967892b..000000000 --- a/src/mutex/win32_crit_section/mux_win32.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/* -* Win32 Mutex -* (C) 2006 Luca Piccarreta -* 2006-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include -#include - -namespace Botan { - -/* -* Win32 Mutex Factory -*/ -Mutex* Win32_Mutex_Factory::make() - { - class Win32_Mutex : public Mutex - { - public: - void lock() { EnterCriticalSection(&mutex); } - void unlock() { LeaveCriticalSection(&mutex); } - - Win32_Mutex() { InitializeCriticalSection(&mutex); } - ~Win32_Mutex() { DeleteCriticalSection(&mutex); } - private: - CRITICAL_SECTION mutex; - }; - - return new Win32_Mutex(); - } - -} diff --git a/src/mutex/win32_crit_section/mux_win32.h b/src/mutex/win32_crit_section/mux_win32.h deleted file mode 100644 index a91850e71..000000000 --- a/src/mutex/win32_crit_section/mux_win32.h +++ /dev/null @@ -1,26 +0,0 @@ -/* -* Win32 Mutex -* (C) 2006 Luca Piccarreta -* 2006-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_MUTEX_WIN32_H__ -#define BOTAN_MUTEX_WIN32_H__ - -#include - -namespace Botan { - -/* -* Win32 Mutex Factory -*/ -class BOTAN_DLL Win32_Mutex_Factory : public Mutex_Factory - { - public: - Mutex* make(); - }; -} - -#endif -- cgit v1.2.3 From aa7beddcc30d256dbcaea55a951ca75c5361b2b4 Mon Sep 17 00:00:00 2001 From: lloyd Date: Wed, 9 Sep 2009 00:03:55 +0000 Subject: Use GCC 4.4.1-release for C++0x testing --- src/build-data/cc/gcc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/build-data/cc/gcc b/src/build-data/cc/gcc index 7ab80b6ca..23671efce 100644 --- a/src/build-data/cc/gcc +++ b/src/build-data/cc/gcc @@ -1,6 +1,6 @@ realname "GNU C++" -binary_name "g++-4.4-20090331" +binary_name "g++-4.4.1" compiler_has_tr1 yes -- cgit v1.2.3 From cc8b60c7f5ea6be28848498367645cbccba035e8 Mon Sep 17 00:00:00 2001 From: lloyd Date: Fri, 11 Sep 2009 19:26:44 +0000 Subject: Remove dep on mutex module (doesn't exist here). Use initializer list in libstate.cpp --- src/algo_factory/info.txt | 1 - src/alloc/mem_pool/info.txt | 4 ---- src/libstate/info.txt | 2 -- src/libstate/libstate.cpp | 22 +++++++++++----------- 4 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/algo_factory/info.txt b/src/algo_factory/info.txt index dfc42230a..fc248523d 100644 --- a/src/algo_factory/info.txt +++ b/src/algo_factory/info.txt @@ -16,6 +16,5 @@ block engine hash mac -mutex stream diff --git a/src/alloc/mem_pool/info.txt b/src/alloc/mem_pool/info.txt index 0a762ccc4..b1c7a091f 100644 --- a/src/alloc/mem_pool/info.txt +++ b/src/alloc/mem_pool/info.txt @@ -6,7 +6,3 @@ load_on auto mem_pool.cpp mem_pool.h - - -mutex - diff --git a/src/libstate/info.txt b/src/libstate/info.txt index 6eaa2f70b..fcf386e6d 100644 --- a/src/libstate/info.txt +++ b/src/libstate/info.txt @@ -34,8 +34,6 @@ hash kdf mac mode_pad -mutex -noop_mutex pk_pad pubkey rng diff --git a/src/libstate/libstate.cpp b/src/libstate/libstate.cpp index 839d71d60..676c2a949 100644 --- a/src/libstate/libstate.cpp +++ b/src/libstate/libstate.cpp @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include @@ -77,7 +76,7 @@ void set_global_state(Library_State* new_state) */ Library_State* swap_global_state(Library_State* new_state) { - Library_State* old_state = global_lib_state; + auto old_state = global_lib_state; global_lib_state = new_state; return old_state; } @@ -124,11 +123,11 @@ void Library_State::add_allocator(Allocator* allocator) */ void Library_State::set_default_allocator(const std::string& type) { - std::lock_guard lock(allocator_lock); - if(type == "") return; + std::lock_guard lock(allocator_lock); + this->set("conf", "base/default_allocator", type); cached_default_allocator = 0; } @@ -240,29 +239,30 @@ void Library_State::initialize() load_default_config(); - std::vector engines; + std::vector engines = { #if defined(BOTAN_HAS_ENGINE_GNU_MP) - engines.push_back(new GMP_Engine); + new GMP_Engine, #endif #if defined(BOTAN_HAS_ENGINE_OPENSSL) - engines.push_back(new OpenSSL_Engine); + new OpenSSL_Engine, #endif #if defined(BOTAN_HAS_ENGINE_SSE2_ASSEMBLER) - engines.push_back(new SSE2_Assembler_Engine); + new SSE2_Assembler_Engine, #endif #if defined(BOTAN_HAS_ENGINE_AMD64_ASSEMBLER) - engines.push_back(new AMD64_Assembler_Engine); + new AMD64_Assembler_Engine, #endif #if defined(BOTAN_HAS_ENGINE_IA32_ASSEMBLER) - engines.push_back(new IA32_Assembler_Engine); + new IA32_Assembler_Engine, #endif - engines.push_back(new Default_Engine); + new Default_Engine + }; m_algorithm_factory = new Algorithm_Factory(engines); } -- cgit v1.2.3 From 69e8cc40848b95a644fb952c73788e825c1683ba Mon Sep 17 00:00:00 2001 From: lloyd Date: Wed, 16 Sep 2009 15:56:55 +0000 Subject: Use in the runtime benchmarking code instead of the local timers. --- doc/examples/bench.cpp | 3 +- src/benchmark/benchmark.cpp | 76 +++++++++++++++++++++++++++------------------ src/benchmark/benchmark.h | 26 +--------------- src/benchmark/info.txt | 1 - 4 files changed, 48 insertions(+), 58 deletions(-) diff --git a/doc/examples/bench.cpp b/doc/examples/bench.cpp index 0aedc699d..7d53e0557 100644 --- a/doc/examples/bench.cpp +++ b/doc/examples/bench.cpp @@ -66,7 +66,6 @@ int main() u32bit milliseconds = 1000; AutoSeeded_RNG rng; - Default_Benchmark_Timer timer; Algorithm_Factory& af = global_state().algorithm_factory(); @@ -75,7 +74,7 @@ int main() std::string algo = algos[i]; std::map speeds = - algorithm_benchmark(algos[i], milliseconds, timer, rng, af); + algorithm_benchmark(algos[i], milliseconds, rng, af); std::cout << algo << ":"; diff --git a/src/benchmark/benchmark.cpp b/src/benchmark/benchmark.cpp index 3bbc1f883..ff7519c09 100644 --- a/src/benchmark/benchmark.cpp +++ b/src/benchmark/benchmark.cpp @@ -1,6 +1,6 @@ /** * Runtime benchmarking -* (C) 2008 Jack Lloyd +* (C) 2008-2009 Jack Lloyd * * Distributed under the terms of the Botan license */ @@ -13,31 +13,40 @@ #include #include #include +#include +#include namespace Botan { namespace { +typedef std::chrono::high_resolution_clock benchmark_clock; + /** * Benchmark BufferedComputation (hash or MAC) */ std::pair bench_buf_comp(BufferedComputation* buf_comp, - Timer& timer, u64bit nanoseconds_max, const byte buf[], u32bit buf_len) { - const u64bit start = timer.clock(); - u64bit nanoseconds_used = 0; u64bit reps = 0; - while(nanoseconds_used < nanoseconds_max) + std::chrono::nanoseconds max_time(nanoseconds_max); + std::chrono::nanoseconds time_used(0); + + auto start = benchmark_clock::now(); + + while(time_used < max_time) { buf_comp->update(buf, buf_len); ++reps; - nanoseconds_used = timer.clock() - start; + time_used = benchmark_clock::now() - start; } - return std::make_pair(reps * buf_len, nanoseconds_used); + u64bit ns_taken = + std::chrono::duration_cast(time_used).count(); + + return std::make_pair(reps * buf_len, ns_taken); } /** @@ -45,26 +54,30 @@ std::pair bench_buf_comp(BufferedComputation* buf_comp, */ std::pair bench_block_cipher(BlockCipher* block_cipher, - Timer& timer, u64bit nanoseconds_max, byte buf[], u32bit buf_len) { - const u64bit start = timer.clock(); - u64bit nanoseconds_used = 0; + const u32bit in_blocks = buf_len / block_cipher->BLOCK_SIZE; + u64bit reps = 0; - const u32bit in_blocks = buf_len / block_cipher->BLOCK_SIZE; + std::chrono::nanoseconds max_time(nanoseconds_max); + std::chrono::nanoseconds time_used(0); - while(nanoseconds_used < nanoseconds_max) + auto start = benchmark_clock::now(); + + while(time_used < max_time) { block_cipher->encrypt_n(buf, buf, in_blocks); - ++reps; - nanoseconds_used = timer.clock() - start; + time_used = benchmark_clock::now() - start; } + u64bit ns_taken = + std::chrono::duration_cast(time_used).count(); + return std::make_pair(reps * in_blocks * block_cipher->BLOCK_SIZE, - nanoseconds_used); + ns_taken); } /** @@ -72,33 +85,38 @@ bench_block_cipher(BlockCipher* block_cipher, */ std::pair bench_stream_cipher(StreamCipher* stream_cipher, - Timer& timer, u64bit nanoseconds_max, byte buf[], u32bit buf_len) { - const u64bit start = timer.clock(); - u64bit nanoseconds_used = 0; u64bit reps = 0; - while(nanoseconds_used < nanoseconds_max) + std::chrono::nanoseconds max_time(nanoseconds_max); + std::chrono::nanoseconds time_used(0); + + auto start = benchmark_clock::now(); + + while(time_used < max_time) { stream_cipher->encrypt(buf, buf_len); ++reps; - nanoseconds_used = timer.clock() - start; + time_used = benchmark_clock::now() - start; } - return std::make_pair(reps * buf_len, nanoseconds_used); + u64bit ns_taken = + std::chrono::duration_cast(time_used).count(); + + return std::make_pair(reps * buf_len, ns_taken); } /** * Benchmark hash */ std::pair -bench_hash(HashFunction* hash, Timer& timer, +bench_hash(HashFunction* hash, u64bit nanoseconds_max, const byte buf[], u32bit buf_len) { - return bench_buf_comp(hash, timer, nanoseconds_max, buf, buf_len); + return bench_buf_comp(hash, nanoseconds_max, buf, buf_len); } /** @@ -106,12 +124,11 @@ bench_hash(HashFunction* hash, Timer& timer, */ std::pair bench_mac(MessageAuthenticationCode* mac, - Timer& timer, u64bit nanoseconds_max, const byte buf[], u32bit buf_len) { mac->set_key(buf, mac->MAXIMUM_KEYLENGTH); - return bench_buf_comp(mac, timer, nanoseconds_max, buf, buf_len); + return bench_buf_comp(mac, nanoseconds_max, buf, buf_len); } } @@ -119,7 +136,6 @@ bench_mac(MessageAuthenticationCode* mac, std::map algorithm_benchmark(const std::string& name, u32bit milliseconds, - Timer& timer, RandomNumberGenerator& rng, Algorithm_Factory& af) { @@ -145,7 +161,7 @@ algorithm_benchmark(const std::string& name, af.prototype_block_cipher(name, provider)) { std::auto_ptr block_cipher(proto->clone()); - results = bench_block_cipher(block_cipher.get(), timer, + results = bench_block_cipher(block_cipher.get(), ns_per_provider, &buf[0], buf.size()); } @@ -153,7 +169,7 @@ algorithm_benchmark(const std::string& name, af.prototype_stream_cipher(name, provider)) { std::auto_ptr stream_cipher(proto->clone()); - results = bench_stream_cipher(stream_cipher.get(), timer, + results = bench_stream_cipher(stream_cipher.get(), ns_per_provider, &buf[0], buf.size()); } @@ -161,14 +177,14 @@ algorithm_benchmark(const std::string& name, af.prototype_hash_function(name, provider)) { std::auto_ptr hash(proto->clone()); - results = bench_hash(hash.get(), timer, ns_per_provider, + results = bench_hash(hash.get(), ns_per_provider, &buf[0], buf.size()); } else if(const MessageAuthenticationCode* proto = af.prototype_mac(name, provider)) { std::auto_ptr mac(proto->clone()); - results = bench_mac(mac.get(), timer, ns_per_provider, + results = bench_mac(mac.get(), ns_per_provider, &buf[0], buf.size()); } diff --git a/src/benchmark/benchmark.h b/src/benchmark/benchmark.h index 272cfdfa2..a9c3fc01e 100644 --- a/src/benchmark/benchmark.h +++ b/src/benchmark/benchmark.h @@ -1,6 +1,6 @@ /** * Runtime benchmarking -* (C) 2008 Jack Lloyd +* (C) 2008-2009 Jack Lloyd * * Distributed under the terms of the Botan license */ @@ -9,35 +9,12 @@ #define BOTAN_RUNTIME_BENCHMARK_H__ #include -#include #include #include #include -/** -* Choose some sort of default timer implementation to use, since some -* (like hardware tick counters and current Win32 timer) are not -* reliable for benchmarking. -*/ -#if defined(BOTAN_HAS_TIMER_POSIX) - #include -#elif defined(BOTAN_HAS_TIMER_UNIX) - #include -#endif - namespace Botan { -#if defined(BOTAN_HAS_TIMER_POSIX) - typedef POSIX_Timer Default_Benchmark_Timer; -#elif defined(BOTAN_HAS_TIMER_UNIX) - typedef Unix_Timer Default_Benchmark_Timer; -#else - /* I have not had good success using clock(), the results seem - * pretty bogus, but as a last resort it works. - */ - typedef ANSI_Clock_Timer Default_Benchmark_Timer; -#endif - /** * Algorithm benchmark * @param name the name of the algorithm to test (cipher, hash, or MAC) @@ -50,7 +27,6 @@ namespace Botan { std::map algorithm_benchmark(const std::string& name, u32bit milliseconds, - Timer& timer, RandomNumberGenerator& rng, Algorithm_Factory& af); diff --git a/src/benchmark/info.txt b/src/benchmark/info.txt index 0fbcdb2de..03d5aac50 100644 --- a/src/benchmark/info.txt +++ b/src/benchmark/info.txt @@ -17,5 +17,4 @@ hash mac rng stream -timer -- cgit v1.2.3 From 1b0448fae6652a2da7f0de1fdcd2bbcda9836ca9 Mon Sep 17 00:00:00 2001 From: lloyd Date: Wed, 30 Sep 2009 18:06:12 +0000 Subject: Change call to system_time to use std::chrono --- src/rng/randpool/randpool.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/rng/randpool/randpool.cpp b/src/rng/randpool/randpool.cpp index fe83f4361..b018a0d17 100644 --- a/src/rng/randpool/randpool.cpp +++ b/src/rng/randpool/randpool.cpp @@ -8,9 +8,9 @@ #include #include #include -#include #include #include +#include namespace Botan { @@ -51,7 +51,9 @@ void Randpool::randomize(byte out[], u32bit length) */ void Randpool::update_buffer() { - const u64bit timestamp = system_time(); + const u64bit timestamp = + std::chrono::duration_cast( + std::chrono::high_resolution_clock::now().time_since_epoch()).count(); for(u32bit i = 0; i != counter.size(); ++i) if(++counter[i]) -- cgit v1.2.3 From 07cfdf3f06f35735483d4cdde9efdba558131337 Mon Sep 17 00:00:00 2001 From: lloyd Date: Tue, 13 Oct 2009 19:49:13 +0000 Subject: Fixup post-merge breakage --- src/libstate/libstate.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libstate/libstate.cpp b/src/libstate/libstate.cpp index 4d915973c..66e606880 100644 --- a/src/libstate/libstate.cpp +++ b/src/libstate/libstate.cpp @@ -85,7 +85,7 @@ Library_State* swap_global_state(Library_State* new_state) /* * Get an allocator by its name */ -Allocator* Library_State::get_allocator(const std::string& type) const +Allocator* Library_State::get_allocator(const std::string& type) { std::lock_guard lock(allocator_lock); @@ -137,7 +137,7 @@ void Library_State::set_default_allocator(const std::string& type) * Get a configuration value */ std::string Library_State::get(const std::string& section, - const std::string& key) const + const std::string& key) { std::lock_guard lock(config_lock); @@ -149,7 +149,7 @@ std::string Library_State::get(const std::string& section, * See if a particular option has been set */ bool Library_State::is_set(const std::string& section, - const std::string& key) const + const std::string& key) { std::lock_guard lock(config_lock); @@ -184,7 +184,7 @@ void Library_State::add_alias(const std::string& key, const std::string& value) /* * Dereference an alias to a fixed name */ -std::string Library_State::deref_alias(const std::string& key) const +std::string Library_State::deref_alias(const std::string& key) { std::string result = key; while(is_set("alias", result)) @@ -204,7 +204,7 @@ void Library_State::set_option(const std::string& key, /* * Get an option value */ -std::string Library_State::option(const std::string& key) const +std::string Library_State::option(const std::string& key) { return get("conf", key); } -- cgit v1.2.3 From 1860316d9832cc0f93d93ff6fcb0059c92c07383 Mon Sep 17 00:00:00 2001 From: lloyd Date: Tue, 13 Oct 2009 19:49:23 +0000 Subject: Fixup post-merge breakage --- src/utils/parsing.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/parsing.cpp b/src/utils/parsing.cpp index 7bd81b5d1..63dfce64f 100644 --- a/src/utils/parsing.cpp +++ b/src/utils/parsing.cpp @@ -23,7 +23,7 @@ u32bit to_u32bit(const std::string& number) { const u32bit OVERFLOW_MARK = 0xFFFFFFFF / 10; - if(*j == ' ') + if(*i == ' ') continue; byte digit = Charset::char2digit(*i); -- cgit v1.2.3 From f1980faa1240116b069de2dbbe36353765422b39 Mon Sep 17 00:00:00 2001 From: lloyd Date: Tue, 13 Oct 2009 20:38:14 +0000 Subject: Fix for removal of Default_Benchmark_Timer --- checks/bench.cpp | 21 +++++++++++++++------ checks/timer.cpp | 6 +++--- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/checks/bench.cpp b/checks/bench.cpp index f821e04e3..e733c75ec 100644 --- a/checks/bench.cpp +++ b/checks/bench.cpp @@ -10,6 +10,10 @@ #include #include +#include + +typedef std::chrono::high_resolution_clock benchmark_clock; + #include "common.h" #include "bench.h" @@ -152,13 +156,12 @@ bool bench_algo(const std::string& algo, Botan::RandomNumberGenerator& rng, double seconds) { - Botan::Default_Benchmark_Timer timer; Botan::Algorithm_Factory& af = Botan::global_state().algorithm_factory(); u32bit milliseconds = static_cast(seconds * 1000); std::map speeds = - algorithm_benchmark(algo, milliseconds, timer, rng, af); + algorithm_benchmark(algo, milliseconds, rng, af); if(speeds.empty()) // maybe a cipher mode, then? { @@ -198,17 +201,23 @@ bool bench_algo(const std::string& algo, Botan::Pipe pipe(filt, new Botan::BitBucket); pipe.start_msg(); - const u64bit start = timer.clock(); - u64bit nanoseconds_used = 0; + std::chrono::nanoseconds max_time(nanoseconds_max); + std::chrono::nanoseconds time_used(0); + + auto start = benchmark_clock::now(); + u64bit reps = 0; - while(nanoseconds_used < nanoseconds_max) + while(time_used < max_time) { pipe.write(&buf[0], buf.size()); ++reps; - nanoseconds_used = timer.clock() - start; + time_used = benchmark_clock::now() - start; } + u64bit nanoseconds_used = + std::chrono::duration_cast(time_used).count(); + double mbytes_per_second = (953.67 * (buf.size() * reps)) / nanoseconds_used; diff --git a/checks/timer.cpp b/checks/timer.cpp index 8460257d4..aaea4b361 100644 --- a/checks/timer.cpp +++ b/checks/timer.cpp @@ -1,5 +1,5 @@ #include "timer.h" -#include +#include #include Timer::Timer(const std::string& n, u32bit e_mul) : @@ -32,8 +32,8 @@ void Timer::stop() u64bit Timer::get_clock() { - Botan::Default_Benchmark_Timer timer; - return timer.clock(); + auto now = std::chrono::high_resolution_clock::now().time_since_epoch(); + return std::chrono::duration_cast(now).count(); } std::ostream& operator<<(std::ostream& out, Timer& timer) -- cgit v1.2.3 From 92f31b22dfe2aa1b2bde84cbaf4ce7365fa4ec68 Mon Sep 17 00:00:00 2001 From: lloyd Date: Tue, 13 Oct 2009 21:27:28 +0000 Subject: Attic-ize all of src/timer, except for time_t_to_tm and system_time (which will go later) which will live in the new time.h --- Attic/timer/cpu_counter/info.txt | 36 +++++++++++++++ Attic/timer/cpu_counter/tm_hard.cpp | 51 +++++++++++++++++++++ Attic/timer/cpu_counter/tm_hard.h | 33 ++++++++++++++ Attic/timer/gettimeofday/info.txt | 33 ++++++++++++++ Attic/timer/gettimeofday/tm_unix.cpp | 23 ++++++++++ Attic/timer/gettimeofday/tm_unix.h | 27 +++++++++++ Attic/timer/info.txt | 14 ++++++ Attic/timer/posix_rt/info.txt | 29 ++++++++++++ Attic/timer/posix_rt/tm_posix.cpp | 32 ++++++++++++++ Attic/timer/posix_rt/tm_posix.h | 27 +++++++++++ Attic/timer/timer.cpp | 64 +++++++++++++++++++++++++++ Attic/timer/timer.h | 53 ++++++++++++++++++++++ Attic/timer/win32_query_perf_ctr/info.txt | 26 +++++++++++ Attic/timer/win32_query_perf_ctr/tm_win32.cpp | 23 ++++++++++ Attic/timer/win32_query_perf_ctr/tm_win32.h | 27 +++++++++++ checks/cvc_tests.cpp | 2 +- src/asn1/asn1_tm.cpp | 2 +- src/cert/cvc/asn1_eac_tm.cpp | 2 +- src/cert/cvc/cvc_self.cpp | 2 +- src/cert/x509/crl_ent.cpp | 2 +- src/cert/x509/x509_ca.cpp | 2 +- src/cert/x509/x509opt.cpp | 2 +- src/cert/x509/x509stor.cpp | 2 +- src/rng/auto_rng/info.txt | 1 - src/timer/cpu_counter/info.txt | 36 --------------- src/timer/cpu_counter/tm_hard.cpp | 51 --------------------- src/timer/cpu_counter/tm_hard.h | 33 -------------- src/timer/gettimeofday/info.txt | 33 -------------- src/timer/gettimeofday/tm_unix.cpp | 23 ---------- src/timer/gettimeofday/tm_unix.h | 27 ----------- src/timer/info.txt | 14 ------ src/timer/posix_rt/info.txt | 29 ------------ src/timer/posix_rt/tm_posix.cpp | 32 -------------- src/timer/posix_rt/tm_posix.h | 27 ----------- src/timer/timer.cpp | 64 --------------------------- src/timer/timer.h | 53 ---------------------- src/timer/win32_query_perf_ctr/info.txt | 26 ----------- src/timer/win32_query_perf_ctr/tm_win32.cpp | 23 ---------- src/timer/win32_query_perf_ctr/tm_win32.h | 27 ----------- src/utils/time.h | 39 ++++++++++++++++ 40 files changed, 545 insertions(+), 507 deletions(-) create mode 100644 Attic/timer/cpu_counter/info.txt create mode 100644 Attic/timer/cpu_counter/tm_hard.cpp create mode 100644 Attic/timer/cpu_counter/tm_hard.h create mode 100644 Attic/timer/gettimeofday/info.txt create mode 100644 Attic/timer/gettimeofday/tm_unix.cpp create mode 100644 Attic/timer/gettimeofday/tm_unix.h create mode 100644 Attic/timer/info.txt create mode 100644 Attic/timer/posix_rt/info.txt create mode 100644 Attic/timer/posix_rt/tm_posix.cpp create mode 100644 Attic/timer/posix_rt/tm_posix.h create mode 100644 Attic/timer/timer.cpp create mode 100644 Attic/timer/timer.h create mode 100644 Attic/timer/win32_query_perf_ctr/info.txt create mode 100644 Attic/timer/win32_query_perf_ctr/tm_win32.cpp create mode 100644 Attic/timer/win32_query_perf_ctr/tm_win32.h delete mode 100644 src/timer/cpu_counter/info.txt delete mode 100644 src/timer/cpu_counter/tm_hard.cpp delete mode 100644 src/timer/cpu_counter/tm_hard.h delete mode 100644 src/timer/gettimeofday/info.txt delete mode 100644 src/timer/gettimeofday/tm_unix.cpp delete mode 100644 src/timer/gettimeofday/tm_unix.h delete mode 100644 src/timer/info.txt delete mode 100644 src/timer/posix_rt/info.txt delete mode 100644 src/timer/posix_rt/tm_posix.cpp delete mode 100644 src/timer/posix_rt/tm_posix.h delete mode 100644 src/timer/timer.cpp delete mode 100644 src/timer/timer.h delete mode 100644 src/timer/win32_query_perf_ctr/info.txt delete mode 100644 src/timer/win32_query_perf_ctr/tm_win32.cpp delete mode 100644 src/timer/win32_query_perf_ctr/tm_win32.h create mode 100644 src/utils/time.h diff --git a/Attic/timer/cpu_counter/info.txt b/Attic/timer/cpu_counter/info.txt new file mode 100644 index 000000000..025663a84 --- /dev/null +++ b/Attic/timer/cpu_counter/info.txt @@ -0,0 +1,36 @@ +realname "Hardware Timer" + +define TIMER_HARDWARE + +load_on asm_ok + + +tm_hard.cpp +tm_hard.h + + + +gcc + + + +# RDTSC: Pentium and up +i586 +i686 +athlon +pentium4 +pentium-m +amd64 + +ppc # PPC timebase register +ppc64 # PPC timebase register +alpha # rpcc +sparc64 # %tick register +ia64 # ar.itc +s390x +hppa + + + +timer + diff --git a/Attic/timer/cpu_counter/tm_hard.cpp b/Attic/timer/cpu_counter/tm_hard.cpp new file mode 100644 index 000000000..9e31aee39 --- /dev/null +++ b/Attic/timer/cpu_counter/tm_hard.cpp @@ -0,0 +1,51 @@ +/* +* Hardware Timer +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include + +namespace Botan { + +/* +* Get the timestamp +*/ +u64bit Hardware_Timer::clock() const + { + u64bit rtc = 0; + +#if defined(BOTAN_TARGET_ARCH_IS_IA32) || defined(BOTAN_TARGET_ARCH_IS_AMD64) + u32bit rtc_low = 0, rtc_high = 0; + asm volatile("rdtsc" : "=d" (rtc_high), "=a" (rtc_low)); + rtc = (static_cast(rtc_high) << 32) | rtc_low; + +#elif defined(BOTAN_TARGET_ARCH_IS_PPC) || defined(BOTAN_TARGET_ARCH_IS_PPC64) + u32bit rtc_low = 0, rtc_high = 0; + asm volatile("mftbu %0; mftb %1" : "=r" (rtc_high), "=r" (rtc_low)); + rtc = (static_cast(rtc_high) << 32) | rtc_low; + +#elif defined(BOTAN_TARGET_ARCH_IS_ALPHA) + asm volatile("rpcc %0" : "=r" (rtc)); + +#elif defined(BOTAN_TARGET_ARCH_IS_SPARC64) + asm volatile("rd %%tick, %0" : "=r" (rtc)); + +#elif defined(BOTAN_TARGET_ARCH_IS_IA64) + asm volatile("mov %0=ar.itc" : "=r" (rtc)); + +#elif defined(BOTAN_TARGET_ARCH_IS_S390X) + asm volatile("stck 0(%0)" : : "a" (&rtc) : "memory", "cc"); + +#elif defined(BOTAN_TARGET_ARCH_IS_HPPA) + asm volatile("mfctl 16,%0" : "=r" (rtc)); // 64-bit only? + +#else + #error "Unsure how to access hardware timer on this system" +#endif + + return rtc; + } + +} diff --git a/Attic/timer/cpu_counter/tm_hard.h b/Attic/timer/cpu_counter/tm_hard.h new file mode 100644 index 000000000..2e338eca8 --- /dev/null +++ b/Attic/timer/cpu_counter/tm_hard.h @@ -0,0 +1,33 @@ +/* +* Hardware Timer +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_TIMER_HARDWARE_H__ +#define BOTAN_TIMER_HARDWARE_H__ + +#include + +namespace Botan { + +/* +* Hardware Timer +*/ +class BOTAN_DLL Hardware_Timer : public Timer + { + public: + /* + @todo: Add sync(Timer& wall_clock, bool milliseconds) which busy + loops using wall_clock and tries to guess the tick rate of the + hardware counter, allowing it to be used for benchmarks, etc + */ + + std::string name() const { return "Hardware Timer"; } + u64bit clock() const; + }; + +} + +#endif diff --git a/Attic/timer/gettimeofday/info.txt b/Attic/timer/gettimeofday/info.txt new file mode 100644 index 000000000..a58e8088d --- /dev/null +++ b/Attic/timer/gettimeofday/info.txt @@ -0,0 +1,33 @@ +realname "Unix Timer" + +define TIMER_UNIX + +load_on auto +modset unix,beos + + +tm_unix.cpp +tm_unix.h + + + +aix +beos +cygwin +darwin +freebsd +dragonfly +hpux +irix +linux +netbsd +openbsd +qnx +solaris +tru64 + + + +timer + + diff --git a/Attic/timer/gettimeofday/tm_unix.cpp b/Attic/timer/gettimeofday/tm_unix.cpp new file mode 100644 index 000000000..9d8ac4a04 --- /dev/null +++ b/Attic/timer/gettimeofday/tm_unix.cpp @@ -0,0 +1,23 @@ +/* +* Unix Timer +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include +#include + +namespace Botan { + +/* +* Get the timestamp +*/ +u64bit Unix_Timer::clock() const + { + struct ::timeval tv; + ::gettimeofday(&tv, 0); + return combine_timers(tv.tv_sec, tv.tv_usec, 1000000); + } + +} diff --git a/Attic/timer/gettimeofday/tm_unix.h b/Attic/timer/gettimeofday/tm_unix.h new file mode 100644 index 000000000..c304dbb5c --- /dev/null +++ b/Attic/timer/gettimeofday/tm_unix.h @@ -0,0 +1,27 @@ +/* +* Unix Timer +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_TIMER_UNIX_H__ +#define BOTAN_TIMER_UNIX_H__ + +#include + +namespace Botan { + +/* +* Unix Timer +*/ +class BOTAN_DLL Unix_Timer : public Timer + { + public: + std::string name() const { return "Unix gettimeofday"; } + u64bit clock() const; + }; + +} + +#endif diff --git a/Attic/timer/info.txt b/Attic/timer/info.txt new file mode 100644 index 000000000..6408dca45 --- /dev/null +++ b/Attic/timer/info.txt @@ -0,0 +1,14 @@ +realname "Timer Base Class" + +define TIMER + +load_on auto + + +timer.cpp +timer.h + + + +rng + diff --git a/Attic/timer/posix_rt/info.txt b/Attic/timer/posix_rt/info.txt new file mode 100644 index 000000000..fa530ea1a --- /dev/null +++ b/Attic/timer/posix_rt/info.txt @@ -0,0 +1,29 @@ +realname "POSIX Timer" + +define TIMER_POSIX + +load_on auto + + +tm_posix.cpp +tm_posix.h + + + +linux -> rt + + +# The *BSDs put clock_gettime in sys/time.h, not time.h like POSIX says + +cygwin +linux +#freebsd +dragonfly +#netbsd +#openbsd + + + +timer + + diff --git a/Attic/timer/posix_rt/tm_posix.cpp b/Attic/timer/posix_rt/tm_posix.cpp new file mode 100644 index 000000000..96182025c --- /dev/null +++ b/Attic/timer/posix_rt/tm_posix.cpp @@ -0,0 +1,32 @@ +/* +* POSIX Timer +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include + +#ifndef _POSIX_C_SOURCE + #define _POSIX_C_SOURCE 199309 +#endif + +#include + +#ifndef CLOCK_REALTIME + #define CLOCK_REALTIME 0 +#endif + +namespace Botan { + +/* +* Get the timestamp +*/ +u64bit POSIX_Timer::clock() const + { + struct ::timespec tv; + ::clock_gettime(CLOCK_REALTIME, &tv); + return combine_timers(tv.tv_sec, tv.tv_nsec, 1000000000); + } + +} diff --git a/Attic/timer/posix_rt/tm_posix.h b/Attic/timer/posix_rt/tm_posix.h new file mode 100644 index 000000000..8bedccfa2 --- /dev/null +++ b/Attic/timer/posix_rt/tm_posix.h @@ -0,0 +1,27 @@ +/* +* POSIX Timer +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_TIMER_POSIX_H__ +#define BOTAN_TIMER_POSIX_H__ + +#include + +namespace Botan { + +/* +* POSIX Timer +*/ +class BOTAN_DLL POSIX_Timer : public Timer + { + public: + std::string name() const { return "POSIX clock_gettime"; } + u64bit clock() const; + }; + +} + +#endif diff --git a/Attic/timer/timer.cpp b/Attic/timer/timer.cpp new file mode 100644 index 000000000..16d7dc368 --- /dev/null +++ b/Attic/timer/timer.cpp @@ -0,0 +1,64 @@ +/** +* Timestamp Functions +* (C) 1999-2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include +#include +#include + +namespace Botan { + +/** +* Get the system clock +*/ +u64bit system_time() + { + return static_cast(std::time(0)); + } + +/* +* Convert a time_t to a struct tm +*/ +std::tm time_t_to_tm(u64bit timer) + { + std::time_t time_val = static_cast(timer); + + std::tm* tm_p = std::gmtime(&time_val); + if (tm_p == 0) + throw Encoding_Error("time_t_to_tm could not convert"); + return (*tm_p); + } + +/** +* Read the clock and return the output +*/ +void Timer::poll(Entropy_Accumulator& accum) + { + const u64bit clock_value = this->clock(); + accum.add(clock_value, 0); + } + +/** +* Combine a two time values into a single one +*/ +u64bit Timer::combine_timers(u32bit seconds, u32bit parts, u32bit parts_hz) + { + static const u64bit NANOSECONDS_UNITS = 1000000000; + + u64bit res = seconds * NANOSECONDS_UNITS; + res += parts * (NANOSECONDS_UNITS / parts_hz); + return res; + } + +/** +* ANSI Clock +*/ +u64bit ANSI_Clock_Timer::clock() const + { + return combine_timers(std::time(0), std::clock(), CLOCKS_PER_SEC); + } + +} diff --git a/Attic/timer/timer.h b/Attic/timer/timer.h new file mode 100644 index 000000000..603027f6d --- /dev/null +++ b/Attic/timer/timer.h @@ -0,0 +1,53 @@ +/** +* Timestamp Functions +* (C) 1999-2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_TIMERS_H__ +#define BOTAN_TIMERS_H__ + +#include +#include + +namespace Botan { + +/* +* Time Access/Conversion Functions +*/ +BOTAN_DLL u64bit system_time(); + +BOTAN_DLL std::tm time_t_to_tm(u64bit); + +/** +* Timer Interface +*/ +class BOTAN_DLL Timer : public EntropySource + { + public: + /** + @return nanoseconds resolution timestamp, unknown epoch + */ + virtual u64bit clock() const = 0; + + void poll(Entropy_Accumulator& accum); + + virtual ~Timer() {} + protected: + static u64bit combine_timers(u32bit, u32bit, u32bit); + }; + +/** +* ANSI Clock Timer +*/ +class BOTAN_DLL ANSI_Clock_Timer : public Timer + { + public: + std::string name() const { return "ANSI clock"; } + u64bit clock() const; + }; + +} + +#endif diff --git a/Attic/timer/win32_query_perf_ctr/info.txt b/Attic/timer/win32_query_perf_ctr/info.txt new file mode 100644 index 000000000..4bb1ddb34 --- /dev/null +++ b/Attic/timer/win32_query_perf_ctr/info.txt @@ -0,0 +1,26 @@ +realname "Win32 Timer" + +define TIMER_WIN32 +modset win32 + +load_on auto + + +tm_win32.cpp +tm_win32.h + + + +cygwin +windows +mingw + + + +windows -> user32.lib + + + +timer + + diff --git a/Attic/timer/win32_query_perf_ctr/tm_win32.cpp b/Attic/timer/win32_query_perf_ctr/tm_win32.cpp new file mode 100644 index 000000000..6b878e6e2 --- /dev/null +++ b/Attic/timer/win32_query_perf_ctr/tm_win32.cpp @@ -0,0 +1,23 @@ +/* +* Win32 Timer +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include +#include + +namespace Botan { + +/* +* Get the timestamp +*/ +u64bit Win32_Timer::clock() const + { + LARGE_INTEGER tv; + ::QueryPerformanceCounter(&tv); + return tv.QuadPart; + } + +} diff --git a/Attic/timer/win32_query_perf_ctr/tm_win32.h b/Attic/timer/win32_query_perf_ctr/tm_win32.h new file mode 100644 index 000000000..5bcb720ab --- /dev/null +++ b/Attic/timer/win32_query_perf_ctr/tm_win32.h @@ -0,0 +1,27 @@ +/* +* Win32 Timer +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_TIMER_WIN32_H__ +#define BOTAN_TIMER_WIN32_H__ + +#include + +namespace Botan { + +/* +* Win32 Timer +*/ +class BOTAN_DLL Win32_Timer : public Timer + { + public: + std::string name() const { return "Win32 QueryPerformanceCounter"; } + u64bit clock() const; + }; + +} + +#endif diff --git a/checks/cvc_tests.cpp b/checks/cvc_tests.cpp index 369da4a8c..4b2ffa9a6 100644 --- a/checks/cvc_tests.cpp +++ b/checks/cvc_tests.cpp @@ -27,8 +27,8 @@ #include #include #include -#include #include +#include #define TEST_DATA_DIR "checks/ecc_testdata" diff --git a/src/asn1/asn1_tm.cpp b/src/asn1/asn1_tm.cpp index 09bc4d347..c57d1bc73 100644 --- a/src/asn1/asn1_tm.cpp +++ b/src/asn1/asn1_tm.cpp @@ -10,7 +10,7 @@ #include #include #include -#include +#include namespace Botan { diff --git a/src/cert/cvc/asn1_eac_tm.cpp b/src/cert/cvc/asn1_eac_tm.cpp index 947b9e66d..f361e6098 100644 --- a/src/cert/cvc/asn1_eac_tm.cpp +++ b/src/cert/cvc/asn1_eac_tm.cpp @@ -12,7 +12,7 @@ #include #include #include -#include +#include namespace Botan { diff --git a/src/cert/cvc/cvc_self.cpp b/src/cert/cvc/cvc_self.cpp index 46bf145fc..98d90d0af 100644 --- a/src/cert/cvc/cvc_self.cpp +++ b/src/cert/cvc/cvc_self.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include namespace Botan { diff --git a/src/cert/x509/crl_ent.cpp b/src/cert/x509/crl_ent.cpp index a8a989c24..42a742ebb 100644 --- a/src/cert/x509/crl_ent.cpp +++ b/src/cert/x509/crl_ent.cpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include namespace Botan { diff --git a/src/cert/x509/x509_ca.cpp b/src/cert/x509/x509_ca.cpp index c3ab2a739..4c4748065 100644 --- a/src/cert/x509/x509_ca.cpp +++ b/src/cert/x509/x509_ca.cpp @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/cert/x509/x509opt.cpp b/src/cert/x509/x509opt.cpp index 03bcd20f4..c6421d9ca 100644 --- a/src/cert/x509/x509opt.cpp +++ b/src/cert/x509/x509opt.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include namespace Botan { diff --git a/src/cert/x509/x509stor.cpp b/src/cert/x509/x509stor.cpp index 9c6dced25..515215a21 100644 --- a/src/cert/x509/x509stor.cpp +++ b/src/cert/x509/x509stor.cpp @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/rng/auto_rng/info.txt b/src/rng/auto_rng/info.txt index 7d5d5ddcc..3c83bfb5e 100644 --- a/src/rng/auto_rng/info.txt +++ b/src/rng/auto_rng/info.txt @@ -12,5 +12,4 @@ auto_rng.cpp hmac sha2 -timer diff --git a/src/timer/cpu_counter/info.txt b/src/timer/cpu_counter/info.txt deleted file mode 100644 index 025663a84..000000000 --- a/src/timer/cpu_counter/info.txt +++ /dev/null @@ -1,36 +0,0 @@ -realname "Hardware Timer" - -define TIMER_HARDWARE - -load_on asm_ok - - -tm_hard.cpp -tm_hard.h - - - -gcc - - - -# RDTSC: Pentium and up -i586 -i686 -athlon -pentium4 -pentium-m -amd64 - -ppc # PPC timebase register -ppc64 # PPC timebase register -alpha # rpcc -sparc64 # %tick register -ia64 # ar.itc -s390x -hppa - - - -timer - diff --git a/src/timer/cpu_counter/tm_hard.cpp b/src/timer/cpu_counter/tm_hard.cpp deleted file mode 100644 index 9e31aee39..000000000 --- a/src/timer/cpu_counter/tm_hard.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* -* Hardware Timer -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include - -namespace Botan { - -/* -* Get the timestamp -*/ -u64bit Hardware_Timer::clock() const - { - u64bit rtc = 0; - -#if defined(BOTAN_TARGET_ARCH_IS_IA32) || defined(BOTAN_TARGET_ARCH_IS_AMD64) - u32bit rtc_low = 0, rtc_high = 0; - asm volatile("rdtsc" : "=d" (rtc_high), "=a" (rtc_low)); - rtc = (static_cast(rtc_high) << 32) | rtc_low; - -#elif defined(BOTAN_TARGET_ARCH_IS_PPC) || defined(BOTAN_TARGET_ARCH_IS_PPC64) - u32bit rtc_low = 0, rtc_high = 0; - asm volatile("mftbu %0; mftb %1" : "=r" (rtc_high), "=r" (rtc_low)); - rtc = (static_cast(rtc_high) << 32) | rtc_low; - -#elif defined(BOTAN_TARGET_ARCH_IS_ALPHA) - asm volatile("rpcc %0" : "=r" (rtc)); - -#elif defined(BOTAN_TARGET_ARCH_IS_SPARC64) - asm volatile("rd %%tick, %0" : "=r" (rtc)); - -#elif defined(BOTAN_TARGET_ARCH_IS_IA64) - asm volatile("mov %0=ar.itc" : "=r" (rtc)); - -#elif defined(BOTAN_TARGET_ARCH_IS_S390X) - asm volatile("stck 0(%0)" : : "a" (&rtc) : "memory", "cc"); - -#elif defined(BOTAN_TARGET_ARCH_IS_HPPA) - asm volatile("mfctl 16,%0" : "=r" (rtc)); // 64-bit only? - -#else - #error "Unsure how to access hardware timer on this system" -#endif - - return rtc; - } - -} diff --git a/src/timer/cpu_counter/tm_hard.h b/src/timer/cpu_counter/tm_hard.h deleted file mode 100644 index 2e338eca8..000000000 --- a/src/timer/cpu_counter/tm_hard.h +++ /dev/null @@ -1,33 +0,0 @@ -/* -* Hardware Timer -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_TIMER_HARDWARE_H__ -#define BOTAN_TIMER_HARDWARE_H__ - -#include - -namespace Botan { - -/* -* Hardware Timer -*/ -class BOTAN_DLL Hardware_Timer : public Timer - { - public: - /* - @todo: Add sync(Timer& wall_clock, bool milliseconds) which busy - loops using wall_clock and tries to guess the tick rate of the - hardware counter, allowing it to be used for benchmarks, etc - */ - - std::string name() const { return "Hardware Timer"; } - u64bit clock() const; - }; - -} - -#endif diff --git a/src/timer/gettimeofday/info.txt b/src/timer/gettimeofday/info.txt deleted file mode 100644 index a58e8088d..000000000 --- a/src/timer/gettimeofday/info.txt +++ /dev/null @@ -1,33 +0,0 @@ -realname "Unix Timer" - -define TIMER_UNIX - -load_on auto -modset unix,beos - - -tm_unix.cpp -tm_unix.h - - - -aix -beos -cygwin -darwin -freebsd -dragonfly -hpux -irix -linux -netbsd -openbsd -qnx -solaris -tru64 - - - -timer - - diff --git a/src/timer/gettimeofday/tm_unix.cpp b/src/timer/gettimeofday/tm_unix.cpp deleted file mode 100644 index 9d8ac4a04..000000000 --- a/src/timer/gettimeofday/tm_unix.cpp +++ /dev/null @@ -1,23 +0,0 @@ -/* -* Unix Timer -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include -#include - -namespace Botan { - -/* -* Get the timestamp -*/ -u64bit Unix_Timer::clock() const - { - struct ::timeval tv; - ::gettimeofday(&tv, 0); - return combine_timers(tv.tv_sec, tv.tv_usec, 1000000); - } - -} diff --git a/src/timer/gettimeofday/tm_unix.h b/src/timer/gettimeofday/tm_unix.h deleted file mode 100644 index c304dbb5c..000000000 --- a/src/timer/gettimeofday/tm_unix.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -* Unix Timer -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_TIMER_UNIX_H__ -#define BOTAN_TIMER_UNIX_H__ - -#include - -namespace Botan { - -/* -* Unix Timer -*/ -class BOTAN_DLL Unix_Timer : public Timer - { - public: - std::string name() const { return "Unix gettimeofday"; } - u64bit clock() const; - }; - -} - -#endif diff --git a/src/timer/info.txt b/src/timer/info.txt deleted file mode 100644 index 6408dca45..000000000 --- a/src/timer/info.txt +++ /dev/null @@ -1,14 +0,0 @@ -realname "Timer Base Class" - -define TIMER - -load_on auto - - -timer.cpp -timer.h - - - -rng - diff --git a/src/timer/posix_rt/info.txt b/src/timer/posix_rt/info.txt deleted file mode 100644 index fa530ea1a..000000000 --- a/src/timer/posix_rt/info.txt +++ /dev/null @@ -1,29 +0,0 @@ -realname "POSIX Timer" - -define TIMER_POSIX - -load_on auto - - -tm_posix.cpp -tm_posix.h - - - -linux -> rt - - -# The *BSDs put clock_gettime in sys/time.h, not time.h like POSIX says - -cygwin -linux -#freebsd -dragonfly -#netbsd -#openbsd - - - -timer - - diff --git a/src/timer/posix_rt/tm_posix.cpp b/src/timer/posix_rt/tm_posix.cpp deleted file mode 100644 index 96182025c..000000000 --- a/src/timer/posix_rt/tm_posix.cpp +++ /dev/null @@ -1,32 +0,0 @@ -/* -* POSIX Timer -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include - -#ifndef _POSIX_C_SOURCE - #define _POSIX_C_SOURCE 199309 -#endif - -#include - -#ifndef CLOCK_REALTIME - #define CLOCK_REALTIME 0 -#endif - -namespace Botan { - -/* -* Get the timestamp -*/ -u64bit POSIX_Timer::clock() const - { - struct ::timespec tv; - ::clock_gettime(CLOCK_REALTIME, &tv); - return combine_timers(tv.tv_sec, tv.tv_nsec, 1000000000); - } - -} diff --git a/src/timer/posix_rt/tm_posix.h b/src/timer/posix_rt/tm_posix.h deleted file mode 100644 index 8bedccfa2..000000000 --- a/src/timer/posix_rt/tm_posix.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -* POSIX Timer -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_TIMER_POSIX_H__ -#define BOTAN_TIMER_POSIX_H__ - -#include - -namespace Botan { - -/* -* POSIX Timer -*/ -class BOTAN_DLL POSIX_Timer : public Timer - { - public: - std::string name() const { return "POSIX clock_gettime"; } - u64bit clock() const; - }; - -} - -#endif diff --git a/src/timer/timer.cpp b/src/timer/timer.cpp deleted file mode 100644 index 16d7dc368..000000000 --- a/src/timer/timer.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/** -* Timestamp Functions -* (C) 1999-2009 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include -#include -#include - -namespace Botan { - -/** -* Get the system clock -*/ -u64bit system_time() - { - return static_cast(std::time(0)); - } - -/* -* Convert a time_t to a struct tm -*/ -std::tm time_t_to_tm(u64bit timer) - { - std::time_t time_val = static_cast(timer); - - std::tm* tm_p = std::gmtime(&time_val); - if (tm_p == 0) - throw Encoding_Error("time_t_to_tm could not convert"); - return (*tm_p); - } - -/** -* Read the clock and return the output -*/ -void Timer::poll(Entropy_Accumulator& accum) - { - const u64bit clock_value = this->clock(); - accum.add(clock_value, 0); - } - -/** -* Combine a two time values into a single one -*/ -u64bit Timer::combine_timers(u32bit seconds, u32bit parts, u32bit parts_hz) - { - static const u64bit NANOSECONDS_UNITS = 1000000000; - - u64bit res = seconds * NANOSECONDS_UNITS; - res += parts * (NANOSECONDS_UNITS / parts_hz); - return res; - } - -/** -* ANSI Clock -*/ -u64bit ANSI_Clock_Timer::clock() const - { - return combine_timers(std::time(0), std::clock(), CLOCKS_PER_SEC); - } - -} diff --git a/src/timer/timer.h b/src/timer/timer.h deleted file mode 100644 index 603027f6d..000000000 --- a/src/timer/timer.h +++ /dev/null @@ -1,53 +0,0 @@ -/** -* Timestamp Functions -* (C) 1999-2009 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_TIMERS_H__ -#define BOTAN_TIMERS_H__ - -#include -#include - -namespace Botan { - -/* -* Time Access/Conversion Functions -*/ -BOTAN_DLL u64bit system_time(); - -BOTAN_DLL std::tm time_t_to_tm(u64bit); - -/** -* Timer Interface -*/ -class BOTAN_DLL Timer : public EntropySource - { - public: - /** - @return nanoseconds resolution timestamp, unknown epoch - */ - virtual u64bit clock() const = 0; - - void poll(Entropy_Accumulator& accum); - - virtual ~Timer() {} - protected: - static u64bit combine_timers(u32bit, u32bit, u32bit); - }; - -/** -* ANSI Clock Timer -*/ -class BOTAN_DLL ANSI_Clock_Timer : public Timer - { - public: - std::string name() const { return "ANSI clock"; } - u64bit clock() const; - }; - -} - -#endif diff --git a/src/timer/win32_query_perf_ctr/info.txt b/src/timer/win32_query_perf_ctr/info.txt deleted file mode 100644 index 4bb1ddb34..000000000 --- a/src/timer/win32_query_perf_ctr/info.txt +++ /dev/null @@ -1,26 +0,0 @@ -realname "Win32 Timer" - -define TIMER_WIN32 -modset win32 - -load_on auto - - -tm_win32.cpp -tm_win32.h - - - -cygwin -windows -mingw - - - -windows -> user32.lib - - - -timer - - diff --git a/src/timer/win32_query_perf_ctr/tm_win32.cpp b/src/timer/win32_query_perf_ctr/tm_win32.cpp deleted file mode 100644 index 6b878e6e2..000000000 --- a/src/timer/win32_query_perf_ctr/tm_win32.cpp +++ /dev/null @@ -1,23 +0,0 @@ -/* -* Win32 Timer -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include -#include - -namespace Botan { - -/* -* Get the timestamp -*/ -u64bit Win32_Timer::clock() const - { - LARGE_INTEGER tv; - ::QueryPerformanceCounter(&tv); - return tv.QuadPart; - } - -} diff --git a/src/timer/win32_query_perf_ctr/tm_win32.h b/src/timer/win32_query_perf_ctr/tm_win32.h deleted file mode 100644 index 5bcb720ab..000000000 --- a/src/timer/win32_query_perf_ctr/tm_win32.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -* Win32 Timer -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_TIMER_WIN32_H__ -#define BOTAN_TIMER_WIN32_H__ - -#include - -namespace Botan { - -/* -* Win32 Timer -*/ -class BOTAN_DLL Win32_Timer : public Timer - { - public: - std::string name() const { return "Win32 QueryPerformanceCounter"; } - u64bit clock() const; - }; - -} - -#endif diff --git a/src/utils/time.h b/src/utils/time.h new file mode 100644 index 000000000..3052aec44 --- /dev/null +++ b/src/utils/time.h @@ -0,0 +1,39 @@ +/* +* Time Functions +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_TIME_OPS_H__ +#define BOTAN_TIME_OPS_H__ + +#include + +namespace Botan { + +/* +* Convert a time_t value to a struct tm +*/ +inline std::tm time_t_to_tm(u64bit time_int) + { + std::time_t time_val = static_cast(time_int); + + std::tm* tm_p = std::gmtime(&time_val); + if (tm_p == 0) + throw Encoding_Error("time_t_to_tm could not convert"); + return (*tm_p); + } + +/** +* Get the system clock +*/ +inline u64bit system_time() + { + return static_cast(std::time(0)); + } + +} + + +#endif -- cgit v1.2.3