📄 rng_seed.cpp
字号:
/************************************************** Global RNG Seeding Source File ** (C) 1999-2002 The Botan Project **************************************************/#include <botan/rng.h>#include <botan/es_file.h>#if defined(BOTAN_EXT_ENTROPY_SRC_UNIX) #include <botan/es_unix.h>#endif#if defined(BOTAN_EXT_ENTROPY_SRC_FTW) #include <botan/es_ftw.h>#endif#if defined(BOTAN_EXT_ENTROPY_SRC_EGD) #include <botan/es_egd.h>#endifnamespace Botan {namespace {/************************************************** Try to do a poll on an EntropySource **************************************************/bool poll_es(EntropySource& es, u32bit buf_size = 256) { SecureVector<byte> buffer(buf_size); u32bit got = es.slow_poll(buffer, buffer.size()); Global_RNG::add_entropy(buffer, got); return (got > (buffer.size() / 2)); }}namespace Global_RNG {/************************************************** Seed the global RNG **************************************************/bool seed(u32bit level, const std::string& egd_path) { if(level > 2) level = 2; bool seeded = false; File_EntropySource es_file; seeded = poll_es(es_file, 512); if(level == 0 || (seeded && level == 1)) return seeded; if(egd_path != "") {#if defined(BOTAN_EXT_ENTROPY_SRC_EGD) EGD_EntropySource es_egd(egd_path); seeded = poll_es(es_egd) || seeded;#endif } if(level == 1 || (seeded && level == 2)) return seeded;#if defined(BOTAN_EXT_ENTROPY_SRC_UNIX) Unix_EntropySource es_unix; seeded = poll_es(es_unix) || seeded;#endif#if defined(BOTAN_EXT_ENTROPY_SRC_FTW) FTW_EntropySource es_ftw; seeded = poll_es(es_ftw) || seeded;#endif return seeded; }}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -