/************************************************* * Initialization Options Source File * * (C) 1999-2007 Jack Lloyd * *************************************************/ #include #include #include #include namespace Botan { namespace { /************************************************* * Check for an arbitrary boolean-valued option * *************************************************/ bool boolean_arg(const std::map& args, const std::string& key, bool not_found = false) { std::map::const_iterator i = args.find(key); if(i == args.end()) return not_found; std::string value = i->second; if(value == "1" || value == "true" || value == "yes" || value == "on") return true; if(value == "0" || value == "false" || value == "no" || value == "off") return false; if(value == "default") return not_found; throw Invalid_Argument("InitializerOptions: Bad argument for boolean " + key + " of '" + value + "'"); } } /************************************************* * Check if thread safety was requested * *************************************************/ bool InitializerOptions::thread_safe() const { return boolean_arg(args, "thread_safe"); } /************************************************* * Check if secure allocation was requested * *************************************************/ bool InitializerOptions::secure_memory() const { return boolean_arg(args, "secure_memory"); } /************************************************* * Check if using engines was requested * *************************************************/ bool InitializerOptions::use_engines() const { return boolean_arg(args, "use_engines"); } /************************************************* * Check if FIPS mode was requested * *************************************************/ bool InitializerOptions::fips_mode() const { return boolean_arg(args, "fips140"); } /************************************************* * Check if startup self tests were requested * *************************************************/ bool InitializerOptions::self_test() const { return boolean_arg(args, "selftest", true); } /************************************************* * Setup an InitializerOptions * *************************************************/ InitializerOptions::InitializerOptions(const std::string& arg_string) { const std::vector arg_list = split_on(arg_string, ' '); for(u32bit j = 0; j != arg_list.size(); ++j) { if(arg_list[j].size() == 0) continue; if(arg_list[j].find('=') == std::string::npos) args[arg_list[j]] = "true"; else { std::vector name_and_value = split_on(arg_list[j], '='); args[name_and_value[0]] = name_and_value[1]; } } } }