aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--[-rwxr-xr-x]checks/ecc_testdata/DE1_flen_chars_cvcRequest_ECDSA.derbin158 -> 158 bytes
-rw-r--r--[-rwxr-xr-x]checks/ecc_testdata/Lidia.cerbin985 -> 985 bytes
-rw-r--r--[-rwxr-xr-x]checks/ecc_testdata/ado.cvcreqbin238 -> 238 bytes
-rw-r--r--[-rwxr-xr-x]checks/ecc_testdata/cvca01.cv.crtbin402 -> 402 bytes
-rw-r--r--[-rwxr-xr-x]checks/ecc_testdata/cvca_illegal_chars.cv.crtbin402 -> 402 bytes
-rw-r--r--[-rwxr-xr-x]checks/ecc_testdata/cvca_illegal_chars2.cv.crtbin402 -> 402 bytes
-rw-r--r--[-rwxr-xr-x]checks/ecc_testdata/link_SHA1.166.crtbin858 -> 858 bytes
-rw-r--r--[-rwxr-xr-x]checks/ecc_testdata/root2_SHA256.cerbin1790 -> 1790 bytes
-rw-r--r--[-rwxr-xr-x]checks/ecc_testdata/root_SHA1.163.crtbin860 -> 860 bytes
-rwxr-xr-xconfigure.pl98
-rwxr-xr-xconfigure.py143
-rw-r--r--doc/log.txt2
-rwxr-xr-xdoc/scripts/print_deps.py70
-rwxr-xr-xdoc/scripts/update_deps.py41
-rw-r--r--readme.txt2
-rw-r--r--src/algo_factory/info.txt13
-rw-r--r--src/alloc/alloc_mmap/info.txt4
-rw-r--r--src/alloc/info.txt1
-rw-r--r--src/alloc/mem_pool/info.txt8
-rw-r--r--src/alloc/secmem.h (renamed from src/utils/secmem.h)0
-rw-r--r--src/alloc/system_alloc/info.txt9
-rw-r--r--src/asn1/info.txt12
-rw-r--r--src/benchmark/info.txt10
-rw-r--r--src/block/info.txt9
-rw-r--r--src/block/lion/info.txt5
-rw-r--r--src/block/lubyrack/info.txt4
-rw-r--r--src/block/serpent_ia32/info.txt11
-rw-r--r--src/cert/cvc/info.txt18
-rw-r--r--src/cert/x509/info.txt21
-rw-r--r--src/checksum/adler32/info.txt4
-rw-r--r--src/checksum/crc24/info.txt4
-rw-r--r--src/checksum/crc32/info.txt4
-rw-r--r--src/cms/info.txt23
-rw-r--r--src/codec/base64/info.txt8
-rw-r--r--src/codec/bzip2/info.txt8
-rw-r--r--src/codec/hex/info.txt8
-rw-r--r--src/codec/openpgp/info.txt1
-rw-r--r--src/codec/zlib/info.txt8
-rw-r--r--src/engine/def_engine/info.txt8
-rw-r--r--src/engine/gnump/info.txt4
-rw-r--r--src/engine/info.txt9
-rw-r--r--src/engine/openssl/info.txt4
-rw-r--r--src/entropy/info.txt4
-rw-r--r--src/entropy/proc_walk/info.txt4
-rw-r--r--src/entropy/unix_procs/info.txt4
-rw-r--r--src/filters/data_src.cpp (renamed from src/utils/data_src.cpp)0
-rw-r--r--src/filters/data_src.h (renamed from src/utils/data_src.h)0
-rw-r--r--src/filters/info.txt14
-rw-r--r--src/hash/gost_3411/info.txt4
-rw-r--r--src/hash/info.txt8
-rw-r--r--src/hash/md4_ia32/info.txt11
-rw-r--r--src/hash/md5_ia32/info.txt12
-rw-r--r--src/hash/sha1_amd64/info.txt13
-rw-r--r--src/hash/sha1_ia32/info.txt12
-rw-r--r--src/hash/sha1_sse2/info.txt11
-rw-r--r--src/hash/skein/info.txt4
-rw-r--r--src/kdf/info.txt4
-rw-r--r--src/kdf/kdf1/info.txt7
-rw-r--r--src/kdf/kdf2/info.txt8
-rw-r--r--src/kdf/mgf1/info.txt8
-rw-r--r--src/kdf/ssl_prf/info.txt12
-rw-r--r--src/kdf/tls_prf/info.txt13
-rw-r--r--src/kdf/tls_prf/prf_tls.cpp62
-rw-r--r--src/kdf/tls_prf/prf_tls.h5
-rw-r--r--src/kdf/x942_prf/info.txt12
-rw-r--r--src/libstate/info.txt33
-rw-r--r--src/libstate/oid_lookup/info.txt9
-rw-r--r--src/libstate/scan_name.cpp (renamed from src/utils/scan_name.cpp)0
-rw-r--r--src/libstate/scan_name.h (renamed from src/utils/scan_name.h)0
-rw-r--r--src/mac/cbc_mac/info.txt4
-rw-r--r--src/mac/cmac/info.txt4
-rw-r--r--src/mac/hmac/info.txt4
-rw-r--r--src/mac/info.txt9
-rw-r--r--src/mac/ssl3mac/info.txt4
-rw-r--r--src/mac/x919_mac/info.txt4
-rw-r--r--src/math/bigint/info.txt17
-rw-r--r--src/math/bigint/monty_amd64/info.txt10
-rw-r--r--src/math/bigint/mulop_amd64/info.txt10
-rw-r--r--src/math/bigint/mulop_ia32/info.txt8
-rw-r--r--src/math/gfpmath/info.txt10
-rw-r--r--src/math/numbertheory/info.txt12
-rw-r--r--src/modes/cbc/info.txt2
-rw-r--r--src/modes/cts/info.txt3
-rw-r--r--src/modes/eax/info.txt6
-rw-r--r--src/modes/ecb/info.txt3
-rw-r--r--src/modes/info.txt1
-rw-r--r--src/modes/ofb/info.txt3
-rw-r--r--src/modes/xts/info.txt4
-rw-r--r--src/pbe/info.txt12
-rw-r--r--src/pbe/pbes1/info.txt6
-rw-r--r--src/pbe/pbes2/info.txt19
-rw-r--r--src/pk_pad/eme1/info.txt11
-rw-r--r--src/pk_pad/emsa1/info.txt4
-rw-r--r--src/pk_pad/emsa1_bsi/info.txt8
-rw-r--r--src/pk_pad/emsa2/info.txt1
-rw-r--r--src/pk_pad/emsa3/info.txt1
-rw-r--r--src/pk_pad/emsa4/info.txt2
-rw-r--r--src/pk_pad/hash_id/info.txt4
-rw-r--r--src/pk_pad/info.txt5
-rw-r--r--src/pubkey/dh/info.txt5
-rw-r--r--src/pubkey/dl_algo/info.txt4
-rw-r--r--src/pubkey/dl_group/info.txt4
-rw-r--r--src/pubkey/dlies/info.txt6
-rw-r--r--src/pubkey/dsa/info.txt17
-rw-r--r--src/pubkey/ec_dompar/info.txt3
-rw-r--r--src/pubkey/ecc_key/info.txt15
-rw-r--r--src/pubkey/ecdsa/info.txt21
-rw-r--r--src/pubkey/eckaeg/info.txt20
-rw-r--r--src/pubkey/elgamal/info.txt18
-rw-r--r--src/pubkey/if_algo/info.txt14
-rw-r--r--src/pubkey/info.txt (renamed from src/pubkey/pubkey/info.txt)26
-rw-r--r--src/pubkey/keypair/info.txt2
-rw-r--r--src/pubkey/nr/info.txt5
-rw-r--r--src/pubkey/pk_algs.cpp (renamed from src/pubkey/pubkey/pk_algs.cpp)0
-rw-r--r--src/pubkey/pk_algs.h (renamed from src/pubkey/pubkey/pk_algs.h)3
-rw-r--r--src/pubkey/pk_codecs/info.txt18
-rw-r--r--src/pubkey/pk_codecs/pkcs8.cpp (renamed from src/pubkey/pubkey/pkcs8.cpp)0
-rw-r--r--src/pubkey/pk_codecs/pkcs8.h (renamed from src/pubkey/pubkey/pkcs8.h)0
-rw-r--r--src/pubkey/pk_codecs/x509_key.cpp (renamed from src/pubkey/pubkey/x509_key.cpp)0
-rw-r--r--src/pubkey/pk_codecs/x509_key.h (renamed from src/pubkey/pubkey/x509_key.h)0
-rw-r--r--src/pubkey/pk_filts.cpp (renamed from src/pubkey/pubkey/pk_filts.cpp)0
-rw-r--r--src/pubkey/pk_filts.h (renamed from src/pubkey/pubkey/pk_filts.h)0
-rw-r--r--src/pubkey/pk_keys.cpp (renamed from src/pubkey/pubkey/pk_keys.cpp)0
-rw-r--r--src/pubkey/pk_keys.h (renamed from src/pubkey/pubkey/pk_keys.h)0
-rw-r--r--src/pubkey/pubkey.cpp (renamed from src/pubkey/pubkey/pubkey.cpp)0
-rw-r--r--src/pubkey/pubkey.h (renamed from src/pubkey/pubkey/pubkey.h)0
-rw-r--r--src/pubkey/pubkey_enums.cpp (renamed from src/pubkey/pubkey/pubkey_enums.cpp)0
-rw-r--r--src/pubkey/pubkey_enums.h (renamed from src/pubkey/pubkey/pubkey_enums.h)0
-rw-r--r--src/pubkey/rsa/info.txt14
-rw-r--r--src/pubkey/rw/info.txt14
-rw-r--r--src/rng/auto_rng/info.txt12
-rw-r--r--src/rng/hmac_rng/info.txt4
-rw-r--r--src/rng/info.txt4
-rw-r--r--src/rng/randpool/info.txt5
-rw-r--r--src/rng/x931_rng/info.txt2
-rw-r--r--src/s2k/info.txt10
-rw-r--r--src/s2k/pbkdf1/info.txt4
-rw-r--r--src/s2k/pbkdf2/info.txt4
-rw-r--r--src/s2k/pgps2k/info.txt4
-rw-r--r--src/selftest/info.txt23
-rw-r--r--src/stream/info.txt9
-rw-r--r--src/sym_algo/info.txt11
-rw-r--r--src/timer/info.txt4
-rw-r--r--src/utils/buf_comp/buf_comp.h (renamed from src/utils/buf_comp.h)0
-rw-r--r--src/utils/buf_comp/info.txt11
-rw-r--r--src/utils/datastor/datastor.cpp (renamed from src/utils/datastor.cpp)0
-rw-r--r--src/utils/datastor/datastor.h (renamed from src/utils/datastor.h)0
-rw-r--r--src/utils/datastor/info.txt13
-rw-r--r--src/utils/info.txt12
149 files changed, 873 insertions, 507 deletions
diff --git a/checks/ecc_testdata/DE1_flen_chars_cvcRequest_ECDSA.der b/checks/ecc_testdata/DE1_flen_chars_cvcRequest_ECDSA.der
index 358ca8f34..358ca8f34 100755..100644
--- a/checks/ecc_testdata/DE1_flen_chars_cvcRequest_ECDSA.der
+++ b/checks/ecc_testdata/DE1_flen_chars_cvcRequest_ECDSA.der
Binary files differ
diff --git a/checks/ecc_testdata/Lidia.cer b/checks/ecc_testdata/Lidia.cer
index 58c55689b..58c55689b 100755..100644
--- a/checks/ecc_testdata/Lidia.cer
+++ b/checks/ecc_testdata/Lidia.cer
Binary files differ
diff --git a/checks/ecc_testdata/ado.cvcreq b/checks/ecc_testdata/ado.cvcreq
index 09a14bbb4..09a14bbb4 100755..100644
--- a/checks/ecc_testdata/ado.cvcreq
+++ b/checks/ecc_testdata/ado.cvcreq
Binary files differ
diff --git a/checks/ecc_testdata/cvca01.cv.crt b/checks/ecc_testdata/cvca01.cv.crt
index 8f278167c..8f278167c 100755..100644
--- a/checks/ecc_testdata/cvca01.cv.crt
+++ b/checks/ecc_testdata/cvca01.cv.crt
Binary files differ
diff --git a/checks/ecc_testdata/cvca_illegal_chars.cv.crt b/checks/ecc_testdata/cvca_illegal_chars.cv.crt
index b1a3d266c..b1a3d266c 100755..100644
--- a/checks/ecc_testdata/cvca_illegal_chars.cv.crt
+++ b/checks/ecc_testdata/cvca_illegal_chars.cv.crt
Binary files differ
diff --git a/checks/ecc_testdata/cvca_illegal_chars2.cv.crt b/checks/ecc_testdata/cvca_illegal_chars2.cv.crt
index 00f09b618..00f09b618 100755..100644
--- a/checks/ecc_testdata/cvca_illegal_chars2.cv.crt
+++ b/checks/ecc_testdata/cvca_illegal_chars2.cv.crt
Binary files differ
diff --git a/checks/ecc_testdata/link_SHA1.166.crt b/checks/ecc_testdata/link_SHA1.166.crt
index 8f76b3203..8f76b3203 100755..100644
--- a/checks/ecc_testdata/link_SHA1.166.crt
+++ b/checks/ecc_testdata/link_SHA1.166.crt
Binary files differ
diff --git a/checks/ecc_testdata/root2_SHA256.cer b/checks/ecc_testdata/root2_SHA256.cer
index a2ecfed22..a2ecfed22 100755..100644
--- a/checks/ecc_testdata/root2_SHA256.cer
+++ b/checks/ecc_testdata/root2_SHA256.cer
Binary files differ
diff --git a/checks/ecc_testdata/root_SHA1.163.crt b/checks/ecc_testdata/root_SHA1.163.crt
index e1bf39f9a..e1bf39f9a 100755..100644
--- a/checks/ecc_testdata/root_SHA1.163.crt
+++ b/checks/ecc_testdata/root_SHA1.163.crt
Binary files differ
diff --git a/configure.pl b/configure.pl
index 0cdd402d7..85b1508b8 100755
--- a/configure.pl
+++ b/configure.pl
@@ -15,10 +15,12 @@ my $MAJOR_VERSION = 1;
my $MINOR_VERSION = 8;
my $PATCH_VERSION = 5;
+my $VERSION_SUFFIX = '-rc1';
+
my $SO_PATCH_VERSION = 5;
-my $VERSION_STRING = "$MAJOR_VERSION.$MINOR_VERSION.$PATCH_VERSION";
-my $SO_VERSION_STRING = "$MAJOR_VERSION.$MINOR_VERSION.$SO_PATCH_VERSION";
+my $VERSION_STRING = "$MAJOR_VERSION.$MINOR_VERSION.$PATCH_VERSION$VERSION_SUFFIX";
+my $SO_VERSION_STRING = "$MAJOR_VERSION.$MINOR_VERSION.$SO_PATCH_VERSION$VERSION_SUFFIX";
##################################################
# Data #
@@ -158,7 +160,7 @@ sub main {
'build_include_botan' =>
File::Spec->catdir($$config{'build_dir'}, 'include', 'botan'),
- 'mp_bits' => find_mp_bits(sort keys %{$$config{'modules'}}),
+ 'mp_bits' => find_mp_bits($config),
'mod_libs' =>
[ using_libs($os, sort keys %{$$config{'modules'}}) ],
@@ -494,81 +496,51 @@ sub module_runs_on {
}
- return 1;
-}
-
-sub can_enable_module {
- my ($config, $mod, $for_dep) = @_;
-
- my %modinfo = %{ $MODULES{$mod} };
-
- my $is_enabled = 0;
-
- # If it was enabled by the user with --enable-modules, trust them
- if(defined($$config{'modules'}{$mod})) {
- return '' if($$config{'modules'}{$mod} < 0);
- $is_enabled = 1;
- }
-
- unless($is_enabled) {
- return '' if $modinfo{'load_on'} eq 'dep' and $for_dep == 0;
- return '' if $modinfo{'load_on'} eq 'request';
- }
-
- # Doesn't run here, don't bother
- return '' unless module_runs_on($config, \%modinfo, $mod, 0);
-
if($modinfo{'uses_tr1'} eq 'yes') {
- return '' unless defined($$config{'tr1'});
+ return 0 unless defined($$config{'tr1'});
my $tr1 = $$config{'tr1'};
- return '' unless($tr1 eq 'system' or $tr1 eq 'boost');
+ return 0 unless($tr1 eq 'system' or $tr1 eq 'boost');
}
- # @deps is the full list of modules that must be loaded (this loop
- # every time is a really dumb way to do this, but it works since
- # there are only about 150 info.txt files total, and most don't
- # have complicated deps)
+ return 1;
+}
+
+sub scan_modules {
+ my ($config) = @_;
- my @deps;
- push @deps, $mod;
+ my %dep_mods = ();
- LINE: foreach (@{$modinfo{'requires'}}) {
+ foreach my $mod (sort keys %MODULES) {
+ my %modinfo = %{ $MODULES{$mod} };
- for my $req_mod (split(/\|/, $_)) {
- next unless defined $MODULES{$req_mod};
+ next if(defined($$config{'modules'}{$mod}) && $$config{'modules'}{$mod} < 0);
- if(can_enable_module($config, $req_mod, 1)) {
- push @deps, $req_mod;
- next LINE;
- }
- }
+ next unless(module_runs_on($config, \%modinfo, $mod, 0));
- #autoconfig("Could not get a dep match for $_ for mod $mod");
- # Could not find a match
- return '';
- }
+ if($modinfo{'load_on'} eq 'auto' or
+ ($modinfo{'load_on'} eq 'asm_ok' and $$config{'asm_ok'})) {
- return join(' ', @deps);
-}
+ $$config{'modules'}{$mod} = 1;
-sub scan_modules {
- my ($config) = @_;
+ LINE: foreach (@{$modinfo{'requires'}}) {
+ for my $req_mod (split(/\|/, $_)) {
+ next unless defined $MODULES{$req_mod};
- MOD: foreach my $mod (sort keys %MODULES) {
- my %modinfo = %{ $MODULES{$mod} };
+ next if(defined($$config{'modules'}{$req_mod}) && $$config{'modules'}{$req_mod} < 0);
+ next unless(module_runs_on($config, $MODULES{$req_mod}, $req_mod, 0));
- my @mods = split(/ /, can_enable_module($config, $mod, 0));
+ $dep_mods{$req_mod} = 1;
+ next LINE;
+ }
+ }
- if($#mods < 0) {
- trace("Will not enable $mod");
next;
}
+ }
- foreach my $req_mod (@mods) {
- #autoconfig("Enabling module $req_mod");
- $$config{'modules'}{$req_mod} = 1;
- }
+ foreach my $mod (sort keys %dep_mods) {
+ $$config{'modules'}{$mod} = 1;
}
}
@@ -766,7 +738,7 @@ sub get_options {
'quiet' => sub { $$config{'verbose'} = 0; },
'trace' => sub { $TRACING = 1; },
- 'enable-asm' => sub { $$config{'asm_ok'} = 0; },
+ 'enable-asm' => sub { $$config{'asm_ok'} = 1; },
'disable-asm' => sub { $$config{'asm_ok'} = 0; },
'enable-autoconfig' => sub { $$config{'autoconfig'} = 1; },
@@ -1145,9 +1117,11 @@ sub find_mp_bits {
my $seen_mp_module = undef;
- foreach my $modname (@modules_list) {
+ foreach my $modname (sort keys %{$$config{'modules'}}) {
croak("Unknown module $modname") unless defined $MODULES{$modname};
+ next if $$config{'modules'}{$modname} < 0;
+
my %modinfo = %{ $MODULES{$modname} };
if($modinfo{'mp_bits'}) {
if(defined($seen_mp_module) and $modinfo{'mp_bits'} != $mp_bits) {
diff --git a/configure.py b/configure.py
index d8439e83e..821092151 100755
--- a/configure.py
+++ b/configure.py
@@ -37,7 +37,7 @@ class BuildConfigurationInformation(object):
version_minor = 8
version_patch = 5
version_so_patch = 5
- version_suffix = '-pre'
+ version_suffix = '-rc1'
version_string = '%d.%d.%d%s' % (
version_major, version_minor, version_patch, version_suffix)
@@ -260,7 +260,11 @@ def lex_me_harder(infofile, to_obj, allowed_groups, name_val_pairs):
to_obj.lives_in = dirname
if basename == 'info.txt':
- (dummy,to_obj.basename) = os.path.split(dirname)
+ (obj_dir,to_obj.basename) = os.path.split(dirname)
+ if os.access(os.path.join(obj_dir, 'info.txt'), os.R_OK):
+ to_obj.parent_module = os.path.basename(obj_dir)
+ else:
+ to_obj.parent_module = None
else:
to_obj.basename = basename
@@ -349,6 +353,24 @@ class ModuleInfo(object):
else:
self.uses_tr1 = False
+ def compatible_cpu(self, arch, cpu):
+ return self.arch == [] or (arch in self.arch or cpu in self.arch)
+
+ def compatible_os(self, os):
+ return self.os == [] or os in self.os
+
+ def compatible_compiler(self, cc, with_tr1):
+ if self.uses_tr1 and with_tr1 not in ['boost', 'system']:
+ return False
+ return self.cc == [] or cc in self.cc
+
+ def dependencies(self):
+ # utils is an implicit dep (contains types, etc)
+ deps = self.requires + ['utils']
+ if self.parent_module != None:
+ deps.append(self.parent_module)
+ return deps
+
def __cmp__(self, other):
if self.basename < other.basename:
return -1
@@ -740,68 +762,82 @@ def create_template_vars(build_config, options, modules, cc, arch, osinfo):
Determine which modules to load based on options, target, etc
"""
def choose_modules_to_use(options, modules):
- def enable_module(module, for_dep = False):
- # First check options for --enable-modules/--disable-modules
- if module.basename in options.disabled_modules:
- return (False, [])
+ to_load = []
+ maybe_dep = []
+ not_using_because = {}
- # If it was specifically requested, skip most tests (trust the user)
- if module.basename not in options.enabled_modules:
- if module.cc != [] and options.compiler not in module.cc:
- return (False, [])
+ def cannot_use_because(mod, reason):
+ not_using_because.setdefault(reason, []).append(mod)
- if module.os != [] and options.os not in module.os:
- return (False, [])
+ for (modname, module) in modules.iteritems():
+ if modname in options.disabled_modules:
+ cannot_use_because(modname, 'disabled by user')
+ elif modname in options.enabled_modules:
+ to_load.append(modname) # trust the user
- if module.arch != [] and options.arch not in module.arch \
- and options.cpu not in module.arch:
- return (False, [])
+ elif not module.compatible_cpu(options.arch, options.cpu):
+ cannot_use_because(modname, 'CPU incompatible')
+ elif not module.compatible_os(options.os):
+ cannot_use_because(modname, 'OS incompatible')
+ elif not module.compatible_compiler(options.compiler,
+ options.with_tr1):
+ cannot_use_because(modname, 'compiler incompatible')
- if module.load_on == 'dep' and not for_dep:
- return (False, [])
+ else:
+ if module.load_on == 'never':
+ cannot_use_because(modname, 'disabled as buggy')
elif module.load_on == 'request':
- return (False, [])
- elif module.load_on == 'asm_ok' and not options.asm_ok:
- return (False, [])
-
- # TR1 checks
- if module.uses_tr1:
- if options.with_tr1 != 'boost' and options.with_tr1 != 'system':
- return (False, [])
-
- # dependency checks
- deps = []
- deps_met = True
- for req in module.requires:
- for mod in req.split('|'):
- (can_enable, deps_of_dep) = enable_module(modules[mod], True)
- if can_enable:
- deps.append(mod)
- deps += deps_of_dep
- break
+ cannot_use_because(modname, 'loaded on request only')
+ elif module.load_on == 'dep':
+ maybe_dep.append(modname)
+ elif module.load_on in ['auto', 'asm_ok']:
+ if module.load_on == 'asm_ok' and not options.asm_ok:
+ cannot_use_because(modname, 'uses assembly and --disable-asm set')
+ else:
+ to_load.append(modname)
else:
- deps_met = False
+ logging.warning('Unknown load_on %s in %s' % (module.load_on, modname))
- if deps_met:
- return (True,deps)
- else:
- return (False, [])
+ dependency_failure = True
+
+ while dependency_failure:
+ dependency_failure = False
+ for modname in to_load:
+ for deplist in map(lambda s: s.split('|'),
+ modules[modname].dependencies()):
+
+ dep_met = False
+ for mod in deplist:
+ if dep_met is True:
+ break
+
+ if mod in to_load:
+ dep_met = True
+ elif mod in maybe_dep:
+ maybe_dep.remove(mod)
+ to_load.append(mod)
+ dep_met = True
- use_module = {}
- for (name,module) in modules.iteritems():
- if use_module.get(name, False) is False:
- (should_use,deps) = enable_module(module)
+ if dep_met == False:
+ dependency_failure = True
+ if modname in to_load:
+ to_load.remove(modname)
+ if modname in maybe_dep:
+ maybe_dep.remove(modname)
+ cannot_use_because(modname, 'of dependency failure')
- use_module[name] = should_use
+ for not_a_dep in maybe_dep:
+ cannot_use_because(not_a_dep, 'loaded only if needed by dependency')
- if should_use:
- for dep in deps:
- use_module[dep] = True
+ for reason in sorted(not_using_because.keys()):
+ disabled_mods = sorted(set([mod for mod in not_using_because[reason]]))
- return [modules[name]
- for (name,useme) in use_module.items()
- if useme]
+ if disabled_mods != []:
+ logging.info('Skipping mod because %s - %s' % (
+ reason, ' '.join(disabled_mods)))
+
+ return [modules[mod] for mod in to_load]
"""
Load the info files about modules, targets, etc
@@ -920,6 +956,9 @@ def setup_build(build_config, options, template_vars):
for header_file in build_config.headers:
portable_symlink(header_file, build_config.full_include_dir)
+"""
+Main driver
+"""
def main(argv = None):
if argv is None:
argv = sys.argv
diff --git a/doc/log.txt b/doc/log.txt
index ab62dea11..831757d63 100644
--- a/doc/log.txt
+++ b/doc/log.txt
@@ -1,5 +1,5 @@
-* 1.8.5, 2009-??-??
+* 1.8.5-rc1, 2009-07-20
- Change configure.py to work on stock Python 2.4
- Avoid a crash in Skein_512::add_data processing a zero-length input
- The test suite now returns an error code from main() if any tests failed
diff --git a/doc/scripts/print_deps.py b/doc/scripts/print_deps.py
new file mode 100755
index 000000000..b92c43310
--- /dev/null
+++ b/doc/scripts/print_deps.py
@@ -0,0 +1,70 @@
+#!/usr/bin/python
+
+"""
+Analyze the botan source tree and print the module interdependencies
+
+(C) 2009 Jack Lloyd
+Distributed under the terms of the Botan license
+"""
+
+import os
+import os.path
+import sys
+import re
+
+def find_deps_in(filename):
+ # By convention #include's with spaces before them are
+ # always wrapped in #ifdef blocks
+ regexp = re.compile('^#include <botan/(.*)>')
+
+ for line in open(filename).readlines():
+ match = regexp.match(line)
+ if match != None:
+ yield match.group(1)
+
+def get_dependencies(dirname):
+ all_dirdeps = {}
+ file_homes = {}
+
+ is_sourcefile = re.compile('\.(cpp|h|S)$')
+
+ for (dirpath, dirnames, filenames) in os.walk('src'):
+ dirdeps = set()
+ for filename in filenames:
+ if is_sourcefile.search(filename) != None:
+ file_homes[filename] = os.path.basename(dirpath)
+
+ for dep in find_deps_in(os.path.join(dirpath, filename)):
+ if dep not in filenames and dep != 'build.h':
+ dirdeps.add(dep)
+
+ dirdeps = sorted(dirdeps)
+ if dirdeps != []:
+ all_dirdeps[dirpath] = dirdeps
+
+ return (all_dirdeps, file_homes)
+
+def main():
+ (all_dirdeps, file_homes) = get_dependencies('src')
+
+ def interesting_dep_for(dirname):
+ def interesting_dep(dep):
+ if dep == 'utils':
+ return False # everything depends on it
+
+ # block/serpent depends on block, etc
+ if dirname.find('/%s/' % (dep)) > 0:
+ return False
+ return True
+ return interesting_dep
+
+ for dirname in sorted(all_dirdeps.keys()):
+ depdirs = sorted(set(map(lambda x: file_homes[x], all_dirdeps[dirname])))
+
+ depdirs = filter(interesting_dep_for(dirname), depdirs)
+
+ if depdirs != []:
+ print "%s: %s" % (dirname, ' '.join(depdirs))
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/doc/scripts/update_deps.py b/doc/scripts/update_deps.py
new file mode 100755
index 000000000..61aa887cc
--- /dev/null
+++ b/doc/scripts/update_deps.py
@@ -0,0 +1,41 @@
+#!/usr/bin/python
+
+import sys
+import re
+import os.path
+
+def update_requires(dir, deps):
+ lines = map(lambda x: x.strip(),
+ open(os.path.join(dir, 'info.txt')).readlines())
+
+ if '<requires>' in lines:
+ start = lines.index('<requires>')
+
+ while lines.pop(start) != '</requires>':
+ pass
+
+ while lines[-1] == '':
+ lines = lines[:-1]
+
+ if len(deps) > 0:
+ lines.append('')
+ lines.append('<requires>')
+ for dep in deps:
+ lines.append(dep)
+ lines.append('</requires>')
+ lines.append('')
+
+ lines = "\n".join(lines).replace("\n\n\n", "\n\n")
+
+ output = open(os.path.join(dir, 'info.txt'), 'w')
+ output.write(lines)
+ output.close()
+
+def main():
+ for line in sys.stdin.readlines():
+ (dirname, deps) = line.split(':')
+ deps = deps.strip().split(' ')
+ update_requires(dirname, deps)
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/readme.txt b/readme.txt
index f0e62d2cf..8b9c96531 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
-Botan 1.8.5-pre 2009-??-??
+Botan 1.8.5-rc1 2009-07-20
Botan is a C++ class library for performing a wide variety of
cryptographic operations.
diff --git a/src/algo_factory/info.txt b/src/algo_factory/info.txt
index 937b91353..dfc42230a 100644
--- a/src/algo_factory/info.txt
+++ b/src/algo_factory/info.txt
@@ -4,13 +4,18 @@ load_on auto
define ALGORITHM_FACTORY
-<requires>
-utils
-</requires>
-
<add>
algo_factory.cpp
algo_factory.h
algo_cache.h
prov_weight.cpp
</add>
+
+<requires>
+block
+engine
+hash
+mac
+mutex
+stream
+</requires>
diff --git a/src/alloc/alloc_mmap/info.txt b/src/alloc/alloc_mmap/info.txt
index 8cc2b206e..d8c766d55 100644
--- a/src/alloc/alloc_mmap/info.txt
+++ b/src/alloc/alloc_mmap/info.txt
@@ -23,3 +23,7 @@ tru64
# Only without -ansi, otherwise can't get mkstemp
#cygwin
</os>
+
+<requires>
+mem_pool
+</requires>
diff --git a/src/alloc/info.txt b/src/alloc/info.txt
index 2430a4db4..fa50aa09f 100644
--- a/src/alloc/info.txt
+++ b/src/alloc/info.txt
@@ -4,4 +4,5 @@ load_on auto
<add>
allocate.h
+secmem.h
</add>
diff --git a/src/alloc/mem_pool/info.txt b/src/alloc/mem_pool/info.txt
index ec987a0e0..0a762ccc4 100644
--- a/src/alloc/mem_pool/info.txt
+++ b/src/alloc/mem_pool/info.txt
@@ -2,11 +2,11 @@ realname "Memory Pool Allocator"
load_on auto
-<requires>
-utils
-</requires>
-
<add>
mem_pool.cpp
mem_pool.h
</add>
+
+<requires>
+mutex
+</requires>
diff --git a/src/utils/secmem.h b/src/alloc/secmem.h
index d64a376ca..d64a376ca 100644
--- a/src/utils/secmem.h
+++ b/src/alloc/secmem.h
diff --git a/src/alloc/system_alloc/info.txt b/src/alloc/system_alloc/info.txt
index 0e8de9ff7..5fade38cf 100644
--- a/src/alloc/system_alloc/info.txt
+++ b/src/alloc/system_alloc/info.txt
@@ -2,11 +2,12 @@ realname "Default (Malloc) Allocators"
load_on auto
-<requires>
-utils
-</requires>
-
<add>
defalloc.cpp
defalloc.h
</add>
+
+<requires>
+libstate
+mem_pool
+</requires>
diff --git a/src/asn1/info.txt b/src/asn1/info.txt
index 279cbb1e9..7b8110c10 100644
--- a/src/asn1/info.txt
+++ b/src/asn1/info.txt
@@ -4,11 +4,6 @@ define ASN1
load_on auto
-<requires>
-bigint
-oid_lookup
-</requires>
-
<add>
alg_id.cpp
asn1_alt.cpp
@@ -27,3 +22,10 @@ asn1_oid.h
ber_dec.h
der_enc.h
</add>
+
+<requires>
+alloc
+bigint
+filters
+oid_lookup
+</requires>
diff --git a/src/benchmark/info.txt b/src/benchmark/info.txt
index e9718dbb3..0fbcdb2de 100644
--- a/src/benchmark/info.txt
+++ b/src/benchmark/info.txt
@@ -9,3 +9,13 @@ benchmark.cpp
benchmark.h
</add>
+<requires>
+algo_factory
+block
+buf_comp
+hash
+mac
+rng
+stream
+timer
+</requires>
diff --git a/src/block/info.txt b/src/block/info.txt
index 5df789736..ff48fb04a 100644
--- a/src/block/info.txt
+++ b/src/block/info.txt
@@ -4,11 +4,10 @@ load_on auto
define BLOCK_CIPHER
-<requires>
-utils
-sym_algo
-</requires>
-
<add>
block_cipher.h
</add>
+
+<requires>
+sym_algo
+</requires>
diff --git a/src/block/lion/info.txt b/src/block/lion/info.txt
index 558d71d0c..81ef58511 100644
--- a/src/block/lion/info.txt
+++ b/src/block/lion/info.txt
@@ -8,3 +8,8 @@ load_on auto
lion.cpp
lion.h
</add>
+
+<requires>
+hash
+stream
+</requires>
diff --git a/src/block/lubyrack/info.txt b/src/block/lubyrack/info.txt
index d83df2409..a478526f4 100644
--- a/src/block/lubyrack/info.txt
+++ b/src/block/lubyrack/info.txt
@@ -8,3 +8,7 @@ load_on auto
lubyrack.cpp
lubyrack.h
</add>
+
+<requires>
+hash
+</requires>
diff --git a/src/block/serpent_ia32/info.txt b/src/block/serpent_ia32/info.txt
index 8aca9b2ba..13b171fe9 100644
--- a/src/block/serpent_ia32/info.txt
+++ b/src/block/serpent_ia32/info.txt
@@ -10,12 +10,6 @@ serp_ia32.cpp
serp_ia32.h
</add>
-<requires>
-ia32_eng
-asm_ia32
-utils
-</requires>
-
<arch>
ia32
</arch>
@@ -33,3 +27,8 @@ netbsd
openbsd
solaris
</os>
+
+<requires>
+asm_ia32
+serpent
+</requires>
diff --git a/src/cert/cvc/info.txt b/src/cert/cvc/info.txt
index 69f144340..e3e11f5fe 100644
--- a/src/cert/cvc/info.txt
+++ b/src/cert/cvc/info.txt
@@ -6,11 +6,6 @@ uses_tr1 yes
load_on auto
-<requires>
-asn1
-ecdsa
-</requires>
-
<add>
asn1_eac_str.cpp
asn1_eac_tm.cpp
@@ -34,3 +29,16 @@ signed_obj.cpp
signed_obj.h
freestore.h
</add>
+
+<requires>
+asn1
+bigint
+ecdsa
+filters
+libstate
+oid_lookup
+pem
+pk_codecs
+pubkey
+x509
+</requires>
diff --git a/src/cert/x509/info.txt b/src/cert/x509/info.txt
index 25db8c1e6..552e2aacb 100644
--- a/src/cert/x509/info.txt
+++ b/src/cert/x509/info.txt
@@ -4,13 +4,6 @@ define X509
load_on auto
-<requires>
-asn1
-bigint
-pubkey
-oid_lookup
-</requires>
-
<add>
certstor.h
certstor.cpp
@@ -36,3 +29,17 @@ x509self.h
x509stor.cpp
x509stor.h
</add>
+
+<requires>
+asn1
+bigint
+datastor
+filters
+libstate
+oid_lookup
+pem
+pk_codecs
+pubkey
+rng
+sha1
+</requires>
diff --git a/src/checksum/adler32/info.txt b/src/checksum/adler32/info.txt
index fb0f3c9cb..76662cdec 100644
--- a/src/checksum/adler32/info.txt
+++ b/src/checksum/adler32/info.txt
@@ -8,3 +8,7 @@ load_on auto
adler32.cpp
adler32.h
</add>
+
+<requires>
+hash
+</requires>
diff --git a/src/checksum/crc24/info.txt b/src/checksum/crc24/info.txt
index b61cabbc8..33b86a9da 100644
--- a/src/checksum/crc24/info.txt
+++ b/src/checksum/crc24/info.txt
@@ -8,3 +8,7 @@ load_on auto
crc24.cpp
crc24.h
</add>
+
+<requires>
+hash
+</requires>
diff --git a/src/checksum/crc32/info.txt b/src/checksum/crc32/info.txt
index 17ccca0a3..15933b375 100644
--- a/src/checksum/crc32/info.txt
+++ b/src/checksum/crc32/info.txt
@@ -8,3 +8,7 @@ load_on auto
crc32.cpp
crc32.h
</add>
+
+<requires>
+hash
+</requires>
diff --git a/src/cms/info.txt b/src/cms/info.txt
index 402865b07..82c31b564 100644
--- a/src/cms/info.txt
+++ b/src/cms/info.txt
@@ -4,14 +4,6 @@ define CMS
load_on auto
-<requires>
-asn1
-filters
-oid_lookup
-pubkey
-x509
-</requires>
-
<add>
cms_algo.cpp
cms_comp.cpp
@@ -22,3 +14,18 @@ cms_ealg.cpp
cms_enc.cpp
cms_enc.h
</add>
+
+<requires>
+asn1
+bigint
+cbc
+filters
+hash
+libstate
+oid_lookup
+pem
+pk_codecs
+sha1
+sym_algo
+x509
+</requires>
diff --git a/src/codec/base64/info.txt b/src/codec/base64/info.txt
index 591581afb..d4ed80976 100644
--- a/src/codec/base64/info.txt
+++ b/src/codec/base64/info.txt
@@ -4,12 +4,12 @@ define BASE64_CODEC
load_on auto
-<requires>
-filters
-</requires>
-
<add>
base64.cpp
b64_char.cpp
base64.h
</add>
+
+<requires>
+filters
+</requires>
diff --git a/src/codec/bzip2/info.txt b/src/codec/bzip2/info.txt
index 51e1feed1..1be84e405 100644
--- a/src/codec/bzip2/info.txt
+++ b/src/codec/bzip2/info.txt
@@ -7,10 +7,6 @@ modset compression
load_on request
-<requires>
-filters
-</requires>
-
<add>
bzip2.h
bzip2.cpp
@@ -19,3 +15,7 @@ bzip2.cpp
<libs>
all -> bz2
</libs>
+
+<requires>
+filters
+</requires>
diff --git a/src/codec/hex/info.txt b/src/codec/hex/info.txt
index 71b33a6ad..512a5de8b 100644
--- a/src/codec/hex/info.txt
+++ b/src/codec/hex/info.txt
@@ -4,12 +4,12 @@ define HEX_CODEC
load_on auto
-<requires>
-filters
-</requires>
-
<add>
hex.cpp
hex_char.cpp
hex.h
</add>
+
+<requires>
+filters
+</requires>
diff --git a/src/codec/openpgp/info.txt b/src/codec/openpgp/info.txt
index d43c72843..6b30850d0 100644
--- a/src/codec/openpgp/info.txt
+++ b/src/codec/openpgp/info.txt
@@ -11,6 +11,5 @@ openpgp.h
<requires>
crc24
-base64
filters
</requires>
diff --git a/src/codec/zlib/info.txt b/src/codec/zlib/info.txt
index 49e9658a9..9b1c35d84 100644
--- a/src/codec/zlib/info.txt
+++ b/src/codec/zlib/info.txt
@@ -7,10 +7,6 @@ define COMPRESSOR_ZLIB
load_on request
modset compression
-<requires>
-filters
-</requires>
-
<add>
zlib.h
zlib.cpp
@@ -21,3 +17,7 @@ zlib.cpp
<libs>
all -> z
</libs>
+
+<requires>
+filters
+</requires>
diff --git a/src/engine/def_engine/info.txt b/src/engine/def_engine/info.txt
index 503a4392f..fd31ee2d0 100644
--- a/src/engine/def_engine/info.txt
+++ b/src/engine/def_engine/info.txt
@@ -14,3 +14,11 @@ lookup_hash.cpp
lookup_mac.cpp
lookup_stream.cpp
</add>
+
+<requires>
+algo_factory
+filters
+libstate
+mode_pad
+numbertheory
+</requires>
diff --git a/src/engine/gnump/info.txt b/src/engine/gnump/info.txt
index 84c286bc8..67a9bcd70 100644
--- a/src/engine/gnump/info.txt
+++ b/src/engine/gnump/info.txt
@@ -20,3 +20,7 @@ gmp_powm.cpp
gmp_wrap.cpp
gmp_wrap.h
</add>
+
+<requires>
+bigint
+</requires>
diff --git a/src/engine/info.txt b/src/engine/info.txt
index 0a22ec285..eef3c03b6 100644
--- a/src/engine/info.txt
+++ b/src/engine/info.txt
@@ -7,3 +7,12 @@ load_on auto
<add>
engine.h
</add>
+
+<requires>
+block
+hash
+libstate
+mac
+numbertheory
+stream
+</requires>
diff --git a/src/engine/openssl/info.txt b/src/engine/openssl/info.txt
index 67afcab74..3f2f1ab14 100644
--- a/src/engine/openssl/info.txt
+++ b/src/engine/openssl/info.txt
@@ -22,3 +22,7 @@ ossl_if.cpp
ossl_md.cpp
ossl_nr.cpp
</add>
+
+<requires>
+bigint
+</requires>
diff --git a/src/entropy/info.txt b/src/entropy/info.txt
index bac1d593f..ec3be5f58 100644
--- a/src/entropy/info.txt
+++ b/src/entropy/info.txt
@@ -5,3 +5,7 @@ load_on auto
<add>
entropy_src.h
</add>
+
+<requires>
+buf_comp
+</requires>
diff --git a/src/entropy/proc_walk/info.txt b/src/entropy/proc_walk/info.txt
index d932523fd..9f4836458 100644
--- a/src/entropy/proc_walk/info.txt
+++ b/src/entropy/proc_walk/info.txt
@@ -27,3 +27,7 @@ tru64
# big deal since it has /dev/*random
#netbsd
</os>
+
+<requires>
+alloc
+</requires>
diff --git a/src/entropy/unix_procs/info.txt b/src/entropy/unix_procs/info.txt
index f16e21289..928ec13b3 100644
--- a/src/entropy/unix_procs/info.txt
+++ b/src/entropy/unix_procs/info.txt
@@ -27,3 +27,7 @@ qnx
solaris
tru64
</os>
+
+<requires>
+filters
+</requires>
diff --git a/src/utils/data_src.cpp b/src/filters/data_src.cpp
index e6387c4ba..e6387c4ba 100644
--- a/src/utils/data_src.cpp
+++ b/src/filters/data_src.cpp
diff --git a/src/utils/data_src.h b/src/filters/data_src.h
index e16217e0f..e16217e0f 100644
--- a/src/utils/data_src.h
+++ b/src/filters/data_src.h
diff --git a/src/filters/info.txt b/src/filters/info.txt
index 947e36596..79a92a9c5 100644
--- a/src/filters/info.txt
+++ b/src/filters/info.txt
@@ -12,6 +12,8 @@ buf_filt.cpp
buf_filt.h
data_snk.cpp
data_snk.h
+data_src.cpp
+data_src.h
filter.cpp
filter.h
filters.h
@@ -25,3 +27,15 @@ pipe_rw.cpp
secqueue.cpp
secqueue.h
</add>
+
+<requires>
+alloc
+asn1
+block
+hash
+libstate
+mac
+rng
+stream
+sym_algo
+</requires>
diff --git a/src/hash/gost_3411/info.txt b/src/hash/gost_3411/info.txt
index ef2879823..65b9475e1 100644
--- a/src/hash/gost_3411/info.txt
+++ b/src/hash/gost_3411/info.txt
@@ -8,3 +8,7 @@ load_on auto
gost_3411.cpp
gost_3411.h
</add>
+
+<requires>
+gost_28147
+</requires>
diff --git a/src/hash/info.txt b/src/hash/info.txt
index fb1f734d7..ce55f7ddc 100644
--- a/src/hash/info.txt
+++ b/src/hash/info.txt
@@ -2,10 +2,10 @@ realname "Hash Functions"
load_on auto
-<requires>
-utils
-</requires>
-
<add>
hash.h
</add>
+
+<requires>
+buf_comp
+</requires>
diff --git a/src/hash/md4_ia32/info.txt b/src/hash/md4_ia32/info.txt
index e7249ad5f..e5287dc5d 100644
--- a/src/hash/md4_ia32/info.txt
+++ b/src/hash/md4_ia32/info.txt
@@ -10,12 +10,6 @@ md4_ia32.cpp
md4_ia32.h
</add>
-<requires>
-ia32_eng
-asm_ia32
-md4
-</requires>
-
<arch>
ia32
</arch>
@@ -33,3 +27,8 @@ netbsd
openbsd
solaris
</os>
+
+<requires>
+asm_ia32
+md4
+</requires>
diff --git a/src/hash/md5_ia32/info.txt b/src/hash/md5_ia32/info.txt
index 7133e1ddd..f69ab82e6 100644
--- a/src/hash/md5_ia32/info.txt
+++ b/src/hash/md5_ia32/info.txt
@@ -10,13 +10,6 @@ md5_ia32.cpp
md5_ia32.h
</add>
-<requires>
-ia32_eng
-asm_ia32
-mdx_hash
-utils
-</requires>
-
<arch>
ia32
</arch>
@@ -34,3 +27,8 @@ netbsd
openbsd
solaris
</os>
+
+<requires>
+asm_ia32
+md5
+</requires>
diff --git a/src/hash/sha1_amd64/info.txt b/src/hash/sha1_amd64/info.txt
index 662d60c69..ddbc7d380 100644
--- a/src/hash/sha1_amd64/info.txt
+++ b/src/hash/sha1_amd64/info.txt
@@ -10,13 +10,6 @@ sha1_amd64.cpp
sha1_amd64.h
</add>
-<requires>
-amd64_eng
-asm_amd64
-sha1
-utils
-</requires>
-
<arch>
amd64
</arch>
@@ -33,3 +26,9 @@ netbsd
openbsd
solaris
</os>
+
+<requires>
+amd64_eng
+asm_amd64
+sha1
+</requires>
diff --git a/src/hash/sha1_ia32/info.txt b/src/hash/sha1_ia32/info.txt
index 8c333dc57..ca14028b8 100644
--- a/src/hash/sha1_ia32/info.txt
+++ b/src/hash/sha1_ia32/info.txt
@@ -10,13 +10,6 @@ sha1_ia32.cpp
sha1_ia32.h
</add>
-<requires>
-ia32_eng
-asm_ia32
-sha1
-utils
-</requires>
-
<arch>
ia32
</arch>
@@ -34,3 +27,8 @@ netbsd
openbsd
solaris
</os>
+
+<requires>
+asm_ia32
+sha1
+</requires>
diff --git a/src/hash/sha1_sse2/info.txt b/src/hash/sha1_sse2/info.txt
index e33bb1859..b8d693b70 100644
--- a/src/hash/sha1_sse2/info.txt
+++ b/src/hash/sha1_sse2/info.txt
@@ -10,12 +10,6 @@ sha1_sse2.cpp
sha1_sse2.h
</add>
-<requires>
-sse2_eng
-sha1
-utils
-</requires>
-
<arch>
pentium-m
pentium4
@@ -27,3 +21,8 @@ amd64
gcc
icc
</cc>
+
+<requires>
+sha1
+sse2_eng
+</requires>
diff --git a/src/hash/skein/info.txt b/src/hash/skein/info.txt
index d2d482d81..bab8497c5 100644
--- a/src/hash/skein/info.txt
+++ b/src/hash/skein/info.txt
@@ -8,3 +8,7 @@ load_on auto
skein_512.cpp
skein_512.h
</add>
+
+<requires>
+alloc
+</requires>
diff --git a/src/kdf/info.txt b/src/kdf/info.txt
index fa5cca334..1965a2098 100644
--- a/src/kdf/info.txt
+++ b/src/kdf/info.txt
@@ -8,3 +8,7 @@ load_on auto
kdf.cpp
kdf.h
</add>
+
+<requires>
+alloc
+</requires>
diff --git a/src/kdf/kdf1/info.txt b/src/kdf/kdf1/info.txt
index 04d8db096..ede10017e 100644
--- a/src/kdf/kdf1/info.txt
+++ b/src/kdf/kdf1/info.txt
@@ -4,12 +4,11 @@ define KDF1
load_on auto
-<requires>
-kdf
-</requires>
-
<add>
kdf1.h
kdf1.cpp
</add>
+<requires>
+hash
+</requires>
diff --git a/src/kdf/kdf2/info.txt b/src/kdf/kdf2/info.txt
index 80b562824..1858f8929 100644
--- a/src/kdf/kdf2/info.txt
+++ b/src/kdf/kdf2/info.txt
@@ -4,11 +4,11 @@ define KDF2
load_on auto
-<requires>
-kdf
-</requires>
-
<add>
kdf2.cpp
kdf2.h
</add>
+
+<requires>
+hash
+</requires>
diff --git a/src/kdf/mgf1/info.txt b/src/kdf/mgf1/info.txt
index 0616f43b7..f9e952f82 100644
--- a/src/kdf/mgf1/info.txt
+++ b/src/kdf/mgf1/info.txt
@@ -4,11 +4,11 @@ define MGF1
load_on dep
-<requires>
-kdf
-</requires>
-
<add>
mgf1.h
mgf1.cpp
</add>
+
+<requires>
+hash
+</requires>
diff --git a/src/kdf/ssl_prf/info.txt b/src/kdf/ssl_prf/info.txt
index 890789988..f862905a2 100644
--- a/src/kdf/ssl_prf/info.txt
+++ b/src/kdf/ssl_prf/info.txt
@@ -4,13 +4,13 @@ define SSL_V3_PRF
load_on auto
-<requires>
-kdf
-md5
-sha1
-</requires>
-
<add>
prf_ssl3.h
prf_ssl3.cpp
</add>
+
+<requires>
+md5
+sha1
+sym_algo
+</requires>
diff --git a/src/kdf/tls_prf/info.txt b/src/kdf/tls_prf/info.txt
index 58c1ed029..f95ef9c24 100644
--- a/src/kdf/tls_prf/info.txt
+++ b/src/kdf/tls_prf/info.txt
@@ -4,13 +4,14 @@ define TLS_V10_PRF
load_on auto
-<requires>
-kdf
-sha1
-md5
-</requires>
-
<add>
prf_tls.h
prf_tls.cpp
</add>
+
+<requires>
+hmac
+mac
+md5
+sha1
+</requires>
diff --git a/src/kdf/tls_prf/prf_tls.cpp b/src/kdf/tls_prf/prf_tls.cpp
index a04c9045d..7c638b994 100644
--- a/src/kdf/tls_prf/prf_tls.cpp
+++ b/src/kdf/tls_prf/prf_tls.cpp
@@ -13,6 +13,39 @@
namespace Botan {
+namespace {
+
+/*
+* TLS PRF P_hash function
+*/
+SecureVector<byte> P_hash(MessageAuthenticationCode* mac,
+ u32bit len,
+ const byte secret[], u32bit secret_len,
+ const byte seed[], u32bit seed_len)
+ {
+ SecureVector<byte> out;
+
+ mac->set_key(secret, secret_len);
+
+ SecureVector<byte> A(seed, seed_len);
+ while(len)
+ {
+ const u32bit this_block_len = std::min(mac->OUTPUT_LENGTH, len);
+
+ A = mac->process(A);
+
+ mac->update(A);
+ mac->update(seed, seed_len);
+ SecureVector<byte> block = mac->final();
+
+ out.append(block, this_block_len);
+ len -= this_block_len;
+ }
+ return out;
+ }
+
+}
+
/*
* TLS PRF Constructor and Destructor
*/
@@ -49,33 +82,4 @@ SecureVector<byte> TLS_PRF::derive(u32bit key_len,
return key1;
}
-/*
-* TLS PRF P_hash function
-*/
-SecureVector<byte> TLS_PRF::P_hash(MessageAuthenticationCode* mac,
- u32bit len,
- const byte secret[], u32bit secret_len,
- const byte seed[], u32bit seed_len)
- {
- SecureVector<byte> out;
-
- mac->set_key(secret, secret_len);
-
- SecureVector<byte> A(seed, seed_len);
- while(len)
- {
- const u32bit this_block_len = std::min(mac->OUTPUT_LENGTH, len);
-
- A = mac->process(A);
-
- mac->update(A);
- mac->update(seed, seed_len);
- SecureVector<byte> block = mac->final();
-
- out.append(block, this_block_len);
- len -= this_block_len;
- }
- return out;
- }
-
}
diff --git a/src/kdf/tls_prf/prf_tls.h b/src/kdf/tls_prf/prf_tls.h
index 6b81c155f..d21279588 100644
--- a/src/kdf/tls_prf/prf_tls.h
+++ b/src/kdf/tls_prf/prf_tls.h
@@ -25,11 +25,6 @@ class BOTAN_DLL TLS_PRF : public KDF
TLS_PRF();
~TLS_PRF();
private:
- static SecureVector<byte> P_hash(MessageAuthenticationCode*,
- u32bit,
- const byte[], u32bit,
- const byte[], u32bit);
-
MessageAuthenticationCode* hmac_md5;
MessageAuthenticationCode* hmac_sha1;
};
diff --git a/src/kdf/x942_prf/info.txt b/src/kdf/x942_prf/info.txt
index df5719de4..295c2cde6 100644
--- a/src/kdf/x942_prf/info.txt
+++ b/src/kdf/x942_prf/info.txt
@@ -4,13 +4,13 @@ define X942_PRF
load_on auto
-<requires>
-md5
-sha1
-#oid_lookup
-</requires>
-
<add>
prf_x942.cpp
prf_x942.h
</add>
+
+<requires>
+asn1
+oid_lookup
+sha1
+</requires>
diff --git a/src/libstate/info.txt b/src/libstate/info.txt
index f3111a31e..7ca35c5a4 100644
--- a/src/libstate/info.txt
+++ b/src/libstate/info.txt
@@ -4,15 +4,6 @@ load_on auto
define LIBSTATE_MODULE
-<requires>
-algo_factory
-def_engine
-mode_pad
-pk_pad
-s2k
-system_alloc
-</requires>
-
<add>
botan.h
get_enc.cpp
@@ -27,4 +18,28 @@ lookup.h
pk_engine.cpp
pk_engine.h
policy.cpp
+scan_name.cpp
+scan_name.h
</add>
+
+<requires>
+algo_factory
+alloc
+bigint
+block
+def_engine
+engine
+filters
+hash
+kdf
+mac
+mode_pad
+mutex
+noop_mutex
+pk_pad
+pubkey
+rng
+s2k
+stream
+system_alloc
+</requires>
diff --git a/src/libstate/oid_lookup/info.txt b/src/libstate/oid_lookup/info.txt
index b5f4ef21f..609eb9199 100644
--- a/src/libstate/oid_lookup/info.txt
+++ b/src/libstate/oid_lookup/info.txt
@@ -4,12 +4,11 @@ load_on dep
define OID_LOOKUP
-<requires>
-#libstate
-#asn1
-</requires>
-
<add>
oids.cpp
oids.h
</add>
+
+<requires>
+asn1
+</requires>
diff --git a/src/utils/scan_name.cpp b/src/libstate/scan_name.cpp
index 4ca6e6d59..4ca6e6d59 100644
--- a/src/utils/scan_name.cpp
+++ b/src/libstate/scan_name.cpp
diff --git a/src/utils/scan_name.h b/src/libstate/scan_name.h
index 9e7af40d6..9e7af40d6 100644
--- a/src/utils/scan_name.h
+++ b/src/libstate/scan_name.h
diff --git a/src/mac/cbc_mac/info.txt b/src/mac/cbc_mac/info.txt
index 3a7a6e781..3a5434974 100644
--- a/src/mac/cbc_mac/info.txt
+++ b/src/mac/cbc_mac/info.txt
@@ -8,3 +8,7 @@ load_on auto
cbc_mac.cpp
cbc_mac.h
</add>
+
+<requires>
+block
+</requires>
diff --git a/src/mac/cmac/info.txt b/src/mac/cmac/info.txt
index 5188af0c0..b593c9d38 100644
--- a/src/mac/cmac/info.txt
+++ b/src/mac/cmac/info.txt
@@ -8,3 +8,7 @@ load_on auto
cmac.cpp
cmac.h
</add>
+
+<requires>
+block
+</requires>
diff --git a/src/mac/hmac/info.txt b/src/mac/hmac/info.txt
index 534d2e036..cdf2e67ab 100644
--- a/src/mac/hmac/info.txt
+++ b/src/mac/hmac/info.txt
@@ -8,3 +8,7 @@ load_on auto
hmac.cpp
hmac.h
</add>
+
+<requires>
+hash
+</requires>
diff --git a/src/mac/info.txt b/src/mac/info.txt
index 0e4dc11a2..239eb633f 100644
--- a/src/mac/info.txt
+++ b/src/mac/info.txt
@@ -2,11 +2,12 @@ realname "Message Authentication Codes"
load_on auto
-<requires>
-utils
-</requires>
-
<add>
mac.h
mac.cpp
</add>
+
+<requires>
+buf_comp
+sym_algo
+</requires>
diff --git a/src/mac/ssl3mac/info.txt b/src/mac/ssl3mac/info.txt
index d7a86e571..f8791169c 100644
--- a/src/mac/ssl3mac/info.txt
+++ b/src/mac/ssl3mac/info.txt
@@ -8,3 +8,7 @@ load_on auto
ssl3_mac.cpp
ssl3_mac.h
</add>
+
+<requires>
+hash
+</requires>
diff --git a/src/mac/x919_mac/info.txt b/src/mac/x919_mac/info.txt
index 24c78b1c6..f2ebd5b35 100644
--- a/src/mac/x919_mac/info.txt
+++ b/src/mac/x919_mac/info.txt
@@ -8,3 +8,7 @@ load_on auto
x919_mac.cpp
x919_mac.h
</add>
+
+<requires>
+block
+</requires>
diff --git a/src/math/bigint/info.txt b/src/math/bigint/info.txt
index 908304c9f..513703deb 100644
--- a/src/math/bigint/info.txt
+++ b/src/math/bigint/info.txt
@@ -4,14 +4,6 @@ load_on auto
define BIGINT
-<requires>
-hex
-rng
-mp_amd64|mp_asm64|mp_ia32|mp_ia32_msvc|mp_generic
-monty_generic
-mulop_generic
-</requires>
-
<add>
bigint.h
divide.h
@@ -30,3 +22,12 @@ mp_karat.cpp
mp_misc.cpp
mp_shift.cpp
</add>
+
+<requires>
+alloc
+hex
+mp_amd64|mp_asm64|mp_ia32|mp_ia32_msvc|mp_generic
+monty_generic
+mulop_generic
+rng
+</requires>
diff --git a/src/math/bigint/monty_amd64/info.txt b/src/math/bigint/monty_amd64/info.txt
index 32308bf41..7fb70da46 100644
--- a/src/math/bigint/monty_amd64/info.txt
+++ b/src/math/bigint/monty_amd64/info.txt
@@ -2,16 +2,12 @@ realname "Montgomery Reduction (x86-64)"
mp_bits 64
-load_on request
+load_on never
<add>
mp_monty.S
</add>
-<requires>
-asm_amd64
-</requires>
-
<arch>
amd64
</arch>
@@ -29,3 +25,7 @@ netbsd
openbsd
solaris
</os>
+
+<requires>
+asm_amd64
+</requires>
diff --git a/src/math/bigint/mulop_amd64/info.txt b/src/math/bigint/mulop_amd64/info.txt
index 0960ac4d6..c4b14db93 100644
--- a/src/math/bigint/mulop_amd64/info.txt
+++ b/src/math/bigint/mulop_amd64/info.txt
@@ -2,16 +2,12 @@ realname "BigInt Multiply-Add (x86-64)"
mp_bits 64
-load_on request
+load_on never
<add>
mp_mulop_amd64.S
</add>
-<requires>
-asm_amd64
-</requires>
-
<arch>
amd64
</arch>
@@ -29,3 +25,7 @@ netbsd
openbsd
solaris
</os>
+
+<requires>
+asm_amd64
+</requires>
diff --git a/src/math/bigint/mulop_ia32/info.txt b/src/math/bigint/mulop_ia32/info.txt
index 1c89e95c1..a7b525bfb 100644
--- a/src/math/bigint/mulop_ia32/info.txt
+++ b/src/math/bigint/mulop_ia32/info.txt
@@ -10,10 +10,6 @@ load_on request
mp_mulop.S
</add>
-<requires>
-asm_ia32
-</requires>
-
<arch>
ia32
</arch>
@@ -31,3 +27,7 @@ netbsd
openbsd
solaris
</os>
+
+<requires>
+asm_ia32
+</requires>
diff --git a/src/math/gfpmath/info.txt b/src/math/gfpmath/info.txt
index e90569d26..1a52144b7 100644
--- a/src/math/gfpmath/info.txt
+++ b/src/math/gfpmath/info.txt
@@ -6,11 +6,6 @@ load_on auto
define BIGINT_GFP
-<requires>
-bigint
-numbertheory
-</requires>
-
<add>
curve_gfp.cpp
curve_gfp.h
@@ -20,3 +15,8 @@ gfp_modulus.h
point_gfp.cpp
point_gfp.h
</add>
+
+<requires>
+bigint
+numbertheory
+</requires>
diff --git a/src/math/numbertheory/info.txt b/src/math/numbertheory/info.txt
index 6ce3583c8..1595c7305 100644
--- a/src/math/numbertheory/info.txt
+++ b/src/math/numbertheory/info.txt
@@ -4,10 +4,6 @@ load_on auto
define BIGINT_MATH
-<requires>
-bigint
-</requires>
-
<add>
blinding.cpp
blinding.h
@@ -27,3 +23,11 @@ reducer.cpp
reducer.h
ressol.cpp
</add>
+
+<requires>
+algo_factory
+bigint
+hash
+libstate
+rng
+</requires>
diff --git a/src/modes/cbc/info.txt b/src/modes/cbc/info.txt
index 6cc0e1a14..de81dcb8c 100644
--- a/src/modes/cbc/info.txt
+++ b/src/modes/cbc/info.txt
@@ -10,7 +10,5 @@ cbc.h
</add>
<requires>
-modes
mode_pad
</requires>
-
diff --git a/src/modes/cts/info.txt b/src/modes/cts/info.txt
index bfb26c987..9eb16add5 100644
--- a/src/modes/cts/info.txt
+++ b/src/modes/cts/info.txt
@@ -10,6 +10,5 @@ cts.h
</add>
<requires>
-modes
+block
</requires>
-
diff --git a/src/modes/eax/info.txt b/src/modes/eax/info.txt
index 54890d6a2..d1fc7e0e3 100644
--- a/src/modes/eax/info.txt
+++ b/src/modes/eax/info.txt
@@ -11,6 +11,8 @@ eax_dec.cpp
</add>
<requires>
-modes
+block
+cmac
+filters
+mac
</requires>
-
diff --git a/src/modes/ecb/info.txt b/src/modes/ecb/info.txt
index 43ff1ac1c..06b7b4fd2 100644
--- a/src/modes/ecb/info.txt
+++ b/src/modes/ecb/info.txt
@@ -10,7 +10,6 @@ ecb.h
</add>
<requires>
-modes
+block
mode_pad
</requires>
-
diff --git a/src/modes/info.txt b/src/modes/info.txt
index 6fc874bd6..e089e74a9 100644
--- a/src/modes/info.txt
+++ b/src/modes/info.txt
@@ -10,5 +10,6 @@ modebase.h
</add>
<requires>
+block
filters
</requires>
diff --git a/src/modes/ofb/info.txt b/src/modes/ofb/info.txt
index 03cb23677..3cba4151e 100644
--- a/src/modes/ofb/info.txt
+++ b/src/modes/ofb/info.txt
@@ -10,6 +10,5 @@ ofb.h
</add>
<requires>
-modes
+block
</requires>
-
diff --git a/src/modes/xts/info.txt b/src/modes/xts/info.txt
index 30d8f3496..65c7df2f8 100644
--- a/src/modes/xts/info.txt
+++ b/src/modes/xts/info.txt
@@ -10,6 +10,6 @@ xts.h
</add>
<requires>
-modes
+block
+filters
</requires>
-
diff --git a/src/pbe/info.txt b/src/pbe/info.txt
index 9a46c3a11..c4210b2a7 100644
--- a/src/pbe/info.txt
+++ b/src/pbe/info.txt
@@ -4,13 +4,13 @@ load_on dep
define PASSWORD_BASED_ENCRYPTION
-<requires>
-filters
-asn1
-oid_lookup
-</requires>
-
<add>
get_pbe.cpp
get_pbe.h
</add>
+
+<requires>
+filters
+libstate
+oid_lookup
+</requires>
diff --git a/src/pbe/pbes1/info.txt b/src/pbe/pbes1/info.txt
index 9a5a3aa1a..70c6baeee 100644
--- a/src/pbe/pbes1/info.txt
+++ b/src/pbe/pbes1/info.txt
@@ -10,6 +10,10 @@ pbes1.h
</add>
<requires>
-pbe
+asn1
+block
+cbc
+filters
+hash
pbkdf1
</requires>
diff --git a/src/pbe/pbes2/info.txt b/src/pbe/pbes2/info.txt
index 42e5c42a0..cd37b1e69 100644
--- a/src/pbe/pbes2/info.txt
+++ b/src/pbe/pbes2/info.txt
@@ -4,13 +4,20 @@ define PBE_PKCS_V20
load_on auto
-<requires>
-oid_lookup
-pbe
-pbkdf2
-</requires>
-
<add>
pbes2.cpp
pbes2.h
</add>
+
+<requires>
+algo_factory
+asn1
+block
+cbc
+filters
+hash
+hmac
+libstate
+oid_lookup
+pbkdf2
+</requires>
diff --git a/src/pk_pad/eme1/info.txt b/src/pk_pad/eme1/info.txt
index 4e68aba4b..2f61265e2 100644
--- a/src/pk_pad/eme1/info.txt
+++ b/src/pk_pad/eme1/info.txt
@@ -4,12 +4,13 @@ define EME1
load_on auto
-<requires>
-mgf1
-utils
-</requires>
-
<add>
eme1.h
eme1.cpp
</add>
+
+<requires>
+hash
+kdf
+mgf1
+</requires>
diff --git a/src/pk_pad/emsa1/info.txt b/src/pk_pad/emsa1/info.txt
index 4040dd580..086270b96 100644
--- a/src/pk_pad/emsa1/info.txt
+++ b/src/pk_pad/emsa1/info.txt
@@ -8,3 +8,7 @@ load_on auto
emsa1.h
emsa1.cpp
</add>
+
+<requires>
+hash
+</requires>
diff --git a/src/pk_pad/emsa1_bsi/info.txt b/src/pk_pad/emsa1_bsi/info.txt
index 8a8c46abb..14a9fd396 100644
--- a/src/pk_pad/emsa1_bsi/info.txt
+++ b/src/pk_pad/emsa1_bsi/info.txt
@@ -4,11 +4,11 @@ define EMSA1_BSI
load_on auto
-<requires>
-emsa1
-</requires>
-
<add>
emsa1_bsi.h
emsa1_bsi.cpp
</add>
+
+<requires>
+emsa1
+</requires>
diff --git a/src/pk_pad/emsa2/info.txt b/src/pk_pad/emsa2/info.txt
index f0910d450..1c8161c5e 100644
--- a/src/pk_pad/emsa2/info.txt
+++ b/src/pk_pad/emsa2/info.txt
@@ -10,5 +10,6 @@ emsa2.cpp
</add>
<requires>
+hash
hash_id
</requires>
diff --git a/src/pk_pad/emsa3/info.txt b/src/pk_pad/emsa3/info.txt
index 284b9b07d..90e4b9bfc 100644
--- a/src/pk_pad/emsa3/info.txt
+++ b/src/pk_pad/emsa3/info.txt
@@ -10,5 +10,6 @@ emsa3.cpp
</add>
<requires>
+hash
hash_id
</requires>
diff --git a/src/pk_pad/emsa4/info.txt b/src/pk_pad/emsa4/info.txt
index e37d72d77..29ef4e0cf 100644
--- a/src/pk_pad/emsa4/info.txt
+++ b/src/pk_pad/emsa4/info.txt
@@ -10,5 +10,7 @@ emsa4.cpp
</add>
<requires>
+hash
+kdf
mgf1
</requires>
diff --git a/src/pk_pad/hash_id/info.txt b/src/pk_pad/hash_id/info.txt
index 6a9b7f0da..935432588 100644
--- a/src/pk_pad/hash_id/info.txt
+++ b/src/pk_pad/hash_id/info.txt
@@ -8,3 +8,7 @@ load_on auto
hash_id.cpp
hash_id.h
</add>
+
+<requires>
+alloc
+</requires>
diff --git a/src/pk_pad/info.txt b/src/pk_pad/info.txt
index ff750a12c..c281b1563 100644
--- a/src/pk_pad/info.txt
+++ b/src/pk_pad/info.txt
@@ -9,3 +9,8 @@ emsa.h
eme.cpp
eme.h
</add>
+
+<requires>
+alloc
+rng
+</requires>
diff --git a/src/pubkey/dh/info.txt b/src/pubkey/dh/info.txt
index 5d3396216..33af9a8e5 100644
--- a/src/pubkey/dh/info.txt
+++ b/src/pubkey/dh/info.txt
@@ -13,9 +13,8 @@ dh_op.h
</add>
<requires>
-asn1
-bigint
dl_algo
+dl_group
+libstate
numbertheory
-pubkey
</requires>
diff --git a/src/pubkey/dl_algo/info.txt b/src/pubkey/dl_algo/info.txt
index d3368765a..15a77516b 100644
--- a/src/pubkey/dl_algo/info.txt
+++ b/src/pubkey/dl_algo/info.txt
@@ -11,6 +11,8 @@ dl_algo.h
<requires>
asn1
-bigint
dl_group
+numbertheory
+pk_codecs
+rng
</requires>
diff --git a/src/pubkey/dl_group/info.txt b/src/pubkey/dl_group/info.txt
index 62446091f..6b9884a4d 100644
--- a/src/pubkey/dl_group/info.txt
+++ b/src/pubkey/dl_group/info.txt
@@ -12,4 +12,8 @@ dl_group.h
<requires>
asn1
bigint
+filters
+libstate
+numbertheory
+pem
</requires>
diff --git a/src/pubkey/dlies/info.txt b/src/pubkey/dlies/info.txt
index 1a09dcbc5..5138aafc5 100644
--- a/src/pubkey/dlies/info.txt
+++ b/src/pubkey/dlies/info.txt
@@ -10,7 +10,7 @@ dlies.h
</add>
<requires>
-dh
-kdf2
-pubkey
+kdf
+libstate
+mac
</requires>
diff --git a/src/pubkey/dsa/info.txt b/src/pubkey/dsa/info.txt
index f1b505800..c70e02d90 100644
--- a/src/pubkey/dsa/info.txt
+++ b/src/pubkey/dsa/info.txt
@@ -4,15 +4,6 @@ define DSA
load_on auto
-<requires>
-asn1
-bigint
-dl_algo
-keypair
-numbertheory
-pubkey
-</requires>
-
<add>
dsa.cpp
dsa.h
@@ -21,3 +12,11 @@ dsa_core.h
dsa_op.cpp
dsa_op.h
</add>
+
+<requires>
+dl_algo
+dl_group
+keypair
+libstate
+numbertheory
+</requires>
diff --git a/src/pubkey/ec_dompar/info.txt b/src/pubkey/ec_dompar/info.txt
index 59032ce90..212783725 100644
--- a/src/pubkey/ec_dompar/info.txt
+++ b/src/pubkey/ec_dompar/info.txt
@@ -12,6 +12,7 @@ ec_dompar.h
<requires>
asn1
bigint
-numbertheory
+filters
gfpmath
+hex
</requires>
diff --git a/src/pubkey/ecc_key/info.txt b/src/pubkey/ecc_key/info.txt
index c5213aef4..2a3c9a3b2 100644
--- a/src/pubkey/ecc_key/info.txt
+++ b/src/pubkey/ecc_key/info.txt
@@ -4,16 +4,17 @@ define ECC_PUBLIC_KEY_CRYPTO
load_on auto
+<add>
+ecc_key.cpp
+ecc_key.h
+</add>
+
<requires>
+alloc
asn1
bigint
ec_dompar
-numbertheory
gfpmath
-pubkey
+numbertheory
+pk_codecs
</requires>
-
-<add>
-ecc_key.cpp
-ecc_key.h
-</add>
diff --git a/src/pubkey/ecdsa/info.txt b/src/pubkey/ecdsa/info.txt
index 48e88bda9..743440f8f 100644
--- a/src/pubkey/ecdsa/info.txt
+++ b/src/pubkey/ecdsa/info.txt
@@ -4,16 +4,6 @@ define ECDSA
load_on auto
-<requires>
-asn1
-bigint
-ec_dompar
-ecc_key
-numbertheory
-gfpmath
-pubkey
-</requires>
-
<add>
ecdsa.cpp
ecdsa.h
@@ -22,3 +12,14 @@ ecdsa_core.h
ecdsa_op.cpp
ecdsa_op.h
</add>
+
+<requires>
+alloc
+asn1
+ec_dompar
+ecc_key
+gfpmath
+libstate
+numbertheory
+rng
+</requires>
diff --git a/src/pubkey/eckaeg/info.txt b/src/pubkey/eckaeg/info.txt
index bac47f861..6b78f7de5 100644
--- a/src/pubkey/eckaeg/info.txt
+++ b/src/pubkey/eckaeg/info.txt
@@ -4,16 +4,6 @@ define ECKAEG
load_on auto
-<requires>
-asn1
-bigint
-ec_dompar
-ecc_key
-numbertheory
-gfpmath
-pubkey
-</requires>
-
<add>
eckaeg.cpp
eckaeg.h
@@ -22,3 +12,13 @@ eckaeg_core.h
eckaeg_op.cpp
eckaeg_op.h
</add>
+
+<requires>
+alloc
+asn1
+ec_dompar
+ecc_key
+gfpmath
+libstate
+numbertheory
+</requires>
diff --git a/src/pubkey/elgamal/info.txt b/src/pubkey/elgamal/info.txt
index c457e1529..d7ae614ea 100644
--- a/src/pubkey/elgamal/info.txt
+++ b/src/pubkey/elgamal/info.txt
@@ -4,16 +4,6 @@ define ELGAMAL
load_on auto
-<requires>
-asn1
-bigint
-bigint
-dl_algo
-keypair
-numbertheory
-pubkey
-</requires>
-
<add>
elgamal.cpp
elgamal.h
@@ -22,3 +12,11 @@ elg_core.h
elg_op.cpp
elg_op.h
</add>
+
+<requires>
+dl_algo
+dl_group
+keypair
+libstate
+numbertheory
+</requires>
diff --git a/src/pubkey/if_algo/info.txt b/src/pubkey/if_algo/info.txt
index 7686ed398..d2142f42f 100644
--- a/src/pubkey/if_algo/info.txt
+++ b/src/pubkey/if_algo/info.txt
@@ -4,12 +4,6 @@ define IF_PUBLIC_KEY_FAMILY
load_on dep
-<requires>
-asn1
-bigint
-filters
-</requires>
-
<add>
if_algo.cpp
if_algo.h
@@ -18,3 +12,11 @@ if_core.h
if_op.cpp
if_op.h
</add>
+
+<requires>
+asn1
+bigint
+libstate
+numbertheory
+pk_codecs
+</requires>
diff --git a/src/pubkey/pubkey/info.txt b/src/pubkey/info.txt
index 83b2c80cc..ee8da5b9d 100644
--- a/src/pubkey/pubkey/info.txt
+++ b/src/pubkey/info.txt
@@ -4,16 +4,6 @@ define PUBLIC_KEY_CRYPTO
load_on auto
-<requires>
-asn1
-bigint
-numbertheory
-pbe
-oid_lookup
-pk_pad
-rng
-</requires>
-
<add>
pk_algs.cpp
pk_algs.h
@@ -21,12 +11,20 @@ pk_filts.cpp
pk_filts.h
pk_keys.cpp
pk_keys.h
-pkcs8.cpp
-pkcs8.h
pubkey.cpp
pubkey.h
pubkey_enums.cpp
pubkey_enums.h
-x509_key.cpp
-x509_key.h
</add>
+
+<requires>
+alloc
+asn1
+bigint
+filters
+kdf
+oid_lookup
+pk_pad
+rng
+sym_algo
+</requires>
diff --git a/src/pubkey/keypair/info.txt b/src/pubkey/keypair/info.txt
index c6fa4af5d..9e758643f 100644
--- a/src/pubkey/keypair/info.txt
+++ b/src/pubkey/keypair/info.txt
@@ -10,5 +10,5 @@ keypair.h
</add>
<requires>
-pubkey
+libstate
</requires>
diff --git a/src/pubkey/nr/info.txt b/src/pubkey/nr/info.txt
index 6434d4385..c89820aeb 100644
--- a/src/pubkey/nr/info.txt
+++ b/src/pubkey/nr/info.txt
@@ -14,10 +14,9 @@ nr_op.h
</add>
<requires>
-asn1
-bigint
dl_algo
+dl_group
keypair
+libstate
numbertheory
-pubkey
</requires>
diff --git a/src/pubkey/pubkey/pk_algs.cpp b/src/pubkey/pk_algs.cpp
index 99d7294f0..99d7294f0 100644
--- a/src/pubkey/pubkey/pk_algs.cpp
+++ b/src/pubkey/pk_algs.cpp
diff --git a/src/pubkey/pubkey/pk_algs.h b/src/pubkey/pk_algs.h
index d32c9365b..c41bf1a63 100644
--- a/src/pubkey/pubkey/pk_algs.h
+++ b/src/pubkey/pk_algs.h
@@ -8,8 +8,7 @@
#ifndef BOTAN_PK_KEY_FACTORY_H__
#define BOTAN_PK_KEY_FACTORY_H__
-#include <botan/x509_key.h>
-#include <botan/pkcs8.h>
+#include <botan/pk_keys.h>
namespace Botan {
diff --git a/src/pubkey/pk_codecs/info.txt b/src/pubkey/pk_codecs/info.txt
new file mode 100644
index 000000000..96511a663
--- /dev/null
+++ b/src/pubkey/pk_codecs/info.txt
@@ -0,0 +1,18 @@
+realname "PK codecs (PKCS8, X.509)"
+
+load_on auto
+
+<add>
+pkcs8.h
+pkcs8.cpp
+x509_key.h
+x509_key.cpp
+</add>
+
+<requires>
+asn1
+filters
+oid_lookup
+pbe
+pem
+</requires>
diff --git a/src/pubkey/pubkey/pkcs8.cpp b/src/pubkey/pk_codecs/pkcs8.cpp
index 87f05da92..87f05da92 100644
--- a/src/pubkey/pubkey/pkcs8.cpp
+++ b/src/pubkey/pk_codecs/pkcs8.cpp
diff --git a/src/pubkey/pubkey/pkcs8.h b/src/pubkey/pk_codecs/pkcs8.h
index 87f8ba326..87f8ba326 100644
--- a/src/pubkey/pubkey/pkcs8.h
+++ b/src/pubkey/pk_codecs/pkcs8.h
diff --git a/src/pubkey/pubkey/x509_key.cpp b/src/pubkey/pk_codecs/x509_key.cpp
index f1fc59410..f1fc59410 100644
--- a/src/pubkey/pubkey/x509_key.cpp
+++ b/src/pubkey/pk_codecs/x509_key.cpp
diff --git a/src/pubkey/pubkey/x509_key.h b/src/pubkey/pk_codecs/x509_key.h
index 9404b7ecc..9404b7ecc 100644
--- a/src/pubkey/pubkey/x509_key.h
+++ b/src/pubkey/pk_codecs/x509_key.h
diff --git a/src/pubkey/pubkey/pk_filts.cpp b/src/pubkey/pk_filts.cpp
index 18da9c10b..18da9c10b 100644
--- a/src/pubkey/pubkey/pk_filts.cpp
+++ b/src/pubkey/pk_filts.cpp
diff --git a/src/pubkey/pubkey/pk_filts.h b/src/pubkey/pk_filts.h
index 8bf3fc238..8bf3fc238 100644
--- a/src/pubkey/pubkey/pk_filts.h
+++ b/src/pubkey/pk_filts.h
diff --git a/src/pubkey/pubkey/pk_keys.cpp b/src/pubkey/pk_keys.cpp
index b93158558..b93158558 100644
--- a/src/pubkey/pubkey/pk_keys.cpp
+++ b/src/pubkey/pk_keys.cpp
diff --git a/src/pubkey/pubkey/pk_keys.h b/src/pubkey/pk_keys.h
index 5b612577d..5b612577d 100644
--- a/src/pubkey/pubkey/pk_keys.h
+++ b/src/pubkey/pk_keys.h
diff --git a/src/pubkey/pubkey/pubkey.cpp b/src/pubkey/pubkey.cpp
index 4ddaa6fb6..4ddaa6fb6 100644
--- a/src/pubkey/pubkey/pubkey.cpp
+++ b/src/pubkey/pubkey.cpp
diff --git a/src/pubkey/pubkey/pubkey.h b/src/pubkey/pubkey.h
index 815550edd..815550edd 100644
--- a/src/pubkey/pubkey/pubkey.h
+++ b/src/pubkey/pubkey.h
diff --git a/src/pubkey/pubkey/pubkey_enums.cpp b/src/pubkey/pubkey_enums.cpp
index 327107dd1..327107dd1 100644
--- a/src/pubkey/pubkey/pubkey_enums.cpp
+++ b/src/pubkey/pubkey_enums.cpp
diff --git a/src/pubkey/pubkey/pubkey_enums.h b/src/pubkey/pubkey_enums.h
index 53e319f38..53e319f38 100644
--- a/src/pubkey/pubkey/pubkey_enums.h
+++ b/src/pubkey/pubkey_enums.h
diff --git a/src/pubkey/rsa/info.txt b/src/pubkey/rsa/info.txt
index ac2b6dde7..7729fd83d 100644
--- a/src/pubkey/rsa/info.txt
+++ b/src/pubkey/rsa/info.txt
@@ -4,16 +4,14 @@ define RSA
load_on auto
+<add>
+rsa.cpp
+rsa.h
+</add>
+
<requires>
-asn1
-bigint
if_algo
keypair
+libstate
numbertheory
-pubkey
</requires>
-
-<add>
-rsa.cpp
-rsa.h
-</add>
diff --git a/src/pubkey/rw/info.txt b/src/pubkey/rw/info.txt
index 40c849d1c..ada6c37d6 100644
--- a/src/pubkey/rw/info.txt
+++ b/src/pubkey/rw/info.txt
@@ -4,16 +4,14 @@ define RW
load_on auto
+<add>
+rw.cpp
+rw.h
+</add>
+
<requires>
-asn1
-bigint
if_algo
keypair
+libstate
numbertheory
-pubkey
</requires>
-
-<add>
-rw.cpp
-rw.h
-</add>
diff --git a/src/rng/auto_rng/info.txt b/src/rng/auto_rng/info.txt
index aa316367e..2f41bc068 100644
--- a/src/rng/auto_rng/info.txt
+++ b/src/rng/auto_rng/info.txt
@@ -4,14 +4,14 @@ define AUTO_SEEDING_RNG
load_on auto
-<requires>
-aes
-sha2
-hmac
-</requires>
-
<add>
auto_rng.h
auto_rng.cpp
</add>
+<requires>
+aes
+hmac
+sha2
+timer
+</requires>
diff --git a/src/rng/hmac_rng/info.txt b/src/rng/hmac_rng/info.txt
index f23f9018a..2c7f13e0a 100644
--- a/src/rng/hmac_rng/info.txt
+++ b/src/rng/hmac_rng/info.txt
@@ -8,3 +8,7 @@ load_on auto
hmac_rng.cpp
hmac_rng.h
</add>
+
+<requires>
+mac
+</requires>
diff --git a/src/rng/info.txt b/src/rng/info.txt
index 8b542b68f..44a41665d 100644
--- a/src/rng/info.txt
+++ b/src/rng/info.txt
@@ -6,3 +6,7 @@ load_on auto
rng.cpp
rng.h
</add>
+
+<requires>
+entropy
+</requires>
diff --git a/src/rng/randpool/info.txt b/src/rng/randpool/info.txt
index 1b2f79b56..cc7f61552 100644
--- a/src/rng/randpool/info.txt
+++ b/src/rng/randpool/info.txt
@@ -8,3 +8,8 @@ load_on auto
randpool.cpp
randpool.h
</add>
+
+<requires>
+block
+mac
+</requires>
diff --git a/src/rng/x931_rng/info.txt b/src/rng/x931_rng/info.txt
index 79e436822..633eb0268 100644
--- a/src/rng/x931_rng/info.txt
+++ b/src/rng/x931_rng/info.txt
@@ -10,5 +10,5 @@ x931_rng.h
</add>
<requires>
-randpool
+block
</requires>
diff --git a/src/s2k/info.txt b/src/s2k/info.txt
index 44510bbd7..e603fd937 100644
--- a/src/s2k/info.txt
+++ b/src/s2k/info.txt
@@ -2,12 +2,12 @@ realname "String to Key Functions"
load_on auto
-<requires>
-utils
-rng
-</requires>
-
<add>
s2k.cpp
s2k.h
</add>
+
+<requires>
+rng
+sym_algo
+</requires>
diff --git a/src/s2k/pbkdf1/info.txt b/src/s2k/pbkdf1/info.txt
index 3c1ae802c..4c5b27546 100644
--- a/src/s2k/pbkdf1/info.txt
+++ b/src/s2k/pbkdf1/info.txt
@@ -8,3 +8,7 @@ load_on auto
pbkdf1.cpp
pbkdf1.h
</add>
+
+<requires>
+hash
+</requires>
diff --git a/src/s2k/pbkdf2/info.txt b/src/s2k/pbkdf2/info.txt
index e51a331c6..921aeb1ab 100644
--- a/src/s2k/pbkdf2/info.txt
+++ b/src/s2k/pbkdf2/info.txt
@@ -8,3 +8,7 @@ load_on auto
pbkdf2.cpp
pbkdf2.h
</add>
+
+<requires>
+mac
+</requires>
diff --git a/src/s2k/pgps2k/info.txt b/src/s2k/pgps2k/info.txt
index a3d5a146f..14b75a02b 100644
--- a/src/s2k/pgps2k/info.txt
+++ b/src/s2k/pgps2k/info.txt
@@ -8,3 +8,7 @@ load_on auto
pgp_s2k.cpp
pgp_s2k.h
</add>
+
+<requires>
+hash
+</requires>
diff --git a/src/selftest/info.txt b/src/selftest/info.txt
index 49df21643..323a610a6 100644
--- a/src/selftest/info.txt
+++ b/src/selftest/info.txt
@@ -4,21 +4,18 @@ define SELFTESTS
load_on auto
+<add>
+selftest.cpp
+selftest.h
+</add>
+
<requires>
-hex
-des
-aes
-sha1
-sha2
-hmac
-ecb
+algo_factory
cbc
cfb
-ofb
ctr
+ecb
+filters
+hmac
+ofb
</requires>
-
-<add>
-selftest.cpp
-selftest.h
-</add>
diff --git a/src/stream/info.txt b/src/stream/info.txt
index b3d9649db..295c73708 100644
--- a/src/stream/info.txt
+++ b/src/stream/info.txt
@@ -4,12 +4,11 @@ load_on auto
define STREAM_CIPHER
-<requires>
-utils
-sym_algo
-</requires>
-
<add>
stream_cipher.h
stream_cipher.cpp
</add>
+
+<requires>
+sym_algo
+</requires>
diff --git a/src/sym_algo/info.txt b/src/sym_algo/info.txt
index 3f3adfd96..03804a92d 100644
--- a/src/sym_algo/info.txt
+++ b/src/sym_algo/info.txt
@@ -2,12 +2,15 @@ realname "Symmetric Algorithms"
load_on auto
-<requires>
-rng
-</requires>
-
<add>
sym_algo.h
symkey.cpp
symkey.h
</add>
+
+<requires>
+alloc
+filters
+hex
+rng
+</requires>
diff --git a/src/timer/info.txt b/src/timer/info.txt
index c9a860a78..6408dca45 100644
--- a/src/timer/info.txt
+++ b/src/timer/info.txt
@@ -8,3 +8,7 @@ load_on auto
timer.cpp
timer.h
</add>
+
+<requires>
+rng
+</requires>
diff --git a/src/utils/buf_comp.h b/src/utils/buf_comp/buf_comp.h
index 3f1e90bad..3f1e90bad 100644
--- a/src/utils/buf_comp.h
+++ b/src/utils/buf_comp/buf_comp.h
diff --git a/src/utils/buf_comp/info.txt b/src/utils/buf_comp/info.txt
new file mode 100644
index 000000000..bcbbc23e2
--- /dev/null
+++ b/src/utils/buf_comp/info.txt
@@ -0,0 +1,11 @@
+realname "Buffered Computation"
+
+load_on auto
+
+<add>
+buf_comp.h
+</add>
+
+<requires>
+alloc
+</requires>
diff --git a/src/utils/datastor.cpp b/src/utils/datastor/datastor.cpp
index 129dad9bf..129dad9bf 100644
--- a/src/utils/datastor.cpp
+++ b/src/utils/datastor/datastor.cpp
diff --git a/src/utils/datastor.h b/src/utils/datastor/datastor.h
index 7ee626fda..7ee626fda 100644
--- a/src/utils/datastor.h
+++ b/src/utils/datastor/datastor.h
diff --git a/src/utils/datastor/info.txt b/src/utils/datastor/info.txt
new file mode 100644
index 000000000..8c38a3ac8
--- /dev/null
+++ b/src/utils/datastor/info.txt
@@ -0,0 +1,13 @@
+realname "Datastore"
+
+load_on auto
+
+<add>
+datastor.cpp
+datastor.h
+</add>
+
+<requires>
+alloc
+filters
+</requires>
diff --git a/src/utils/info.txt b/src/utils/info.txt
index 815ad4efc..95ea5fc2e 100644
--- a/src/utils/info.txt
+++ b/src/utils/info.txt
@@ -8,20 +8,11 @@ load_on auto
tru64 -> rt
</libs>
-<requires>
-filters
-</requires>
-
<add>
bit_ops.h
bswap.h
-buf_comp.h
charset.cpp
charset.h
-data_src.cpp
-data_src.h
-datastor.cpp
-datastor.h
exceptn.cpp
exceptn.h
loadstor.h
@@ -30,9 +21,6 @@ mlock.cpp
parsing.cpp
parsing.h
rotate.h
-scan_name.cpp
-scan_name.h
-secmem.h
stl_util.h
types.h
ui.cpp