summaryrefslogtreecommitdiffstats
path: root/src/arch/x86/include/ipxe/rdrand.h
diff options
context:
space:
mode:
authorMichael Brown2023-02-15 23:43:33 +0100
committerMichael Brown2023-02-15 23:43:33 +0100
commitcff857461be443339aa39d614635d9a4eae8f8b2 (patch)
treea145a1a693e24028edcd9cbf61c2127c160cdc2e /src/arch/x86/include/ipxe/rdrand.h
parent[efi] Support the initrd autodetection mechanism in newer Linux kernels (diff)
downloadipxe-cff857461be443339aa39d614635d9a4eae8f8b2.tar.gz
ipxe-cff857461be443339aa39d614635d9a4eae8f8b2.tar.xz
ipxe-cff857461be443339aa39d614635d9a4eae8f8b2.zip
[rng] Add RDRAND as an entropy source
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/arch/x86/include/ipxe/rdrand.h')
-rw-r--r--src/arch/x86/include/ipxe/rdrand.h37
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 000000000..c9c170fb0
--- /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 */