SecurityPkg/RngDxe: Rename RdRandGenerateEntropy to generic name

Bugzilla: 3668 (https://bugzilla.tianocore.org/show_bug.cgi?id=3668)

Rename RdRandGenerateEntropy() to GenerateEntropy() to provide a
common interface to generate entropy on other architectures.
GenerateEntropy() is intended to generate high quality entropy.

Also move the definition to RngDxeInternals.h

Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
Acked-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
Sami Mujawar 2022-10-28 17:32:50 +02:00 committed by mergify[bot]
parent e00ec499c5
commit 8a89747844
5 changed files with 36 additions and 49 deletions

View File

@ -1,15 +1,23 @@
/** @file /** @file
Support routines for RDRAND instruction access. Support routines for RDRAND instruction access, which will leverage
Intel Secure Key technology 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) 2021 - 2022, Arm Limited. All rights reserved.<BR>
Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR> Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent SPDX-License-Identifier: BSD-2-Clause-Patent
**/ **/
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/RngLib.h> #include <Library/RngLib.h>
#include <Library/TimerLib.h>
#include "AesCore.h" #include "AesCore.h"
#include "RdRand.h"
#include "RngDxeInternals.h" #include "RngDxeInternals.h"
/** /**
@ -87,7 +95,7 @@ RdRandGetSeed128 (
**/ **/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
RdRandGenerateEntropy ( GenerateEntropy (
IN UINTN Length, IN UINTN Length,
OUT UINT8 *Entropy OUT UINT8 *Entropy
) )

View File

@ -1,43 +0,0 @@
/** @file
Header for the RDRAND APIs used by RNG DXE driver.
Support API definitions for RDRAND instruction access, which will leverage
Intel Secure Key technology 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, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef __RD_RAND_H__
#define __RD_RAND_H__
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/TimerLib.h>
#include <Protocol/Rng.h>
/**
Generate high-quality entropy source through RDRAND.
@param[in] Length Size of the buffer, in bytes, to fill with.
@param[out] Entropy Pointer to the buffer to store the entropy data.
@retval EFI_SUCCESS Entropy generation succeeded.
@retval EFI_NOT_READY Failed to request random data.
**/
EFI_STATUS
EFIAPI
RdRandGenerateEntropy (
IN UINTN Length,
OUT UINT8 *Entropy
);
#endif // __RD_RAND_H__

View File

@ -14,13 +14,16 @@
- EFI_RNG_ALGORITHM_X9_31_3DES_GUID - Unsupported - EFI_RNG_ALGORITHM_X9_31_3DES_GUID - Unsupported
- EFI_RNG_ALGORITHM_X9_31_AES_GUID - Unsupported - EFI_RNG_ALGORITHM_X9_31_AES_GUID - Unsupported
Copyright (c) 2021 - 2022, Arm Limited. All rights reserved.<BR>
Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR> Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent SPDX-License-Identifier: BSD-2-Clause-Patent
**/ **/
#include "RdRand.h" #include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include "RngDxeInternals.h" #include "RngDxeInternals.h"
/** /**
@ -88,7 +91,7 @@ RngGetRNG (
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }
Status = RdRandGenerateEntropy (RNGValueLength, RNGValue); Status = GenerateEntropy (RNGValueLength, RNGValue);
return Status; return Status;
} }

View File

@ -10,6 +10,7 @@
# #
# Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>
# (C) Copyright 2015 Hewlett Packard Enterprise Development LP<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 # SPDX-License-Identifier: BSD-2-Clause-Patent
# #
## ##
@ -36,7 +37,6 @@
[Sources.IA32, Sources.X64] [Sources.IA32, Sources.X64]
Rand/RngDxe.c Rand/RngDxe.c
Rand/RdRand.c Rand/RdRand.c
Rand/RdRand.h
Rand/AesCore.c Rand/AesCore.c
Rand/AesCore.h Rand/AesCore.h

View File

@ -10,6 +10,8 @@
#ifndef RNGDXE_INTERNALS_H_ #ifndef RNGDXE_INTERNALS_H_
#define RNGDXE_INTERNALS_H_ #define RNGDXE_INTERNALS_H_
#include <Protocol/Rng.h>
/** /**
Returns information about the random number generation implementation. Returns information about the random number generation implementation.
@ -114,4 +116,21 @@ RngGetBytes (
OUT UINT8 *RandBuffer OUT UINT8 *RandBuffer
); );
/**
Generate high-quality entropy source using a TRNG or through RDRAND.
@param[in] Length Size of the buffer, in bytes, to fill with.
@param[out] Entropy Pointer to the buffer to store the entropy data.
@retval EFI_SUCCESS Entropy generation succeeded.
@retval EFI_NOT_READY Failed to request random data.
**/
EFI_STATUS
EFIAPI
GenerateEntropy (
IN UINTN Length,
OUT UINT8 *Entropy
);
#endif // RNGDXE_INTERNALS_H_ #endif // RNGDXE_INTERNALS_H_