blob: e0933a731a082d9c30668e5f2d8be9620873a1ac [file] [log] [blame]
#pragma once
#include <array>
#include <concepts>
#include <cstdint>
/**
* Concept for an Ethernet adaptor.
*/
template<typename T>
concept IsEntropySource = requires(T source)
{
/**
* Must export a flag indicating whether this is a cryptographically
* secure random number.
*/
{
T::IsSecure
} -> std::convertible_to<const bool>;
/**
* Must return a random number. All bits of the value type are assumed to
* be random, this should use a narrower type if it guarantees less
* entropy.
*/
{
source()
} -> std::same_as<typename T::ValueType>;
/**
* Must provide a method that reseeds the entropy source. If this is a
* hardware whitening engine that is continuously fed with entropy, this
* may be an empty function. There are no constraints on the return type
* of this.
*/
{source.reseed()};
};