RngGetBytes() relies on the RngLib. The RngLib might use the RNDR instruction if the FEAT_RNG feature is present. RngGetInfo and RngGetRNG both must check that RngGetBytes() is working before advertising/using it. To do so, allocate an array storing the available algorithms. The Rng algorithm at the lowest index will be the default Rng algorithm. The array is shared between RngGetInfo and RngGetRNG. This array is allocated when the driver is loaded, and freed when unloaded. This patch also prevents from having PcdCpuRngSupportedAlgorithm let to a zero GUID, but let the possibility to have no valid Rng algorithm in such case. Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com> Acked-by: Jiewen Yao <jiewen.yao@intel.com>
82 lines
2.7 KiB
INI
82 lines
2.7 KiB
INI
## @file
|
|
# Produces the UEFI Random Number Generator protocol
|
|
#
|
|
# This module will leverage Intel Secure Key technology to produce the Random
|
|
# Number Generator protocol, which is used to provide high-quality random numbers
|
|
# for use in applications, or entropy for seeding other random number generators.
|
|
# Refer to http://software.intel.com/en-us/articles/intel-digital-random-number
|
|
# -generator-drng-software-implementation-guide/ for more information about Intel
|
|
# Secure Key technology.
|
|
#
|
|
# Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>
|
|
# (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
|
|
# Copyright (c) 2021 - 2022, Arm Limited. All rights reserved.<BR>
|
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
#
|
|
##
|
|
|
|
[Defines]
|
|
INF_VERSION = 0x00010005
|
|
BASE_NAME = RngDxe
|
|
FILE_GUID = B981A835-6EE8-4f4c-AE0B-210AA0BFBF01
|
|
MODULE_TYPE = DXE_DRIVER
|
|
VERSION_STRING = 1.0
|
|
ENTRY_POINT = RngDriverEntry
|
|
UNLOAD_IMAGE = RngDriverUnLoad
|
|
MODULE_UNI_FILE = RngDxe.uni
|
|
|
|
#
|
|
# The following information is for reference only and not required by the build tools.
|
|
#
|
|
# VALID_ARCHITECTURES = IA32 X64 AARCH64
|
|
#
|
|
|
|
[Sources.common]
|
|
RngDxe.c
|
|
RngDxeInternals.h
|
|
|
|
[Sources.IA32, Sources.X64]
|
|
Rand/RngDxe.c
|
|
Rand/RdRand.c
|
|
Rand/AesCore.c
|
|
Rand/AesCore.h
|
|
|
|
[Sources.AARCH64]
|
|
AArch64/RngDxe.c
|
|
|
|
[Packages]
|
|
MdePkg/MdePkg.dec
|
|
SecurityPkg/SecurityPkg.dec
|
|
|
|
[LibraryClasses]
|
|
UefiLib
|
|
UefiBootServicesTableLib
|
|
BaseLib
|
|
DebugLib
|
|
UefiDriverEntryPoint
|
|
TimerLib
|
|
RngLib
|
|
|
|
[Guids]
|
|
gEfiRngAlgorithmSp80090Hash256Guid ## SOMETIMES_PRODUCES ## GUID # Unique ID of the algorithm for RNG
|
|
gEfiRngAlgorithmSp80090Hmac256Guid ## SOMETIMES_PRODUCES ## GUID # Unique ID of the algorithm for RNG
|
|
gEfiRngAlgorithmSp80090Ctr256Guid ## SOMETIMES_PRODUCES ## GUID # Unique ID of the algorithm for RNG
|
|
gEfiRngAlgorithmX9313DesGuid ## SOMETIMES_PRODUCES ## GUID # Unique ID of the algorithm for RNG
|
|
gEfiRngAlgorithmX931AesGuid ## SOMETIMES_PRODUCES ## GUID # Unique ID of the algorithm for RNG
|
|
gEfiRngAlgorithmRaw ## SOMETIMES_PRODUCES ## GUID # Unique ID of the algorithm for RNG
|
|
|
|
[Protocols]
|
|
gEfiRngProtocolGuid ## PRODUCES
|
|
|
|
[Pcd]
|
|
gEfiSecurityPkgTokenSpaceGuid.PcdCpuRngSupportedAlgorithm ## CONSUMES
|
|
|
|
[Depex]
|
|
TRUE
|
|
|
|
[BuildOptions]
|
|
XCODE:*_*_*_CC_FLAGS = -mmmx -msse
|
|
|
|
[UserExtensions.TianoCore."ExtraFiles"]
|
|
RngDxeExtra.uni
|