summaryrefslogtreecommitdiff
path: root/src/arch/x86/include/ipxe/rdrand.h
blob: c9c170fb0b4b27c7018e2594aae6e91fc97bf5ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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 */