📄 rng.cpp
字号:
/************************************************** Global RNG Source File ** (C) 1999-2002 The Botan Project **************************************************/#include <botan/rng.h>#include <botan/mutex.h>namespace Botan {namespace {RandomNumberGenerator* global_rng = 0;Mutex* global_rng_lock = 0;}namespace Global_RNG {/************************************************** Remove entropy from the global RNG **************************************************/void randomize(byte output[], u32bit size) { if(!global_rng) throw Exception("Global_RNG::randomize: The global RNG is not set"); global_rng_lock->lock(); global_rng->randomize(output, size); global_rng_lock->unlock(); }/************************************************** Remove entropy from the global RNG **************************************************/byte random() { byte ret = 0; randomize(&ret, 1); return ret; }/************************************************** Add entropy to the global RNG **************************************************/void add_entropy(const byte entropy[], u32bit size) { if(!global_rng) return; global_rng_lock->lock(); global_rng->add_entropy(entropy, size); global_rng_lock->unlock(); }/************************************************** Add entropy to the global RNG **************************************************/void add_entropy(EntropySource& src, bool slow_poll) { if(!global_rng) return; global_rng_lock->lock(); global_rng->add_entropy(src, slow_poll); global_rng_lock->unlock(); }}/************************************************** Set the global RNG **************************************************/void set_global_rng(RandomNumberGenerator* rng) { if(rng == 0) { delete global_rng; delete global_rng_lock; global_rng = 0; global_rng_lock = 0; return; } if(!global_rng_lock) global_rng_lock = get_mutex(); SecureBuffer<byte, 128> state; if(global_rng) Global_RNG::randomize(state, state.size()); global_rng_lock->lock(); if(global_rng) delete global_rng; global_rng = rng; global_rng_lock->unlock(); Global_RNG::add_entropy(state, state.size()); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -