16 #include <type_traits> 42 virtual void GetBytes(
unsigned char* buffer,
size_t bufferSize) = 0;
56 template <
typename DataType = u
int64_t>
66 SecureRandom(
const std::shared_ptr<SecureRandomBytes>& entropySource) : m_entropy(entropySource)
67 { static_assert(std::is_unsigned<DataType>::value,
"Type DataType must be integral"); }
79 unsigned char buffer[
sizeof(DataType)];
80 m_entropy->GetBytes(buffer,
sizeof(DataType));
85 for (
size_t i = 0; i <
sizeof(DataType); ++i)
96 operator bool()
const {
return *m_entropy; }
99 std::shared_ptr<SecureRandomBytes> m_entropy;
108 virtual std::shared_ptr<SecureRandomBytes> CreateImplementation()
const = 0;
virtual void InitStaticState()
virtual DataType operator()()
virtual void GetBytes(unsigned char *buffer, size_t bufferSize)=0
SecureRandom(const std::shared_ptr< SecureRandomBytes > &entropySource)
virtual ~SecureRandomBytes()=default
virtual void CleanupStaticState()
JSON (JavaScript Object Notation).