[efi] Use the EFI_RNG_PROTOCOL as an entropy source if available
authorMichael Brown <mcb30@ipxe.org>
Tue, 14 Apr 2015 16:53:13 +0000 (17:53 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 14 Apr 2015 16:53:13 +0000 (17:53 +0100)
commit7ca801d637de3e2941f02f376ee1f0e26eabdfcb
treed145554705718f0598a96ae837fa35561089396a
parentc6c7e78c42fff7b057ce32467ac6aa84bef94026
[efi] Use the EFI_RNG_PROTOCOL as an entropy source if available

Entropy gathering via timer ticks is slow under UEFI (of the order of
20-30 seconds on some machines).  Use the EFI_RNG_PROTOCOL if
available, to speed up the process of entropy gathering.

Note that some implementations (including EDK2) will fail if we
request fewer than 32 random bytes at a time, and that the RNG
protocol provides no guarantees about the amount of entropy provided
by a call to GetRNG().  We take the (hopefully pessimistic) view that
a 32-byte block returned by GetRNG() will contain at least the 1.3
bits of entropy claimed by min_entropy_per_sample().

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/x86/interface/efi/efi_entropy.c
src/include/ipxe/efi/Protocol/Rng.h [new file with mode: 0644]