#include <proc_walk.h>
File Tree Walking Entropy Source
Definition at line 26 of file proc_walk.h.
Botan::ProcWalking_EntropySource::ProcWalking_EntropySource |
( |
const std::string & |
root_dir | ) |
|
|
inline |
Definition at line 33 of file proc_walk.h.
34 m_path(root_dir), m_dir(
nullptr) {}
std::unique_ptr< Entropy_Source > Botan::Entropy_Source::create |
( |
const std::string & |
type | ) |
|
|
staticinherited |
Return a new entropy source of a particular type, or null Each entropy source may require substantial resources (eg, a file handle or socket instance), so try to share them among multiple RNGs, or just use the preconfigured global list accessed by Entropy_Sources::global_sources()
Definition at line 45 of file entropy_srcs.cpp.
Referenced by Botan::Entropy_Sources::Entropy_Sources().
49 #if defined(BOTAN_HAS_ENTROPY_SRC_RDRAND)
50 return std::unique_ptr<Entropy_Source>(
new Intel_Rdrand);
56 #if defined(BOTAN_HAS_ENTROPY_SRC_RDSEED)
57 return std::unique_ptr<Entropy_Source>(
new Intel_Rdseed);
61 if(
name ==
"darwin_secrandom")
63 #if defined(BOTAN_HAS_ENTROPY_SRC_DARWIN_SECRANDOM)
64 return std::unique_ptr<Entropy_Source>(
new Darwin_SecRandom);
68 if(
name ==
"getentropy")
70 #if defined(BOTAN_HAS_ENTROPY_SRC_GETENTROPY)
71 return std::unique_ptr<Entropy_Source>(
new Getentropy);
75 if(
name ==
"dev_random")
77 #if defined(BOTAN_HAS_ENTROPY_SRC_DEV_RANDOM)
78 return std::unique_ptr<Entropy_Source>(
new Device_EntropySource(BOTAN_SYSTEM_RNG_POLL_DEVICES));
82 if(
name ==
"win32_cryptoapi")
84 #if defined(BOTAN_HAS_ENTROPY_SRC_CAPI)
85 return std::unique_ptr<Entropy_Source>(
new Win32_CAPI_EntropySource(
"RSA_FULL"));
89 if(
name ==
"proc_walk")
91 #if defined(BOTAN_HAS_ENTROPY_SRC_PROC_WALKER)
92 const std::string root_dir = BOTAN_ENTROPY_PROC_FS_PATH;
94 return std::unique_ptr<Entropy_Source>(
new ProcWalking_EntropySource(root_dir));
98 if(
name ==
"system_stats")
100 #if defined(BOTAN_HAS_ENTROPY_SRC_WIN32)
101 return std::unique_ptr<Entropy_Source>(
new Win32_EntropySource);
105 return std::unique_ptr<Entropy_Source>();
virtual std::string name() const =0
std::string Botan::ProcWalking_EntropySource::name |
( |
| ) |
const |
|
inlineoverridevirtual |
Perform an entropy gathering poll
- Parameters
-
rng | will be provided with entropy via calls to add_entropy |
- Returns
- conservative estimate of actual entropy added to rng during poll
Implements Botan::Entropy_Source.
Definition at line 113 of file proc_walk.cpp.
References Botan::RandomNumberGenerator::add_entropy().
115 const size_t MAX_FILES_READ_PER_POLL = 2048;
117 lock_guard_type<mutex_type> lock(m_mutex);
120 m_dir.reset(
new Directory_Walker(m_path));
126 for(
size_t i = 0; i != MAX_FILES_READ_PER_POLL; ++i)
128 int fd = m_dir->next_fd();
137 ssize_t got = ::read(fd, m_buf.data(), m_buf.size());
142 rng.add_entropy(m_buf.data(),
static_cast<size_t>(got));
The documentation for this class was generated from the following files: