diff options
Diffstat (limited to 'src/arch/x86/include/ipxe/rdrand.h')
-rw-r--r-- | src/arch/x86/include/ipxe/rdrand.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/arch/x86/include/ipxe/rdrand.h b/src/arch/x86/include/ipxe/rdrand.h new file mode 100644 index 00000000..c9c170fb --- /dev/null +++ b/src/arch/x86/include/ipxe/rdrand.h @@ -0,0 +1,37 @@ +#ifndef _IPXE_RDRAND_H +#define _IPXE_RDRAND_H + +/** @file + * + * Hardware random number generator + * + */ + +FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); + +#include <stdint.h> +#include <ipxe/drbg.h> + +#ifdef ENTROPY_RDRAND +#define ENTROPY_PREFIX_rdrand +#else +#define ENTROPY_PREFIX_rdrand __rdrand_ +#endif + +/** + * min-entropy per sample + * + * @ret min_entropy min-entropy of each sample + */ +static inline __always_inline min_entropy_t +ENTROPY_INLINE ( rdrand, min_entropy_per_sample ) ( void ) { + + /* Data returned by RDRAND is theoretically full entropy, up + * to a security strength of 128 bits. + */ + if ( DRBG_SECURITY_STRENGTH > 128 ) + return 0; + return MIN_ENTROPY ( 8 * sizeof ( noise_sample_t ) ); +} + +#endif /* _IPXE_RDRAND_H */ |