7 #include <botan/internal/p9_darn.h>
8 #include <botan/cpuid.h>
14 bool read_darn(secure_vector<uint64_t>& seed)
16 const size_t DARN_RETRIES = 512;
18 for(
size_t i = 0; i != DARN_RETRIES; ++i)
23 asm volatile(
"darn %0, 2" :
"=r" (r));
40 const size_t DARN_BYTES = 1024;
41 static_assert(DARN_BYTES % 8 == 0,
"Bad DARN configuration");
43 if(CPUID::has_darn_rng())
46 seed.reserve(DARN_BYTES / 8);
48 for(
size_t p = 0; p != DARN_BYTES / 8; ++p)
56 rng.
add_entropy(reinterpret_cast<const uint8_t*>(seed.data()),
57 seed.size() *
sizeof(uint32_t));
virtual void add_entropy(const uint8_t input[], size_t length)=0
std::vector< T, secure_allocator< T >> secure_vector
size_t poll(RandomNumberGenerator &rng) override