diff options
author | lloyd <[email protected]> | 2006-07-28 14:13:44 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2006-07-28 14:13:44 +0000 |
commit | 0a9ee0e122aed780e6da5428fe0f0a007c84b87b (patch) | |
tree | 0f26da86ec14ec9d7a9f40fc8b18c586bd883f59 /src/init_def.cpp | |
parent | 2b4733d5893f0301b15f987c3309befc88eeb768 (diff) |
Change Builtin_Module constructor to take an InitializerOptions
instead of just a boolean, so it can (if desired) examine any arguments
it likes.
Only run the startup self tests if the selftest or fips140 option is
toggled on.
Diffstat (limited to 'src/init_def.cpp')
-rw-r--r-- | src/init_def.cpp | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/src/init_def.cpp b/src/init_def.cpp index 31cb89ea7..f05ef6952 100644 --- a/src/init_def.cpp +++ b/src/init_def.cpp @@ -46,7 +46,7 @@ namespace Init { *************************************************/ void initialize(const InitializerOptions& args) { - Builtin_Modules modules(args.secure_memory()); + Builtin_Modules modules(args); set_global_state( new Library_State( @@ -63,31 +63,37 @@ void initialize(const InitializerOptions& args) global_state().load(modules); global_state().set_prng(new ANSI_X931_RNG); - const u32bit min_entropy = - global_config().option_as_u32bit("rng/min_entropy"); - - if(min_entropy != 0 && args.seed_rng()) + if(args.seed_rng()) { - u32bit bits_so_far = 0; + const u32bit min_entropy = + global_config().option_as_u32bit("rng/min_entropy"); - for(u32bit j = 0; j != 4; ++j) + if(min_entropy != 0) { - u32bit to_get = min_entropy - bits_so_far; + u32bit bits_so_far = 0; - bits_so_far += global_state().seed_prng(true, to_get); + for(u32bit j = 0; j != 4; ++j) + { + u32bit to_get = min_entropy - bits_so_far; - if(bits_so_far >= min_entropy) - break; - } + bits_so_far += global_state().seed_prng(true, to_get); + + if(bits_so_far >= min_entropy) + break; + } - if(bits_so_far < min_entropy) - throw PRNG_Unseeded("Unable to collect sufficient entropy"); + if(bits_so_far < min_entropy) + throw PRNG_Unseeded("Unable to collect sufficient entropy"); + } } - if(!FIPS140::passes_self_tests()) + if(args.fips_mode() || args.self_test()) { - deinitialize(); - throw Self_Test_Failure("FIPS-140 startup tests"); + if(!FIPS140::passes_self_tests()) + { + deinitialize(); + throw Self_Test_Failure("FIPS-140 startup tests"); + } } } |