aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/entropy/p9_darn/p9_darn.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/entropy/p9_darn/p9_darn.cpp')
-rw-r--r--src/lib/entropy/p9_darn/p9_darn.cpp65
1 files changed, 0 insertions, 65 deletions
diff --git a/src/lib/entropy/p9_darn/p9_darn.cpp b/src/lib/entropy/p9_darn/p9_darn.cpp
deleted file mode 100644
index 8731b94e1..000000000
--- a/src/lib/entropy/p9_darn/p9_darn.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-* (C) 2019 Jack Lloyd
-*
-* Botan is released under the Simplified BSD License (see license.txt)
-*/
-
-#include <botan/internal/p9_darn.h>
-#include <botan/cpuid.h>
-
-namespace Botan {
-
-namespace {
-
-bool read_darn(secure_vector<uint64_t>& seed)
- {
- const size_t DARN_RETRIES = 512;
-
- for(size_t i = 0; i != DARN_RETRIES; ++i)
- {
- uint64_t r = 0;
-
- // DARN 0: 32-bit conditioned, 1: 64-bit condition, 2: 64-bit raw (ala RDSEED)
- asm volatile("darn %0, 2" : "=r" (r));
-
- // DARN indicates error by 0xFF..FF, ie is biased (!?!?)
- if((~r) != 0)
- {
- seed.push_back(r);
- return true;
- }
- }
-
- return false; // failed to produce an output after many attempts
- }
-
-}
-
-size_t POWER9_DARN::poll(RandomNumberGenerator& rng)
- {
- const size_t DARN_BYTES = 1024;
- static_assert(DARN_BYTES % 8 == 0, "Bad DARN configuration");
-
- if(CPUID::has_darn_rng())
- {
- secure_vector<uint64_t> seed;
- seed.reserve(DARN_BYTES / 8);
-
- for(size_t p = 0; p != DARN_BYTES / 8; ++p)
- {
- if(!read_darn(seed))
- break;
- }
-
- if(seed.size() > 0)
- {
- rng.add_entropy(reinterpret_cast<const uint8_t*>(seed.data()),
- seed.size() * sizeof(uint32_t));
- }
- }
-
- // DARN is used but not trusted
- return 0;
- }
-
-}