aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlloyd <[email protected]>2009-12-08 15:26:14 +0000
committerlloyd <[email protected]>2009-12-08 15:26:14 +0000
commit500392029c610b48695876a54cafb5585a75befb (patch)
treeeb4b922f5d54ddb45349f74f78216f93b7c47704
parentd2ed3e0752b32db1377c498734c724e18af7c42b (diff)
parentf63359f348d347bebee036b11d0c9641ee3d56d6 (diff)
propagate from branch 'net.randombit.botan' (head 142a9359ba02d5dfcf3f2c9f99902f82ab41724e)
to branch 'net.randombit.botan.gost_3410' (head 064884e9c2fde8228effdd48e80fed78ff0c42cb)
-rw-r--r--.mtn-ignore14
-rw-r--r--checks/bench.cpp8
-rw-r--r--checks/cvc_tests.cpp2
-rw-r--r--checks/timer.cpp5
-rwxr-xr-xconfigure.py36
-rw-r--r--doc/examples/bench.cpp3
-rw-r--r--doc/examples/benchmark.cpp3
-rw-r--r--doc/examples/ca.cpp2
-rw-r--r--doc/examples/gen_certs.cpp2
-rw-r--r--doc/examples/hash_quickly.cpp4
-rw-r--r--readme.txt28
-rw-r--r--src/asn1/asn1_tm.cpp2
-rw-r--r--src/asn1/info.txt1
-rw-r--r--src/benchmark/benchmark.cpp43
-rw-r--r--src/benchmark/benchmark.h25
-rw-r--r--src/benchmark/info.txt1
-rw-r--r--src/block/serpent_simd/serp_simd_sbox.h4
-rw-r--r--src/build-data/os/aix.txt4
-rw-r--r--src/build-data/os/beos.txt4
-rw-r--r--src/build-data/os/cygwin.txt4
-rw-r--r--src/build-data/os/darwin.txt4
-rw-r--r--src/build-data/os/dragonfly.txt2
-rw-r--r--src/build-data/os/freebsd.txt1
-rw-r--r--src/build-data/os/hpux.txt4
-rw-r--r--src/build-data/os/irix.txt4
-rw-r--r--src/build-data/os/linux.txt2
-rw-r--r--src/build-data/os/netbsd.txt4
-rw-r--r--src/build-data/os/openbsd.txt4
-rw-r--r--src/build-data/os/qnx.txt4
-rw-r--r--src/build-data/os/solaris.txt1
-rw-r--r--src/build-data/os/tru64.txt4
-rw-r--r--src/cert/cvc/asn1_eac_tm.cpp2
-rw-r--r--src/cert/cvc/cvc_self.cpp2
-rw-r--r--src/cert/x509/crl_ent.cpp2
-rw-r--r--src/cert/x509/x509_ca.cpp2
-rw-r--r--src/cert/x509/x509opt.cpp2
-rw-r--r--src/cert/x509/x509stor.cpp2
-rw-r--r--src/constructs/aont/package.h5
-rw-r--r--src/entropy/hres_timer/hres_timer.cpp (renamed from src/timer/cpu_counter/tm_hard.cpp)39
-rw-r--r--src/entropy/hres_timer/hres_timer.h27
-rw-r--r--src/entropy/hres_timer/info.txt1
-rw-r--r--src/libstate/botan.h5
-rw-r--r--src/rng/auto_rng/auto_rng.cpp29
-rw-r--r--src/rng/auto_rng/info.txt1
-rw-r--r--src/rng/randpool/randpool.cpp4
-rw-r--r--src/timer/cpu_counter/info.txt36
-rw-r--r--src/timer/cpu_counter/tm_hard.h33
-rw-r--r--src/timer/gettimeofday/info.txt24
-rw-r--r--src/timer/gettimeofday/tm_unix.cpp23
-rw-r--r--src/timer/gettimeofday/tm_unix.h27
-rw-r--r--src/timer/info.txt12
-rw-r--r--src/timer/posix_rt/info.txt26
-rw-r--r--src/timer/posix_rt/tm_posix.cpp32
-rw-r--r--src/timer/posix_rt/tm_posix.h27
-rw-r--r--src/timer/timer.h53
-rw-r--r--src/timer/win32_query_perf_ctr/info.txt17
-rw-r--r--src/timer/win32_query_perf_ctr/tm_win32.cpp23
-rw-r--r--src/timer/win32_query_perf_ctr/tm_win32.h27
-rw-r--r--src/utils/info.txt2
-rw-r--r--src/utils/time.cpp (renamed from src/timer/timer.cpp)75
-rw-r--r--src/utils/time.h30
61 files changed, 282 insertions, 537 deletions
diff --git a/.mtn-ignore b/.mtn-ignore
index 9472cff88..24a7f4f88 100644
--- a/.mtn-ignore
+++ b/.mtn-ignore
@@ -2,14 +2,6 @@
^botan-config$
^botan.pc$
^build$
-^build/build\.h$
-^build/checks$
-^build/checks/.*\.o$
-^build/include$
-^build/include/botan$
-^build/include/botan/.*\.h$
-^build/lib$
-^build/lib/.*\.o$
callgrind.out.*
^check$
^checks/ecc_testdata/dompar_private.pkcs8.pem$
@@ -18,10 +10,10 @@ callgrind.out.*
^checks/nist_tests/x509test$
^doc/botan.doxy$
^doc/doxygen$
-^doc/.*\.pdf$
-^doc/.*\.log$
-^doc/.*\.toc$
+^doc/[a-z]+\.(pdf|log|toc)$
^doc/examples/.*\.pem$
^src/wrap/perl-xs/Botan.(bs|c)$
^src/wrap/perl-xs/Makefile(\.old)?$
^src/wrap/perl-xs/.*blib$
+^[a-z]+\.(exe|dll)(\.manifest)?$
+^[a-z]+\.(exp|lib)$
diff --git a/checks/bench.cpp b/checks/bench.cpp
index f821e04e3..631bf8476 100644
--- a/checks/bench.cpp
+++ b/checks/bench.cpp
@@ -9,6 +9,7 @@
#include <botan/engine.h>
#include <botan/parsing.h>
#include <botan/symkey.h>
+#include <botan/time.h>
#include "common.h"
#include "bench.h"
@@ -152,13 +153,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<u32bit>(seconds * 1000);
std::map<std::string, double> speeds =
- algorithm_benchmark(algo, milliseconds, timer, rng, af);
+ algorithm_benchmark(algo, milliseconds, rng, af);
if(speeds.empty()) // maybe a cipher mode, then?
{
@@ -198,7 +198,7 @@ bool bench_algo(const std::string& algo,
Botan::Pipe pipe(filt, new Botan::BitBucket);
pipe.start_msg();
- const u64bit start = timer.clock();
+ const u64bit start = Botan::get_nanoseconds_clock();
u64bit nanoseconds_used = 0;
u64bit reps = 0;
@@ -206,7 +206,7 @@ bool bench_algo(const std::string& algo,
{
pipe.write(&buf[0], buf.size());
++reps;
- nanoseconds_used = timer.clock() - start;
+ nanoseconds_used = Botan::get_nanoseconds_clock() - start;
}
double mbytes_per_second =
diff --git a/checks/cvc_tests.cpp b/checks/cvc_tests.cpp
index d62099b6e..8ca00e048 100644
--- a/checks/cvc_tests.cpp
+++ b/checks/cvc_tests.cpp
@@ -27,8 +27,8 @@
#include <botan/look_pk.h>
#include <botan/cvc_self.h>
#include <botan/cvc_cert.h>
-#include <botan/timer.h>
#include <botan/cvc_ado.h>
+#include <botan/time.h>
#define TEST_DATA_DIR "checks/ecc_testdata"
diff --git a/checks/timer.cpp b/checks/timer.cpp
index 8460257d4..1bdaebb7f 100644
--- a/checks/timer.cpp
+++ b/checks/timer.cpp
@@ -1,5 +1,5 @@
#include "timer.h"
-#include <botan/benchmark.h>
+#include <botan/time.h>
#include <iomanip>
Timer::Timer(const std::string& n, u32bit e_mul) :
@@ -32,8 +32,7 @@ void Timer::stop()
u64bit Timer::get_clock()
{
- Botan::Default_Benchmark_Timer timer;
- return timer.clock();
+ return Botan::get_nanoseconds_clock();
}
std::ostream& operator<<(std::ostream& out, Timer& timer)
diff --git a/configure.py b/configure.py
index 274620e60..1a3dfe0f7 100755
--- a/configure.py
+++ b/configure.py
@@ -316,7 +316,7 @@ def lex_me_harder(infofile, to_obj, allowed_groups, name_val_pairs):
for group in allowed_groups:
to_obj.__dict__[group] = []
- for (key,val) in name_val_pairs.iteritems():
+ for (key,val) in name_val_pairs.items():
to_obj.__dict__[key] = val
def lexed_tokens(): # Convert to an interator
@@ -381,7 +381,15 @@ class ModuleInfo(object):
and not filename.startswith('.')]
# Coerce to more useful types
- self.libs = force_to_dict(self.libs)
+ def convert_lib_list(l):
+ result = {}
+ for (targetlist, vallist) in zip(l[::3], l[2::3]):
+ vals = vallist.split(',')
+ for target in targetlist.split(','):
+ result[target] = result.setdefault(target, []) + vals
+ return result
+
+ self.libs = convert_lib_list(self.libs)
def add_dir_name(filename):
if filename.count(':') == 0:
@@ -434,6 +442,17 @@ class ModuleInfo(object):
deps.append(self.parent_module)
return deps
+ """
+ Ensure that all dependencies of this module actually exist, warning
+ about any that do not
+ """
+ def dependencies_exist(self, modules):
+ all_deps = map(lambda s: s.split('|'), self.dependencies())
+
+ for missing in filter(lambda s: s not in modules, sum(all_deps, [])):
+ logging.warn("Module '%s', dep of '%s', does not exist" % (
+ missing, self.basename))
+
def __cmp__(self, other):
if self.basename < other.basename:
return -1
@@ -665,7 +684,7 @@ class OsInfo(object):
def defines(self):
return ['TARGET_OS_IS_%s' % (self.basename.upper())] + \
['TARGET_OS_HAS_' + feat.upper()
- for feat in self.target_features]
+ for feat in sorted(self.target_features)]
def fixup_proc_name(proc):
proc = proc.lower().replace(' ', '')
@@ -739,15 +758,15 @@ def create_template_vars(build_config, options, modules, cc, arch, osinfo):
def link_to():
libs = set()
for module in modules:
- for (osname,link_to) in module.libs.iteritems():
+ for (osname,link_to) in module.libs.items():
if osname == 'all' or osname == osinfo.basename:
- libs.add(link_to)
+ libs |= set(link_to)
else:
match = re.match('^all!(.*)', osname)
if match is not None:
exceptions = match.group(1).split(',')
if osinfo.basename not in exceptions:
- libs.add(link_to)
+ libs |= set(link_to)
return sorted(libs)
def objectfile_list(sources, obj_dir):
@@ -913,6 +932,9 @@ Determine which modules to load based on options, target, etc
"""
def choose_modules_to_use(modules, archinfo, options):
+ for mod in modules.values():
+ mod.dependencies_exist(modules)
+
to_load = []
maybe_dep = []
not_using_because = {}
@@ -920,7 +942,7 @@ def choose_modules_to_use(modules, archinfo, options):
def cannot_use_because(mod, reason):
not_using_because.setdefault(reason, []).append(mod)
- for (modname, module) in modules.iteritems():
+ for (modname, module) in modules.items():
if modname in options.disabled_modules:
cannot_use_because(modname, 'disabled by user')
elif modname in options.enabled_modules:
diff --git a/doc/examples/bench.cpp b/doc/examples/bench.cpp
index cc43fade0..6a15df7c0 100644
--- a/doc/examples/bench.cpp
+++ b/doc/examples/bench.cpp
@@ -64,11 +64,10 @@ void benchmark_algo(const std::string& algo,
RandomNumberGenerator& rng)
{
u32bit milliseconds = 3000;
- Default_Benchmark_Timer timer;
Algorithm_Factory& af = global_state().algorithm_factory();
std::map<std::string, double> speeds =
- algorithm_benchmark(algo, milliseconds, timer, rng, af);
+ algorithm_benchmark(algo, milliseconds, rng, af);
std::cout << algo << ":";
diff --git a/doc/examples/benchmark.cpp b/doc/examples/benchmark.cpp
index d046e8d20..fa91726e5 100644
--- a/doc/examples/benchmark.cpp
+++ b/doc/examples/benchmark.cpp
@@ -17,7 +17,6 @@ int main(int argc, char* argv[])
Botan::LibraryInitializer init;
Botan::AutoSeeded_RNG rng;
- Botan::Default_Benchmark_Timer timer;
Botan::Algorithm_Factory& af = Botan::global_state().algorithm_factory();
@@ -28,7 +27,7 @@ int main(int argc, char* argv[])
std::string algo = argv[i];
std::map<std::string, double> results =
- Botan::algorithm_benchmark(algo, ms, timer, rng, af);
+ Botan::algorithm_benchmark(algo, ms, rng, af);
std::cout << algo << ":\n";
for(std::map<std::string, double>::iterator r = results.begin();
diff --git a/doc/examples/ca.cpp b/doc/examples/ca.cpp
index 9195be418..b98e6620e 100644
--- a/doc/examples/ca.cpp
+++ b/doc/examples/ca.cpp
@@ -15,7 +15,7 @@
#include <botan/botan.h>
#include <botan/x509_ca.h>
-#include <botan/util.h>
+#include <botan/timer.h>
using namespace Botan;
#include <iostream>
diff --git a/doc/examples/gen_certs.cpp b/doc/examples/gen_certs.cpp
index 90cb80038..1c95402f4 100644
--- a/doc/examples/gen_certs.cpp
+++ b/doc/examples/gen_certs.cpp
@@ -5,7 +5,7 @@
#include <botan/botan.h>
#include <botan/rsa.h>
-#include <botan/util.h>
+#include <botan/timer.h>
#include <botan/x509self.h>
#include <botan/x509_ca.h>
diff --git a/doc/examples/hash_quickly.cpp b/doc/examples/hash_quickly.cpp
index e719a7178..c8c8ca5fb 100644
--- a/doc/examples/hash_quickly.cpp
+++ b/doc/examples/hash_quickly.cpp
@@ -23,12 +23,10 @@ void set_fastest_implementation(const std::string& algo,
Botan::RandomNumberGenerator& rng,
double ms = 30)
{
- Botan::Default_Benchmark_Timer timer;
-
Botan::Algorithm_Factory& af = Botan::global_state().algorithm_factory();
std::map<std::string, double> results =
- Botan::algorithm_benchmark(algo, ms, timer, rng, af);
+ Botan::algorithm_benchmark(algo, ms, rng, af);
std::string fastest_provider = "";
double best_res = 0;
diff --git a/readme.txt b/readme.txt
index 5f729b436..55c5452ea 100644
--- a/readme.txt
+++ b/readme.txt
@@ -3,19 +3,13 @@ Botan 1.9.4-dev, ????-??-??
Botan is a C++ class library for performing a wide variety of
cryptographic operations.
-I consider this release the best version available, and recommend all
-users upgrade from 1.6 or earlier versions as soon as possible. Some
-APIs have changed incompatibly since the 1.6 release series, but most
-applications should work as-is or with only simple modifications.
-
-Botan is under a BSD-like license, the details of which can be found
-in license.txt. More information about the authors and contributors
-can be found in credits.txt and thanks.txt. All of these files are
-included in the doc/ directory of the source distribution.
-
-You can file bugs in Bugzilla, which can be accessed at
- http://www.randombit.net/bugzilla/
-or by sending a report to the botan-devel mailing list
+Botan is released under the BSD license. See license.txt for the
+specifics. More information about the authors and contributors can be
+found in credits.txt and thanks.txt. All of these files are included
+in the doc/ directory of the source distribution.
+
+You can file bugs at http://bugs.randombit.net/ or by sending a report
+to the botan-devel mailing list:
http://lists.randombit.net/mailman/listinfo/botan-devel/
In the doc directory, there should be a set of PDFs, including
@@ -34,10 +28,10 @@ Botan in:
- Ajisai (SSLv3/TLSv1)
http://www.randombit.net/code/ajisai/
-Check the project's website at http://botan.randombit.net/ for
-announcements and new releases. If you'll be developing code using
-this library, consider joining the mailing lists to keep up to date
-with changes and new releases.
+Check http://botan.randombit.net/ for announcements and new
+releases. If you'll be developing code using this library, consider
+joining the mailing lists to keep up to date with changes and new
+releases.
As always, feel free to contact me with any questions or comments.
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 <botan/ber_dec.h>
#include <botan/charset.h>
#include <botan/parsing.h>
-#include <botan/timer.h>
+#include <botan/time.h>
namespace Botan {
diff --git a/src/asn1/info.txt b/src/asn1/info.txt
index 621b8b628..d836b4c0b 100644
--- a/src/asn1/info.txt
+++ b/src/asn1/info.txt
@@ -26,5 +26,4 @@ alloc
bigint
filters
oid_lookup
-timer
</requires>
diff --git a/src/benchmark/benchmark.cpp b/src/benchmark/benchmark.cpp
index 41c9cd10c..69d3a40ec 100644
--- a/src/benchmark/benchmark.cpp
+++ b/src/benchmark/benchmark.cpp
@@ -11,6 +11,7 @@
#include <botan/stream_cipher.h>
#include <botan/hash.h>
#include <botan/mac.h>
+#include <botan/time.h>
#include <memory>
namespace Botan {
@@ -21,19 +22,19 @@ namespace {
* Benchmark BufferedComputation (hash or MAC)
*/
std::pair<u64bit, u64bit> 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;
+ const u64bit start = get_nanoseconds_clock();
+ u64bit nanoseconds_used = 0;
+
while(nanoseconds_used < nanoseconds_max)
{
buf_comp->update(buf, buf_len);
++reps;
- nanoseconds_used = timer.clock() - start;
+ nanoseconds_used = get_nanoseconds_clock() - start;
}
return std::make_pair(reps * buf_len, nanoseconds_used);
@@ -44,15 +45,15 @@ std::pair<u64bit, u64bit> bench_buf_comp(BufferedComputation* buf_comp,
*/
std::pair<u64bit, u64bit>
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;
+ const u64bit start = get_nanoseconds_clock();
+ u64bit nanoseconds_used = 0;
block_cipher->set_key(buf, block_cipher->MAXIMUM_KEYLENGTH);
@@ -61,7 +62,7 @@ bench_block_cipher(BlockCipher* block_cipher,
block_cipher->encrypt_n(buf, buf, in_blocks);
++reps;
- nanoseconds_used = timer.clock() - start;
+ nanoseconds_used = get_nanoseconds_clock() - start;
}
return std::make_pair(reps * in_blocks * block_cipher->BLOCK_SIZE,
@@ -73,21 +74,21 @@ bench_block_cipher(BlockCipher* block_cipher,
*/
std::pair<u64bit, u64bit>
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;
+ const u64bit start = get_nanoseconds_clock();
+ u64bit nanoseconds_used = 0;
+
stream_cipher->set_key(buf, stream_cipher->MAXIMUM_KEYLENGTH);
while(nanoseconds_used < nanoseconds_max)
{
stream_cipher->cipher1(buf, buf_len);
++reps;
- nanoseconds_used = timer.clock() - start;
+ nanoseconds_used = get_nanoseconds_clock() - start;
}
return std::make_pair(reps * buf_len, nanoseconds_used);
@@ -97,11 +98,11 @@ bench_stream_cipher(StreamCipher* stream_cipher,
* Benchmark hash
*/
std::pair<u64bit, u64bit>
-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);
}
/**
@@ -109,12 +110,11 @@ bench_hash(HashFunction* hash, Timer& timer,
*/
std::pair<u64bit, u64bit>
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);
}
}
@@ -122,7 +122,6 @@ bench_mac(MessageAuthenticationCode* mac,
std::map<std::string, double>
algorithm_benchmark(const std::string& name,
u32bit milliseconds,
- Timer& timer,
RandomNumberGenerator& rng,
Algorithm_Factory& af)
{
@@ -148,7 +147,7 @@ algorithm_benchmark(const std::string& name,
af.prototype_block_cipher(name, provider))
{
std::auto_ptr<BlockCipher> 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());
}
@@ -156,7 +155,7 @@ algorithm_benchmark(const std::string& name,
af.prototype_stream_cipher(name, provider))
{
std::auto_ptr<StreamCipher> 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());
}
@@ -164,14 +163,14 @@ algorithm_benchmark(const std::string& name,
af.prototype_hash_function(name, provider))
{
std::auto_ptr<HashFunction> 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<MessageAuthenticationCode> 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 1b2730105..9c4e410f1 100644
--- a/src/benchmark/benchmark.h
+++ b/src/benchmark/benchmark.h
@@ -9,40 +9,16 @@
#define BOTAN_RUNTIME_BENCHMARK_H__
#include <botan/algo_factory.h>
-#include <botan/timer.h>
#include <botan/rng.h>
#include <map>
#include <string>
-/**
-* 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 <botan/tm_posix.h>
-#elif defined(BOTAN_HAS_TIMER_UNIX)
- #include <botan/tm_unix.h>
-#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)
* @param milliseconds total time for the benchmark to run
-* @param timer the timer to use
* @param rng the rng to use to generate random inputs
* @param af the algorithm factory used to create objects
* @return results a map from provider to speed in mebibytes per second
@@ -50,7 +26,6 @@ namespace Botan {
std::map<std::string, double>
BOTAN_DLL 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 f148ae5ce..0210971f7 100644
--- a/src/benchmark/info.txt
+++ b/src/benchmark/info.txt
@@ -15,5 +15,4 @@ hash
mac
rng
stream
-timer
</requires>
diff --git a/src/block/serpent_simd/serp_simd_sbox.h b/src/block/serpent_simd/serp_simd_sbox.h
index fe70f0063..71eca19e5 100644
--- a/src/block/serpent_simd/serp_simd_sbox.h
+++ b/src/block/serpent_simd/serp_simd_sbox.h
@@ -5,8 +5,8 @@
* Distributed under the terms of the Botan license
*/
-#ifndef SERPENT_SIMD_SBOXES_H__
-#define SERPENT_SIMD_SBOXES_H__
+#ifndef BOTAN_SERPENT_SIMD_SBOXES_H__
+#define BOTAN_SERPENT_SIMD_SBOXES_H__
#define SBoxE1(B0, B1, B2, B3) \
do { \
diff --git a/src/build-data/os/aix.txt b/src/build-data/os/aix.txt
index 0063948c7..312377096 100644
--- a/src/build-data/os/aix.txt
+++ b/src/build-data/os/aix.txt
@@ -1,5 +1,9 @@
os_type unix
+<target_features>
+gettimeofday
+</target_features>
+
<supports_shared>
all
</supports_shared>
diff --git a/src/build-data/os/beos.txt b/src/build-data/os/beos.txt
index b843bd525..f6a06b7af 100644
--- a/src/build-data/os/beos.txt
+++ b/src/build-data/os/beos.txt
@@ -5,6 +5,10 @@ header_dir ../develop/headers
lib_dir system/lib
doc_dir documentation
+<target_features>
+gettimeofday
+</target_features>
+
<supports_shared>
all
</supports_shared>
diff --git a/src/build-data/os/cygwin.txt b/src/build-data/os/cygwin.txt
index 7290648c2..f7c1f49ed 100644
--- a/src/build-data/os/cygwin.txt
+++ b/src/build-data/os/cygwin.txt
@@ -3,6 +3,10 @@ os_type unix
install_root c:\Botan
doc_dir docs
+<target_features>
+gettimeofday
+</target_features>
+
# Cygwin supports shared libs fine, but there are problems with making a Botan
# shared library when libraries it depends on are static-only (such as libz).
# So until I can figure out a work-around, it's disabled.
diff --git a/src/build-data/os/darwin.txt b/src/build-data/os/darwin.txt
index fb18ee191..af60e1bed 100644
--- a/src/build-data/os/darwin.txt
+++ b/src/build-data/os/darwin.txt
@@ -8,6 +8,10 @@ ar_needs_ranlib yes
doc_dir doc
+<target_features>
+gettimeofday
+</target_features>
+
<supports_shared>
all
</supports_shared>
diff --git a/src/build-data/os/dragonfly.txt b/src/build-data/os/dragonfly.txt
index 6823de5b6..7a002a65d 100644
--- a/src/build-data/os/dragonfly.txt
+++ b/src/build-data/os/dragonfly.txt
@@ -1,6 +1,8 @@
os_type unix
<target_features>
+clock_gettime
+gettimeofday
posix_mlock
</target_features>
diff --git a/src/build-data/os/freebsd.txt b/src/build-data/os/freebsd.txt
index 6823de5b6..3bcf58d62 100644
--- a/src/build-data/os/freebsd.txt
+++ b/src/build-data/os/freebsd.txt
@@ -2,6 +2,7 @@ os_type unix
<target_features>
posix_mlock
+gettimeofday
</target_features>
<supports_shared>
diff --git a/src/build-data/os/hpux.txt b/src/build-data/os/hpux.txt
index 9ff0f7f62..e7aa30e9c 100644
--- a/src/build-data/os/hpux.txt
+++ b/src/build-data/os/hpux.txt
@@ -2,6 +2,10 @@ os_type unix
so_suffix sl
+<target_features>
+gettimeofday
+</target_features>
+
<supports_shared>
all
</supports_shared>
diff --git a/src/build-data/os/irix.txt b/src/build-data/os/irix.txt
index 0063948c7..312377096 100644
--- a/src/build-data/os/irix.txt
+++ b/src/build-data/os/irix.txt
@@ -1,5 +1,9 @@
os_type unix
+<target_features>
+gettimeofday
+</target_features>
+
<supports_shared>
all
</supports_shared>
diff --git a/src/build-data/os/linux.txt b/src/build-data/os/linux.txt
index 3a92f9dd7..b3c227533 100644
--- a/src/build-data/os/linux.txt
+++ b/src/build-data/os/linux.txt
@@ -1,6 +1,8 @@
os_type unix
<target_features>
+clock_gettime
+gettimeofday
posix_mlock
</target_features>
diff --git a/src/build-data/os/netbsd.txt b/src/build-data/os/netbsd.txt
index 0063948c7..312377096 100644
--- a/src/build-data/os/netbsd.txt
+++ b/src/build-data/os/netbsd.txt
@@ -1,5 +1,9 @@
os_type unix
+<target_features>
+gettimeofday
+</target_features>
+
<supports_shared>
all
</supports_shared>
diff --git a/src/build-data/os/openbsd.txt b/src/build-data/os/openbsd.txt
index 0063948c7..312377096 100644
--- a/src/build-data/os/openbsd.txt
+++ b/src/build-data/os/openbsd.txt
@@ -1,5 +1,9 @@
os_type unix
+<target_features>
+gettimeofday
+</target_features>
+
<supports_shared>
all
</supports_shared>
diff --git a/src/build-data/os/qnx.txt b/src/build-data/os/qnx.txt
index 0063948c7..312377096 100644
--- a/src/build-data/os/qnx.txt
+++ b/src/build-data/os/qnx.txt
@@ -1,5 +1,9 @@
os_type unix
+<target_features>
+gettimeofday
+</target_features>
+
<supports_shared>
all
</supports_shared>
diff --git a/src/build-data/os/solaris.txt b/src/build-data/os/solaris.txt
index 47b06dcc4..df951d4fc 100644
--- a/src/build-data/os/solaris.txt
+++ b/src/build-data/os/solaris.txt
@@ -2,6 +2,7 @@ os_type unix
<target_features>
posix_mlock
+gettimeofday
</target_features>
<supports_shared>
diff --git a/src/build-data/os/tru64.txt b/src/build-data/os/tru64.txt
index 8fc301d79..677c38955 100644
--- a/src/build-data/os/tru64.txt
+++ b/src/build-data/os/tru64.txt
@@ -1,5 +1,9 @@
os_type unix
+<target_features>
+gettimeofday
+</target_features>
+
<supports_shared>
all
</supports_shared>
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 <botan/charset.h>
#include <botan/parsing.h>
#include <botan/rounding.h>
-#include <botan/timer.h>
+#include <botan/time.h>
namespace Botan {
diff --git a/src/cert/cvc/cvc_self.cpp b/src/cert/cvc/cvc_self.cpp
index 777347a18..227ff4136 100644
--- a/src/cert/cvc/cvc_self.cpp
+++ b/src/cert/cvc/cvc_self.cpp
@@ -14,7 +14,7 @@
#include <botan/look_pk.h>
#include <botan/cvc_req.h>
#include <botan/cvc_ado.h>
-#include <botan/timer.h>
+#include <botan/time.h>
#include <sstream>
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 <botan/ber_dec.h>
#include <botan/bigint.h>
#include <botan/oids.h>
-#include <botan/timer.h>
+#include <botan/time.h>
namespace Botan {
diff --git a/src/cert/x509/x509_ca.cpp b/src/cert/x509/x509_ca.cpp
index a4159ad2b..16b7b3b9b 100644
--- a/src/cert/x509/x509_ca.cpp
+++ b/src/cert/x509/x509_ca.cpp
@@ -14,7 +14,7 @@
#include <botan/lookup.h>
#include <botan/look_pk.h>
#include <botan/oids.h>
-#include <botan/timer.h>
+#include <botan/time.h>
#include <algorithm>
#include <typeinfo>
#include <iterator>
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 <botan/x509self.h>
#include <botan/oids.h>
#include <botan/parsing.h>
-#include <botan/timer.h>
+#include <botan/time.h>
namespace Botan {
diff --git a/src/cert/x509/x509stor.cpp b/src/cert/x509/x509stor.cpp
index 40801148c..e9e8f4575 100644
--- a/src/cert/x509/x509stor.cpp
+++ b/src/cert/x509/x509stor.cpp
@@ -10,7 +10,7 @@
#include <botan/pubkey.h>
#include <botan/look_pk.h>
#include <botan/oids.h>
-#include <botan/timer.h>
+#include <botan/time.h>
#include <algorithm>
#include <memory>
diff --git a/src/constructs/aont/package.h b/src/constructs/aont/package.h
index 35d2a23fc..5024c0421 100644
--- a/src/constructs/aont/package.h
+++ b/src/constructs/aont/package.h
@@ -6,6 +6,9 @@
* Distributed under the terms of the Botan license
*/
+#ifndef BOTAN_AONT_PACKAGE_TRANSFORM_H__
+#define BOTAN_AONT_PACKAGE_TRANSFORM_H__
+
#include <botan/block_cipher.h>
#include <botan/rng.h>
@@ -43,3 +46,5 @@ void unpackage(BlockCipher* cipher,
}
}
+
+#endif
diff --git a/src/timer/cpu_counter/tm_hard.cpp b/src/entropy/hres_timer/hres_timer.cpp
index 9e31aee39..74ea801c4 100644
--- a/src/timer/cpu_counter/tm_hard.cpp
+++ b/src/entropy/hres_timer/hres_timer.cpp
@@ -1,25 +1,43 @@
/*
-* Hardware Timer
-* (C) 1999-2007 Jack Lloyd
+* High Resolution Timestamp Entropy Source
+* (C) 1999-2009 Jack Lloyd
*
* Distributed under the terms of the Botan license
*/
-#include <botan/tm_hard.h>
+#include <botan/hres_timer.h>
+#include <botan/cpuid.h>
+#include <botan/time.h>
+
+#if defined(BOTAN_TARGET_OS_IS_WINDOWS)
+ #include <windows.h>
+#endif
namespace Botan {
/*
* Get the timestamp
*/
-u64bit Hardware_Timer::clock() const
+void High_Resolution_Timestamp::poll(Entropy_Accumulator& accum)
{
+ // If Windows, grab the Performance Counter (usually TSC or PIT)
+#if defined(BOTAN_TARGET_OS_IS_WINDOWS)
+ LARGE_INTEGER tv;
+ ::QueryPerformanceCounter(&tv);
+ accum.add(tv.QuadPart, 0);
+#endif
+
+#if defined(BOTAN_USE_GCC_INLINE_ASM)
+
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<u64bit>(rtc_high) << 32) | rtc_low;
+ if(CPUID::has_rdtsc()) // not availble on all x86 CPUs
+ {
+ u32bit rtc_low = 0, rtc_high = 0;
+ asm volatile("rdtsc" : "=d" (rtc_high), "=a" (rtc_low));
+ rtc = (static_cast<u64bit>(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;
@@ -41,11 +59,12 @@ u64bit Hardware_Timer::clock() const
#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;
+ // Don't count the timestamp as contributing entropy
+ accum.add(rtc, 0);
+
+#endif
}
}
diff --git a/src/entropy/hres_timer/hres_timer.h b/src/entropy/hres_timer/hres_timer.h
new file mode 100644
index 000000000..8dfbfc2d7
--- /dev/null
+++ b/src/entropy/hres_timer/hres_timer.h
@@ -0,0 +1,27 @@
+/*
+* High Resolution Timestamp Entropy Source
+* (C) 1999-2009 Jack Lloyd
+*
+* Distributed under the terms of the Botan license
+*/
+
+#ifndef BOTAN_ENTROPY_SRC_HRES_TIMER_H__
+#define BOTAN_ENTROPY_SRC_HRES_TIMER_H__
+
+#include <botan/entropy_src.h>
+
+namespace Botan {
+
+/*
+* High Resolution Timestamp Source
+*/
+class BOTAN_DLL High_Resolution_Timestamp : public EntropySource
+ {
+ public:
+ std::string name() const { return "High Resolution Timestamp"; }
+ void poll(Entropy_Accumulator& accum);
+ };
+
+}
+
+#endif
diff --git a/src/entropy/hres_timer/info.txt b/src/entropy/hres_timer/info.txt
new file mode 100644
index 000000000..6c6454f5d
--- /dev/null
+++ b/src/entropy/hres_timer/info.txt
@@ -0,0 +1 @@
+define ENTROPY_SRC_HIGH_RESOLUTION_TIMER
diff --git a/src/libstate/botan.h b/src/libstate/botan.h
index 3fa131216..a88edb59b 100644
--- a/src/libstate/botan.h
+++ b/src/libstate/botan.h
@@ -5,6 +5,9 @@
* Distributed under the terms of the Botan license
*/
+#ifndef BOTAN_BOTAN_H__
+#define BOTAN_BOTAN_H__
+
#include <botan/init.h>
#include <botan/lookup.h>
#include <botan/libstate.h>
@@ -16,3 +19,5 @@
#if defined(BOTAN_HAS_AUTO_SEEDING_RNG)
#include <botan/auto_rng.h>
#endif
+
+#endif
diff --git a/src/rng/auto_rng/auto_rng.cpp b/src/rng/auto_rng/auto_rng.cpp
index f02a9249f..6906d9d17 100644
--- a/src/rng/auto_rng/auto_rng.cpp
+++ b/src/rng/auto_rng/auto_rng.cpp
@@ -7,7 +7,6 @@
#include <botan/auto_rng.h>
#include <botan/parsing.h>
-#include <botan/timer.h>
#include <botan/hmac.h>
#include <botan/sha2_32.h>
#include <botan/sha2_64.h>
@@ -28,20 +27,8 @@
#include <botan/aes.h>
#endif
-#if defined(BOTAN_HAS_TIMER_HARDWARE)
- #include <botan/tm_hard.h>
-#endif
-
-#if defined(BOTAN_HAS_TIMER_POSIX)
- #include <botan/tm_posix.h>
-#endif
-
-#if defined(BOTAN_HAS_TIMER_UNIX)
- #include <botan/tm_unix.h>
-#endif
-
-#if defined(BOTAN_HAS_TIMER_WIN32)
- #include <botan/tm_win32.h>
+#if defined(BOTAN_HAS_ENTROPY_SRC_HIGH_RESOLUTION_TIMER)
+ #include <botan/hres_timer.h>
#endif
#if defined(BOTAN_HAS_ENTROPY_SRC_DEVICE)
@@ -81,16 +68,8 @@ namespace {
*/
void add_entropy_sources(RandomNumberGenerator* rng)
{
-
- // Add a high resolution timer, if available
-#if defined(BOTAN_HAS_TIMER_HARDWARE)
- rng->add_entropy_source(new Hardware_Timer);
-#elif defined(BOTAN_HAS_TIMER_POSIX)
- rng->add_entropy_source(new POSIX_Timer);
-#elif defined(BOTAN_HAS_TIMER_UNIX)
- rng->add_entropy_source(new Unix_Timer);
-#elif defined(BOTAN_HAS_TIMER_WIN32)
- rng->add_entropy_source(new Win32_Timer);
+#if defined(BOTAN_HAS_ENTROPY_SRC_HIGH_RESOLUTION_TIMER)
+ rng->add_entropy_source(new High_Resolution_Timestamp);
#endif
#if defined(BOTAN_HAS_ENTROPY_SRC_DEVICE)
diff --git a/src/rng/auto_rng/info.txt b/src/rng/auto_rng/info.txt
index d5abfc757..357dc17ad 100644
--- a/src/rng/auto_rng/info.txt
+++ b/src/rng/auto_rng/info.txt
@@ -10,5 +10,4 @@ auto_rng.cpp
<requires>
hmac
sha2
-timer
</requires>
diff --git a/src/rng/randpool/randpool.cpp b/src/rng/randpool/randpool.cpp
index fb51db300..8f9a16edc 100644
--- a/src/rng/randpool/randpool.cpp
+++ b/src/rng/randpool/randpool.cpp
@@ -8,7 +8,6 @@
#include <botan/randpool.h>
#include <botan/loadstor.h>
#include <botan/xor_buf.h>
-#include <botan/timer.h>
#include <botan/stl_util.h>
#include <algorithm>
@@ -51,12 +50,9 @@ void Randpool::randomize(byte out[], u32bit length)
*/
void Randpool::update_buffer()
{
- const u64bit timestamp = system_time();
-
for(u32bit i = 0; i != counter.size(); ++i)
if(++counter[i])
break;
- store_be(timestamp, counter + 4);
mac->update(static_cast<byte>(GEN_OUTPUT));
mac->update(counter, counter.size());
diff --git a/src/timer/cpu_counter/info.txt b/src/timer/cpu_counter/info.txt
deleted file mode 100644
index 2ab1343bc..000000000
--- a/src/timer/cpu_counter/info.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-define TIMER_HARDWARE
-
-load_on asm_ok
-
-<add>
-tm_hard.cpp
-tm_hard.h
-</add>
-
-<cc>
-gcc
-</cc>
-
-<arch>
-
-# RDTSC: Pentium and up
-i586
-i686
-athlon
-pentium3
-pentium4
-pentium-m
-amd64
-
-ppc # PPC timebase register
-ppc64 # PPC timebase register
-alpha # rpcc
-sparc64 # %tick register
-ia64 # ar.itc
-s390x
-hppa
-</arch>
-
-<requires>
-timer
-</requires>
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 <botan/timer.h>
-
-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 d1f6f7d74..000000000
--- a/src/timer/gettimeofday/info.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-define TIMER_UNIX
-
-load_on auto
-
-<os>
-aix
-beos
-cygwin
-darwin
-freebsd
-dragonfly
-hpux
-irix
-linux
-netbsd
-openbsd
-qnx
-solaris
-tru64
-</os>
-
-<requires>
-timer
-</requires>
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 <botan/tm_unix.h>
-#include <sys/time.h>
-
-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 <botan/timer.h>
-
-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 1dff5ab6f..000000000
--- a/src/timer/info.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-define TIMER
-
-load_on auto
-
-<add>
-timer.cpp
-timer.h
-</add>
-
-<requires>
-rng
-</requires>
diff --git a/src/timer/posix_rt/info.txt b/src/timer/posix_rt/info.txt
deleted file mode 100644
index 4b23a74fc..000000000
--- a/src/timer/posix_rt/info.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-define TIMER_POSIX
-
-load_on auto
-
-<add>
-tm_posix.cpp
-tm_posix.h
-</add>
-
-<libs>
-linux -> rt
-</libs>
-
-# The *BSDs put clock_gettime in sys/time.h, not time.h like POSIX says
-<os>
-cygwin
-linux
-#freebsd
-dragonfly
-#netbsd
-#openbsd
-</os>
-
-<requires>
-timer
-</requires>
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 <botan/tm_posix.h>
-
-#ifndef _POSIX_C_SOURCE
- #define _POSIX_C_SOURCE 199309
-#endif
-
-#include <time.h>
-
-#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 <botan/timer.h>
-
-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.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 <botan/rng.h>
-#include <ctime>
-
-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 67db5bc95..000000000
--- a/src/timer/win32_query_perf_ctr/info.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-define TIMER_WIN32
-
-load_on auto
-
-<os>
-cygwin
-windows
-mingw
-</os>
-
-<libs>
-windows -> user32.lib
-</libs>
-
-<requires>
-timer
-</requires>
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 <botan/tm_win32.h>
-#include <windows.h>
-
-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 <botan/timer.h>
-
-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/info.txt b/src/utils/info.txt
index 3d024fa09..110afeb64 100644
--- a/src/utils/info.txt
+++ b/src/utils/info.txt
@@ -3,5 +3,5 @@ define UTIL_FUNCTIONS
load_on always
<libs>
-tru64 -> rt
+linux,tru64 -> rt
</libs>
diff --git a/src/timer/timer.cpp b/src/utils/time.cpp
index 16d7dc368..856b1c7be 100644
--- a/src/timer/timer.cpp
+++ b/src/utils/time.cpp
@@ -1,16 +1,50 @@
/**
-* Timestamp Functions
+* Time Functions
* (C) 1999-2009 Jack Lloyd
*
* Distributed under the terms of the Botan license
*/
-#include <botan/timer.h>
-#include <botan/loadstor.h>
+#include <botan/time.h>
+#include <botan/exceptn.h>
#include <ctime>
+#if defined(BOTAN_TARGET_OS_HAS_GETTIMEOFDAY)
+ #include <sys/time.h>
+#endif
+
+#if defined(BOTAN_TARGET_OS_HAS_CLOCK_GETTIME)
+
+#ifndef _POSIX_C_SOURCE
+ #define _POSIX_C_SOURCE 199309
+#endif
+
+#include <time.h>
+
+#ifndef CLOCK_REALTIME
+ #define CLOCK_REALTIME 0
+#endif
+
+#endif
+
namespace Botan {
+namespace {
+
+/**
+* Combine a two time values into a single one
+*/
+u64bit 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;
+ }
+
+}
+
/**
* Get the system clock
*/
@@ -32,33 +66,22 @@ std::tm time_t_to_tm(u64bit timer)
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)
+u64bit get_nanoseconds_clock()
{
- static const u64bit NANOSECONDS_UNITS = 1000000000;
+#if defined(BOTAN_TARGET_OS_HAS_CLOCK_GETTIME)
+ struct ::timespec tv;
+ ::clock_gettime(CLOCK_REALTIME, &tv);
+ return combine_timers(tv.tv_sec, tv.tv_nsec, 1000000000);
- u64bit res = seconds * NANOSECONDS_UNITS;
- res += parts * (NANOSECONDS_UNITS / parts_hz);
- return res;
- }
+#elif defined(BOTAN_TARGET_OS_HAS_GETTIMEOFDAY)
+ struct ::timeval tv;
+ ::gettimeofday(&tv, 0);
+ return combine_timers(tv.tv_sec, tv.tv_usec, 1000000);
-/**
-* ANSI Clock
-*/
-u64bit ANSI_Clock_Timer::clock() const
- {
+#else
return combine_timers(std::time(0), std::clock(), CLOCKS_PER_SEC);
+
+#endif
}
}
diff --git a/src/utils/time.h b/src/utils/time.h
new file mode 100644
index 000000000..c7f459096
--- /dev/null
+++ b/src/utils/time.h
@@ -0,0 +1,30 @@
+/**
+* Time Functions
+* (C) 1999-2009 Jack Lloyd
+*
+* Distributed under the terms of the Botan license
+*/
+
+#ifndef BOTAN_TIME_H__
+#define BOTAN_TIME_H__
+
+#include <botan/types.h>
+#include <ctime>
+
+namespace Botan {
+
+/*
+* Time Access/Conversion Functions
+*/
+BOTAN_DLL u64bit system_time();
+
+BOTAN_DLL std::tm time_t_to_tm(u64bit);
+
+/**
+@return nanoseconds resolution timestamp, unknown epoch
+*/
+BOTAN_DLL u64bit get_nanoseconds_clock();
+
+}
+
+#endif