Botan 3.9.0
Crypto and TLS for C&
getentropy.cpp
Go to the documentation of this file.
1/*
2* System Call getentropy(2)
3* (C) 2017 Alexander Bluhm (genua GmbH)
4*
5* Botan is released under the Simplified BSD License (see license.txt)
6*/
7
8#include <botan/internal/getentropy.h>
9
10#include <botan/rng.h>
11#include <unistd.h>
12
13// macOS and Android include it in sys/random.h instead
14#if __has_include(<sys/random.h>)
15 #include <sys/random.h>
16#endif
17
18namespace Botan {
19
20/**
21* Gather 256 bytes entropy from getentropy(2). Note that maximum
22* buffer size is limited to 256 bytes. On OpenBSD this does neither
23* block nor fail.
24*/
27
28 if(::getentropy(buf.data(), buf.size()) == 0) {
29 rng.add_entropy(buf.data(), buf.size());
30 return buf.size() * 8;
31 }
32
33 return 0;
34}
35
36} // namespace Botan
size_t poll(RandomNumberGenerator &rng) override
void add_entropy(std::span< const uint8_t > input)
Definition rng.h:94
std::vector< T, secure_allocator< T > > secure_vector
Definition secmem.h:69