LONG, Qin, Do you know if the 10uS delay required in RdRandGetSeed128()?
Thanks, Mike >-----Original Message----- >From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Long, >Qin >Sent: Wednesday, October 07, 2015 8:44 PM >To: Justen, Jordan L; Thomas Palmer; edk2-devel@lists.01.org >Subject: Re: [edk2] [PATCH v3] Pkg-Module: Integrate new RngLib into RngDxe > >Thomas, > >Thanks for doing this. >I think it's better to separate your patch into two parts (one for MdePkg, and >the other for SecurityPkg). Then you can CC me as Jordan's suggestion. > > >Best Regards & Thanks, >LONG, Qin > >> -----Original Message----- >> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of >> Jordan Justen >> Sent: Thursday, October 08, 2015 11:36 AM >> To: Thomas Palmer; edk2-devel@lists.01.org >> Subject: Re: [edk2] [PATCH v3] Pkg-Module: Integrate new RngLib into >> RngDxe >> >> In the subject line, 'Pkg-Module' should be something like 'MdePkg:' >> or 'SecurityPkg/RandomNumberGenerator:'. >> >> On 2015-10-07 18:55:42, Thomas Palmer wrote: >> > Use the new RngLib to provide the IA32/X64 random data for RngDxe. >> > Remove x86 specific functions from RdRand files. >> > Clean up files in RngDxe/IA32 and RngDxe/X64 that are subsumed by files >> in BaseRngLib. >> > Simplify RngDxe by using WriteUnaligned64 for both IA32 and X64 >> platforms. >> > Create and use GetRandomNumber128 in RngDxe to leverage 128 bit >> > support found in some HW RNG devices >> >> It sounds like you are doing about 5 things here. How about 5 patches? >> >> Each patch should only touch one package whenever possiable. >> >> Also, consider adding 'Cc:' near your Signed-off-by for the maintainers of a >> package. (see Maintainers.txt) >> >> -Jordan >> >> > Contributed-under: TianoCore Contribution Agreement 1.0 >> > Signed-off-by: Thomas Palmer <thomas.pal...@hpe.com> >> > --- >> > MdePkg/Include/Library/RngLib.h | 17 ++ >> > MdePkg/Library/BaseRngLib/BaseRng.c | 32 +++ >> > .../RngDxe/IA32/AsmRdRand.asm | 67 ----- >> > .../RandomNumberGenerator/RngDxe/IA32/GccRdRand.c | 69 ------ >> > .../RandomNumberGenerator/RngDxe/IA32/RdRandWord.c | 104 -------- >> > SecurityPkg/RandomNumberGenerator/RngDxe/RdRand.c | 256 >> > ++------------------ >> SecurityPkg/RandomNumberGenerator/RngDxe/RdRand.h | 151 +----------- >> > SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.c | 9 +- >> > .../RandomNumberGenerator/RngDxe/RngDxe.inf | 14 +- >> > .../RandomNumberGenerator/RngDxe/X64/AsmRdRand.asm | 83 ------- >> > .../RandomNumberGenerator/RngDxe/X64/GccRdRand.c | 95 -------- >> > .../RandomNumberGenerator/RngDxe/X64/RdRandWord.c | 70 ------ >> > SecurityPkg/SecurityPkg.dsc | 3 + >> > 13 files changed, 75 insertions(+), 895 deletions(-) delete mode >> > 100644 >> SecurityPkg/RandomNumberGenerator/RngDxe/IA32/AsmRdRand.asm >> > delete mode 100644 >> > SecurityPkg/RandomNumberGenerator/RngDxe/IA32/GccRdRand.c >> > delete mode 100644 >> > SecurityPkg/RandomNumberGenerator/RngDxe/IA32/RdRandWord.c >> > delete mode 100644 >> > SecurityPkg/RandomNumberGenerator/RngDxe/X64/AsmRdRand.asm >> > delete mode 100644 >> > SecurityPkg/RandomNumberGenerator/RngDxe/X64/GccRdRand.c >> > delete mode 100644 >> > SecurityPkg/RandomNumberGenerator/RngDxe/X64/RdRandWord.c >> > >> > diff --git a/MdePkg/Include/Library/RngLib.h >> > b/MdePkg/Include/Library/RngLib.h index 157a931..ece4394 100644 >> > --- a/MdePkg/Include/Library/RngLib.h >> > +++ b/MdePkg/Include/Library/RngLib.h >> > @@ -66,4 +66,21 @@ GetRandomNumber64 ( >> > OUT UINT64 *Rand >> > ); >> > >> > +/** >> > + Generates a 128-bit random number. >> > + >> > + if Rand is NULL, then ASSERT(). >> > + >> > + @param[out] Rand Buffer pointer to store the 128-bit random value. >> > + >> > + @retval TRUE Random number generated successfully. >> > + @retval FALSE Failed to generate the random number. >> > + >> > +**/ >> > +BOOLEAN >> > +EFIAPI >> > +GetRandomNumber128 ( >> > + OUT UINT64 *Rand >> > + ); >> > + >> > #endif // __RNG_LIB_H__ >> > diff --git a/MdePkg/Library/BaseRngLib/BaseRng.c >> > b/MdePkg/Library/BaseRngLib/BaseRng.c >> > index 279df30..2c8df56 100644 >> > --- a/MdePkg/Library/BaseRngLib/BaseRng.c >> > +++ b/MdePkg/Library/BaseRngLib/BaseRng.c >> > @@ -155,3 +155,35 @@ GetRandomNumber64 ( >> > >> > return FALSE; >> > } >> > + >> > +/** >> > + Generates a 128-bit random number. >> > + >> > + if Rand is NULL, then ASSERT(). >> > + >> > + @param[out] Rand Buffer pointer to store the 128-bit random value. >> > + >> > + @retval TRUE Random number generated successfully. >> > + @retval FALSE Failed to generate the random number. >> > + >> > +**/ >> > +BOOLEAN >> > +EFIAPI >> > +GetRandomNumber128 ( >> > + OUT UINT64 *Rand >> > + ) >> > +{ >> > + ASSERT (Rand != NULL); >> > + >> > + // >> > + // Read first 64 bits >> > + // >> > + if (!GetRandomNumber64 (Rand)) { >> > + return FALSE; >> > + } >> > + >> > + // >> > + // Read second 64 bits >> > + // >> > + return GetRandomNumber64 (++Rand); >> > +} >> > diff --git >> > a/SecurityPkg/RandomNumberGenerator/RngDxe/IA32/AsmRdRand.asm >> > b/SecurityPkg/RandomNumberGenerator/RngDxe/IA32/AsmRdRand.asm >> > deleted file mode 100644 >> > index 37b3830..0000000 >> > --- >> a/SecurityPkg/RandomNumberGenerator/RngDxe/IA32/AsmRdRand.asm >> > +++ /dev/null >> > @@ -1,67 +0,0 @@ >> > -;-------------------------------------------------------------------- >> > ---------- >> > -; >> > -; Copyright (c) 2013, Intel Corporation. All rights reserved.<BR> -; >> > This program and the accompanying materials -; are licensed and made >> > available under the terms and conditions of the BSD License -; which >> > accompanies this distribution. The full text of the license may be >> > found at -; http://opensource.org/licenses/bsd-license.php. >> > -; >> > -; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" >> > BASIS, -; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, >> EITHER EXPRESS OR IMPLIED. >> > -; >> > -; Module Name: >> > -; >> > -; AsmRdRand.Asm >> > -; >> > -; Abstract: >> > -; >> > -; Implementation for 16-, and 32- invocations of RDRAND instruction >> under 32bit platform. >> > -; >> > -; Notes: >> > -; >> > -; Visual Studio coding practices do not use inline asm since multiple >> compilers and >> > -; architectures are supported assembler not recognizing rdrand >> instruction so using DB's. >> > -; >> > -;-------------------------------------------------------------------- >> > ---------- >> > - >> > - .586P >> > - .model flat, C >> > - .code >> > - >> > -;-------------------------------------------------------------------- >> > ---------- >> > -; Generate a 16 bit random number >> > -; Return TRUE if Rand generated successfully, or FALSE if not -; >> > -; BOOLEAN EFIAPI RdRand16Step (UINT16 *Rand); ECX >> > -;-------------------------------------------------------------------- >> > ---------- >> > -RdRand16Step PROC >> > - ; rdrand ax ; generate a 16 bit RN into ax, CF=1 >> > if RN >generated >> ok, otherwise CF=0 >> > - db 0fh, 0c7h, 0f0h ; rdrand r16: "0f c7 /6 ModRM:r/m(w)" >> > - jb rn16_ok ; jmp if CF=1 >> > - xor eax, eax ; reg=0 if CF=0 >> > - ret ; return with failure status >> > -rn16_ok: >> > - mov [ecx], ax >> > - mov eax, 1 >> > - ret >> > -RdRand16Step ENDP >> > - >> > -;-------------------------------------------------------------------- >> > ---------- >> > -; Generate a 32 bit random number >> > -; Return TRUE if Rand generated successfully, or FALSE if not >> > -; >> > -; BOOLEAN EFIAPI RdRand32Step (UINT32 *Rand); ECX >> > -;-------------------------------------------------------------------- >> > ---------- >> > -RdRand32Step PROC >> > - ; rdrand eax ; generate a 32 bit RN into eax, CF=1 >> > if RN >> generated ok, otherwise CF=0 >> > - db 0fh, 0c7h, 0f0h ; rdrand r32: "0f c7 /6 ModRM:r/m(w)" >> > - jb rn32_ok ; jmp if CF=1 >> > - xor eax, eax ; reg=0 if CF=0 >> > - ret ; return with failure status >> > -rn32_ok: >> > - mov [ecx], eax >> > - mov eax, 1 >> > - ret >> > -RdRand32Step ENDP >> > - >> > - END >> > diff --git >> a/SecurityPkg/RandomNumberGenerator/RngDxe/IA32/GccRdRand.c >> > b/SecurityPkg/RandomNumberGenerator/RngDxe/IA32/GccRdRand.c >> > deleted file mode 100644 >> > index f42302a..0000000 >> > --- a/SecurityPkg/RandomNumberGenerator/RngDxe/IA32/GccRdRand.c >> > +++ /dev/null >> > @@ -1,69 +0,0 @@ >> > -/** @file >> > - RDRAND Support Routines for GCC environment. >> > - >> > -Copyright (c) 2013, Intel Corporation. All rights reserved.<BR> -This >> > program and the accompanying materials -are licensed and made >> > available under the terms and conditions of the BSD License -which >> > accompanies this distribution. The full text of the license may be >> > found at -http://opensource.org/licenses/bsd-license.php >> > - >> > -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" >> BASIS, >> > -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER >> EXPRESS OR IMPLIED. >> > - >> > -**/ >> > - >> > -/** >> > - Generates a 16-bit random number through RDRAND instruction. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - >> > - @retval TRUE RDRAND call was successful. >> > - @retval FALSE Failed attempts to call RDRAND. >> > - >> > -**/ >> > -BOOLEAN >> > -EFIAPI >> > -RdRand16Step ( >> > - OUT UINT16 *Rand >> > - ) >> > -{ >> > - UINT8 Carry; >> > - >> > - // >> > - // Uses byte code for RDRAND instruction, >> > - // in case that GCC version has no direct support on RDRAND assembly. >> > - // >> > - __asm__ __volatile__ ( >> > - ".byte 0x66; .byte 0x0f; .byte 0xc7; .byte 0xf0; setc %1" >> > - :"=a" (*Rand), >> > - "=qm" (Carry) >> > - ); >> > - >> > - return (BOOLEAN) Carry; >> > -} >> > - >> > -/** >> > - Generates a 32-bit random number through RDRAND instruction. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - >> > - @retval TRUE RDRAND call was successful. >> > - @retval FALSE Failed attempts to call RDRAND. >> > - >> > -**/ >> > -BOOLEAN >> > -EFIAPI >> > -RdRand32Step ( >> > - OUT UINT32 *Rand >> > - ) >> > -{ >> > - UINT8 Carry; >> > - >> > - __asm__ __volatile__ ( >> > - ".byte 0x0f; .byte 0xc7; .byte 0xf0; setc %1" >> > - :"=a" (*Rand), >> > - "=qm" (Carry) >> > - ); >> > - >> > - return (BOOLEAN) Carry; >> > -} >> > \ No newline at end of file >> > diff --git >> > a/SecurityPkg/RandomNumberGenerator/RngDxe/IA32/RdRandWord.c >> > b/SecurityPkg/RandomNumberGenerator/RngDxe/IA32/RdRandWord.c >> > deleted file mode 100644 >> > index 125c53b..0000000 >> > --- a/SecurityPkg/RandomNumberGenerator/RngDxe/IA32/RdRandWord.c >> > +++ /dev/null >> > @@ -1,104 +0,0 @@ >> > -/** @file >> > - RDRAND Support Routines. >> > - >> > -Copyright (c) 2013, Intel Corporation. All rights reserved.<BR> -This >> > program and the accompanying materials -are licensed and made >> > available under the terms and conditions of the BSD License -which >> > accompanies this distribution. The full text of the license may be >> > found at -http://opensource.org/licenses/bsd-license.php >> > - >> > -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" >> BASIS, >> > -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER >> EXPRESS OR IMPLIED. >> > - >> > -**/ >> > - >> > -#include "RdRand.h" >> > - >> > -/** >> > - Generates a 64-bit random number through RDRAND instruction. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - >> > - @retval TRUE RDRAND call was successful. >> > - @retval FALSE Failed attempts to call RDRAND. >> > - >> > -**/ >> > -BOOLEAN >> > -EFIAPI >> > -RdRand64Step ( >> > - OUT UINT64 *Rand >> > - ) >> > -{ >> > - UINT32 RandLow; >> > - UINT32 RandHigh; >> > - >> > - // >> > - // Generating a 64-bit rand on a 32-bit system by >> > - // mapping two 32-bit RDRAND instructions. >> > - // >> > - if (!RdRand32Step (&RandLow)) { >> > - return FALSE; >> > - } >> > - if (!RdRand32Step (&RandHigh)) { >> > - return FALSE; >> > - } >> > - >> > - *Rand = (UINT64) RandLow | LShiftU64 ((UINT64)RandHigh, 32); >> > - >> > - return TRUE; >> > -} >> > - >> > -/** >> > - Calls RDRAND to request a word-length random number. >> > - >> > - @param[out] Rand Buffer pointer to store the random number. >> > - @param[in] NeedRetry Determine whether or not to loop retry. >> > - >> > - @retval EFI_SUCCESS Random word generation succeeded. >> > - @retval EFI_NOT_READY Failed to request random word. >> > - >> > -**/ >> > -EFI_STATUS >> > -EFIAPI >> > -RdRandWord ( >> > - OUT UINTN *Rand, >> > - IN BOOLEAN NeedRetry >> > - ) >> > -{ >> > - return RdRand32 (Rand, NeedRetry); >> > -} >> > - >> > -/** >> > - Calls RDRAND to request multiple word-length random numbers. >> > - >> > - @param[in] Length Size of the buffer, in words, to fill with. >> > - @param[out] RandBuffer Pointer to the buffer to store the random >> result. >> > - >> > - @retval EFI_SUCCESS Random words generation succeeded. >> > - @retval EFI_NOT_READY Failed to request random words. >> > - >> > -**/ >> > -EFI_STATUS >> > -EFIAPI >> > -RdRandGetWords ( >> > - IN UINTN Length, >> > - OUT UINTN *RandBuffer >> > - ) >> > -{ >> > - EFI_STATUS Status; >> > - UINT32 Index; >> > - >> > - for (Index = 0; Index < Length; Index++) { >> > - // >> > - // Obtain one word-length (32-bit) Random Number with possible >retry- >> loop. >> > - // >> > - Status = RdRand32 (RandBuffer, TRUE); >> > - if (EFI_ERROR (Status)) { >> > - return Status; >> > - } >> > - >> > - RandBuffer++; >> > - } >> > - >> > - return EFI_SUCCESS; >> > -} >> > diff --git a/SecurityPkg/RandomNumberGenerator/RngDxe/RdRand.c >> > b/SecurityPkg/RandomNumberGenerator/RngDxe/RdRand.c >> > index 7e618dc..d76c86e 100644 >> > --- a/SecurityPkg/RandomNumberGenerator/RngDxe/RdRand.c >> > +++ b/SecurityPkg/RandomNumberGenerator/RngDxe/RdRand.c >> > @@ -2,6 +2,7 @@ >> > Support routines for RDRAND instruction access. >> > >> > Copyright (c) 2013, Intel Corporation. All rights reserved.<BR> >> > +(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> >> > This program and the accompanying materials are licensed and made >> > available under the terms and conditions of the BSD License which >> > accompanies this distribution. The full text of the license may be >> > found at @@ -11,177 +12,11 @@ THE PROGRAM IS DISTRIBUTED UNDER >> THE BSD >> > LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR >> REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. >> > >> > **/ >> > +#include <Library/RngLib.h> >> > >> > #include "RdRand.h" >> > #include "AesCore.h" >> > >> > -// >> > -// Bit mask used to determine if RdRand instruction is supported. >> > -// >> > -#define RDRAND_MASK 0x40000000 >> > - >> > -/** >> > - Determines whether or not RDRAND instruction is supported by the >host >> hardware. >> > - >> > - @retval EFI_SUCCESS RDRAND instruction supported. >> > - @retval EFI_UNSUPPORTED RDRAND instruction not supported. >> > - >> > -**/ >> > -EFI_STATUS >> > -EFIAPI >> > -IsRdRandSupported ( >> > - VOID >> > - ) >> > -{ >> > - EFI_STATUS Status; >> > - UINT32 RegEax; >> > - UINT32 RegEbx; >> > - UINT32 RegEcx; >> > - UINT32 RegEdx; >> > - BOOLEAN IsIntelCpu; >> > - >> > - Status = EFI_UNSUPPORTED; >> > - IsIntelCpu = FALSE; >> > - >> > - // >> > - // Checks whether the current processor is an Intel product by CPUID. >> > - // >> > - AsmCpuid (0, &RegEax, &RegEbx, &RegEcx, &RegEdx); >> > - if ((CompareMem ((CHAR8 *)(&RegEbx), "Genu", 4) == 0) && >> > - (CompareMem ((CHAR8 *)(&RegEdx), "ineI", 4) == 0) && >> > - (CompareMem ((CHAR8 *)(&RegEcx), "ntel", 4) == 0)) { >> > - IsIntelCpu = TRUE; >> > - } >> > - >> > - if (IsIntelCpu) { >> > - // >> > - // Determine RDRAND support by examining bit 30 of the ECX register >> returned by CPUID. >> > - // A value of 1 indicates that processor supports RDRAND instruction. >> > - // >> > - AsmCpuid (1, 0, 0, &RegEcx, 0); >> > - >> > - if ((RegEcx & RDRAND_MASK) == RDRAND_MASK) { >> > - Status = EFI_SUCCESS; >> > - } >> > - } >> > - >> > - return Status; >> > -} >> > - >> > -/** >> > - Calls RDRAND to obtain a 16-bit random number. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - @param[in] NeedRetry Determine whether or not to loop retry. >> > - >> > - @retval EFI_SUCCESS RDRAND call was successful. >> > - @retval EFI_NOT_READY Failed attempts to call RDRAND. >> > - >> > -**/ >> > -EFI_STATUS >> > -EFIAPI >> > -RdRand16 ( >> > - OUT UINT16 *Rand, >> > - IN BOOLEAN NeedRetry >> > - ) >> > -{ >> > - UINT32 Index; >> > - UINT32 RetryCount; >> > - >> > - if (NeedRetry) { >> > - RetryCount = RETRY_LIMIT; >> > - } else { >> > - RetryCount = 1; >> > - } >> > - >> > - // >> > - // Perform a single call to RDRAND, or enter a loop call until RDRAND >> succeeds. >> > - // >> > - for (Index = 0; Index < RetryCount; Index++) { >> > - if (RdRand16Step (Rand)) { >> > - return EFI_SUCCESS; >> > - } >> > - } >> > - >> > - return EFI_NOT_READY; >> > -} >> > - >> > -/** >> > - Calls RDRAND to obtain a 32-bit random number. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - @param[in] NeedRetry Determine whether or not to loop retry. >> > - >> > - @retval EFI_SUCCESS RDRAND call was successful. >> > - @retval EFI_NOT_READY Failed attempts to call RDRAND. >> > - >> > -**/ >> > -EFI_STATUS >> > -EFIAPI >> > -RdRand32 ( >> > - OUT UINT32 *Rand, >> > - IN BOOLEAN NeedRetry >> > - ) >> > -{ >> > - UINT32 Index; >> > - UINT32 RetryCount; >> > - >> > - if (NeedRetry) { >> > - RetryCount = RETRY_LIMIT; >> > - } else { >> > - RetryCount = 1; >> > - } >> > - >> > - // >> > - // Perform a single call to RDRAND, or enter a loop call until RDRAND >> succeeds. >> > - // >> > - for (Index = 0; Index < RetryCount; Index++) { >> > - if (RdRand32Step (Rand)) { >> > - return EFI_SUCCESS; >> > - } >> > - } >> > - >> > - return EFI_NOT_READY; >> > -} >> > - >> > -/** >> > - Calls RDRAND to obtain a 64-bit random number. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - @param[in] NeedRetry Determine whether or not to loop retry. >> > - >> > - @retval EFI_SUCCESS RDRAND call was successful. >> > - @retval EFI_NOT_READY Failed attempts to call RDRAND. >> > - >> > -**/ >> > -EFI_STATUS >> > -EFIAPI >> > -RdRand64 ( >> > - OUT UINT64 *Rand, >> > - IN BOOLEAN NeedRetry >> > - ) >> > -{ >> > - UINT32 Index; >> > - UINT32 RetryCount; >> > - >> > - if (NeedRetry) { >> > - RetryCount = RETRY_LIMIT; >> > - } else { >> > - RetryCount = 1; >> > - } >> > - >> > - // >> > - // Perform a single call to RDRAND, or enter a loop call until RDRAND >> succeeds. >> > - // >> > - for (Index = 0; Index < RetryCount; Index++) { >> > - if (RdRand64Step (Rand)) { >> > - return EFI_SUCCESS; >> > - } >> > - } >> > - >> > - return EFI_NOT_READY; >> > -} >> > - >> > /** >> > Calls RDRAND to fill a buffer of arbitrary size with random bytes. >> > >> > @@ -199,80 +34,23 @@ RdRandGetBytes ( >> > OUT UINT8 *RandBuffer >> > ) >> > { >> > - EFI_STATUS Status; >> > - UINT8 *Start; >> > - UINT8 *ResidualStart; >> > - UINTN *BlockStart; >> > - UINTN TempRand; >> > - UINTN Count; >> > - UINTN Residual; >> > - UINTN StartLen; >> > - UINTN BlockNum; >> > - UINTN Index; >> > - >> > - ResidualStart = NULL; >> > - TempRand = 0; >> > + BOOLEAN IsRandom; >> > + UINT64 TempRand[2]; >> > >> > - // >> > - // Compute the address of the first word aligned (32/64-bit) block >> > in the >> > - // destination buffer, depending on whether we are in 32- or 64-bit >mode. >> > - // >> > - Start = RandBuffer; >> > - if (((UINT32)(UINTN)Start % (UINT32)sizeof(UINTN)) == 0) { >> > - BlockStart = (UINTN *)Start; >> > - Count = Length; >> > - StartLen = 0; >> > - } else { >> > - BlockStart = (UINTN *)(((UINTN)Start & ~(UINTN)(sizeof(UINTN) - 1)) + >> (UINTN)sizeof(UINTN)); >> > - Count = Length - (sizeof (UINTN) - (UINT32)((UINTN)Start % sizeof >> (UINTN))); >> > - StartLen = (UINT32)((UINTN)BlockStart - (UINTN)Start); >> > - } >> > - >> > - // >> > - // Compute the number of word blocks and the remaining number of >> bytes. >> > - // >> > - Residual = Count % sizeof (UINTN); >> > - BlockNum = Count / sizeof (UINTN); >> > - if (Residual != 0) { >> > - ResidualStart = (UINT8 *) (BlockStart + BlockNum); >> > - } >> > - >> > - // >> > - // Obtain a temporary random number for use in the residuals. Failout if >> retry fails. >> > - // >> > - if (StartLen > 0) { >> > - Status = RdRandWord ((UINTN *) &TempRand, TRUE); >> > - if (EFI_ERROR (Status)) { >> > - return Status; >> > - } >> > - } >> > - >> > - // >> > - // Populate the starting mis-aligned block. >> > - // >> > - for (Index = 0; Index < StartLen; Index++) { >> > - Start[Index] = (UINT8)(TempRand & 0xff); >> > - TempRand = TempRand >> 8; >> > - } >> > - >> > - // >> > - // Populate the central aligned block. Fail out if retry fails. >> > - // >> > - Status = RdRandGetWords (BlockNum, (UINTN *)(BlockStart)); >> > - if (EFI_ERROR (Status)) { >> > - return Status; >> > - } >> > - // >> > - // Populate the final mis-aligned block. >> > - // >> > - if (Residual > 0) { >> > - Status = RdRandWord ((UINTN *)&TempRand, TRUE); >> > - if (EFI_ERROR (Status)) { >> > - return Status; >> > + while (Length > 0) { >> > + IsRandom = GetRandomNumber128 (TempRand); >> > + if (!IsRandom) { >> > + return EFI_NOT_READY; >> > } >> > - for (Index = 0; Index < Residual; Index++) { >> > - ResidualStart[Index] = (UINT8)(TempRand & 0xff); >> > - TempRand = TempRand >> 8; >> > + if (Length >= sizeof (TempRand)) { >> > + WriteUnaligned64 ((UINT64*)RandBuffer, TempRand[0]); >> > + RandBuffer += sizeof (UINT64); >> > + WriteUnaligned64 ((UINT64*)RandBuffer, TempRand[1]); >> > + RandBuffer += sizeof (TempRand[1]); >> > + Length -= sizeof (TempRand); >> > + } else { >> > + CopyMem (RandBuffer, TempRand, Length); >> > + Length = 0; >> > } >> > } >> > >> > diff --git a/SecurityPkg/RandomNumberGenerator/RngDxe/RdRand.h >> > b/SecurityPkg/RandomNumberGenerator/RngDxe/RdRand.h >> > index 20fd9fb..d637877 100644 >> > --- a/SecurityPkg/RandomNumberGenerator/RngDxe/RdRand.h >> > +++ b/SecurityPkg/RandomNumberGenerator/RngDxe/RdRand.h >> > @@ -9,6 +9,7 @@ >> > Secure Key technology. >> > >> > Copyright (c) 2013, Intel Corporation. All rights reserved.<BR> >> > +(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> >> > This program and the accompanying materials are licensed and made >> > available under the terms and conditions of the BSD License which >> > accompanies this distribution. The full text of the license may be >> > found at @@ -28,154 +29,6 @@ WITHOUT WARRANTIES OR >> REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. >> > #include <Library/TimerLib.h> >> > #include <Protocol/Rng.h> >> > >> > -// >> > -// The maximun number of retries to obtain one available random >number. >> > -// >> > -#define RETRY_LIMIT 10 >> > - >> > -/** >> > - Determines whether or not RDRAND instruction is supported by the >host >> hardware. >> > - >> > - @retval EFI_SUCCESS RDRAND instruction supported. >> > - @retval EFI_UNSUPPORTED RDRAND instruction not supported. >> > - >> > -**/ >> > -EFI_STATUS >> > -EFIAPI >> > -IsRdRandSupported ( >> > - VOID >> > - ); >> > - >> > -/** >> > - Generates a 16-bit random number through RDRAND instruction. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - >> > - @retval TRUE RDRAND call was successful. >> > - @retval FALSE Failed attempts to call RDRAND. >> > - >> > -**/ >> > -BOOLEAN >> > -EFIAPI >> > -RdRand16Step ( >> > - OUT UINT16 *Rand >> > - ); >> > - >> > -/** >> > - Generates a 32-bit random number through RDRAND instruction. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - >> > - @retval TRUE RDRAND call was successful. >> > - @retval FALSE Failed attempts to call RDRAND. >> > - >> > -**/ >> > -BOOLEAN >> > -EFIAPI >> > -RdRand32Step ( >> > - OUT UINT32 *Rand >> > - ); >> > - >> > -/** >> > - Generates a 64-bit random number through RDRAND instruction. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - >> > - @retval TRUE RDRAND call was successful. >> > - @retval FALSE Failed attempts to call RDRAND. >> > - >> > -**/ >> > -BOOLEAN >> > -EFIAPI >> > -RdRand64Step ( >> > - OUT UINT64 *Rand >> > - ); >> > - >> > -/** >> > - Calls RDRAND to obtain a 16-bit random number. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - @param[in] NeedRetry Determine whether or not to loop retry. >> > - >> > - @retval EFI_SUCCESS RDRAND call was successful. >> > - @retval EFI_NOT_READY Failed attempts to call RDRAND. >> > - >> > -**/ >> > -EFI_STATUS >> > -EFIAPI >> > -RdRand16 ( >> > - OUT UINT16 *Rand, >> > - IN BOOLEAN NeedRetry >> > - ); >> > - >> > -/** >> > - Calls RDRAND to obtain a 32-bit random number. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - @param[in] NeedRetry Determine whether or not to loop retry. >> > - >> > - @retval EFI_SUCCESS RDRAND call was successful. >> > - @retval EFI_NOT_READY Failed attempts to call RDRAND. >> > - >> > -**/ >> > -EFI_STATUS >> > -EFIAPI >> > -RdRand32 ( >> > - OUT UINT32 *Rand, >> > - IN BOOLEAN NeedRetry >> > - ); >> > - >> > -/** >> > - Calls RDRAND to obtain a 64-bit random number. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - @param[in] NeedRetry Determine whether or not to loop retry. >> > - >> > - @retval EFI_SUCCESS RDRAND call was successful. >> > - @retval EFI_NOT_READY Failed attempts to call RDRAND. >> > - >> > -**/ >> > -EFI_STATUS >> > -EFIAPI >> > -RdRand64 ( >> > - OUT UINT64 *Rand, >> > - IN BOOLEAN NeedRetry >> > - ); >> > - >> > -/** >> > - Calls RDRAND to request a word-length random number. >> > - >> > - @param[out] Rand Buffer pointer to store the random number. >> > - @param[in] NeedRetry Determine whether or not to loop retry. >> > - >> > - @retval EFI_SUCCESS Random word generation succeeded. >> > - @retval EFI_NOT_READY Failed to request random word. >> > - >> > -**/ >> > -EFI_STATUS >> > -EFIAPI >> > -RdRandWord ( >> > - OUT UINTN *Rand, >> > - IN BOOLEAN NeedRetry >> > - ); >> > - >> > -/** >> > - Calls RDRAND to request multiple word-length random numbers. >> > - >> > - @param[in] Length Size of the buffer, in words, to fill with. >> > - @param[out] RandBuffer Pointer to the buffer to store the random >> result. >> > - >> > - @retval EFI_SUCCESS Random words generation succeeded. >> > - @retval EFI_NOT_READY Failed to request random words. >> > - >> > -**/ >> > -EFI_STATUS >> > -EFIAPI >> > -RdRandGetWords ( >> > - IN UINTN Length, >> > - OUT UINTN *RandBuffer >> > - ); >> > - >> > /** >> > Calls RDRAND to fill a buffer of arbitrary size with random bytes. >> > >> > @@ -210,4 +63,4 @@ RdRandGenerateEntropy ( >> > OUT UINT8 *Entropy >> > ); >> > >> > -#endif // __RD_RAND_H__ >> > \ No newline at end of file >> > +#endif // __RD_RAND_H__ >> > diff --git a/SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.c >> > b/SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.c >> > index 98ef3b3..5c04673 100644 >> > --- a/SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.c >> > +++ b/SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.c >> > @@ -15,6 +15,7 @@ >> > - EFI_RNG_ALGORITHM_X9_31_AES_GUID - Unsupported >> > >> > Copyright (c) 2013, Intel Corporation. All rights reserved.<BR> >> > +(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> >> > This program and the accompanying materials are licensed and made >> > available under the terms and conditions of the BSD License which >> > accompanies this distribution. The full text of the license may be >> > found at @@ -197,14 +198,6 @@ RngDriverEntry ( >> > EFI_HANDLE Handle; >> > >> > // >> > - // Verify RdRand support on Platform. >> > - // >> > - Status = IsRdRandSupported (); >> > - if (EFI_ERROR (Status)) { >> > - return Status; >> > - } >> > - >> > - // >> > // Install UEFI RNG (Random Number Generator) Protocol >> > // >> > Handle = NULL; >> > diff --git a/SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.inf >> > b/SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.inf >> > index d57c2d8..4d668a1 100644 >> > --- a/SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.inf >> > +++ b/SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.inf >> > @@ -9,6 +9,7 @@ >> > # Secure Key technology. >> > # >> > # Copyright (c) 2013 - 2014, Intel Corporation. All rights >> > reserved.<BR> >> > +# (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> >> > # This program and the accompanying materials # are licensed and >> > made available under the terms and conditions of the BSD License # >> > which accompanies this distribution. The full text of the license may >> > be found at @@ -41,16 +42,6 @@ >> > AesCore.c >> > AesCore.h >> > >> > -[Sources.IA32] >> > - IA32/RdRandWord.c >> > - IA32/AsmRdRand.asm >> > - IA32/GccRdRand.c | GCC >> > - >> > -[Sources.X64] >> > - X64/RdRandWord.c >> > - X64/AsmRdRand.asm >> > - X64/GccRdRand.c | GCC >> > - >> > [Packages] >> > MdePkg/MdePkg.dec >> > SecurityPkg/SecurityPkg.dec >> > @@ -62,6 +53,7 @@ >> > DebugLib >> > UefiDriverEntryPoint >> > TimerLib >> > + RngLib >> > >> > [Guids] >> > gEfiRngAlgorithmSp80090Ctr256Guid ## SOMETIMES_PRODUCES ## >> GUID # Unique ID of the algorithm for RNG >> > @@ -77,4 +69,4 @@ >> > XCODE:*_*_*_CC_FLAGS = -mmmx -msse >> > >> > [UserExtensions.TianoCore."ExtraFiles"] >> > - RngDxeExtra.uni >> > \ No newline at end of file >> > + RngDxeExtra.uni >> > diff --git >> > a/SecurityPkg/RandomNumberGenerator/RngDxe/X64/AsmRdRand.asm >> > b/SecurityPkg/RandomNumberGenerator/RngDxe/X64/AsmRdRand.asm >> > deleted file mode 100644 >> > index 8a4fe65..0000000 >> > --- >> a/SecurityPkg/RandomNumberGenerator/RngDxe/X64/AsmRdRand.asm >> > +++ /dev/null >> > @@ -1,83 +0,0 @@ >> > -;-------------------------------------------------------------------- >> > ---------- >> > -; >> > -; Copyright (c) 2013, Intel Corporation. All rights reserved.<BR> -; >> > This program and the accompanying materials -; are licensed and made >> > available under the terms and conditions of the BSD License -; which >> > accompanies this distribution. The full text of the license may be >> > found at -; http://opensource.org/licenses/bsd-license.php. >> > -; >> > -; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" >> > BASIS, -; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, >> EITHER EXPRESS OR IMPLIED. >> > -; >> > -; Module Name: >> > -; >> > -; AsmRdRand.Asm >> > -; >> > -; Abstract: >> > -; >> > -; Implementation for 16-, 32-, and 64-bit invocations of RDRAND >> instruction under 64bit platform. >> > -; >> > -; Notes: >> > -; >> > -; Visual Studio coding practices do not use inline asm since multiple >> compilers and >> > -; architectures are supported assembler not recognizing rdrand >> instruction so using DB's. >> > -; >> > -;-------------------------------------------------------------------- >> > ---------- >> > - >> > - .code >> > - >> > -;-------------------------------------------------------------------- >> > ---------- >> > -; Generate a 16 bit random number >> > -; Return TRUE if Rand generated successfully, or FALSE if not -; >> > -; BOOLEAN EFIAPI RdRand16Step (UINT16 *Rand); RCX >> > -;-------------------------------------------------------------------- >> > ---------- >> > -RdRand16Step PROC >> > - ; rdrand ax ; generate a 16 bit RN into ax, CF=1 >> > if RN >generated >> ok, otherwise CF=0 >> > - db 0fh, 0c7h, 0f0h ; rdrand r16: "0f c7 /6 ModRM:r/m(w)" >> > - jb rn16_ok ; jmp if CF=1 >> > - xor rax, rax ; reg=0 if CF=0 >> > - ret ; return with failure status >> > -rn16_ok: >> > - mov [rcx], ax >> > - mov rax, 1 >> > - ret >> > -RdRand16Step ENDP >> > - >> > -;-------------------------------------------------------------------- >> > ---------- >> > -; Generate a 32 bit random number >> > -; Return TRUE if Rand generated successfully, or FALSE if not >> > -; >> > -; BOOLEAN EFIAPI RdRand32Step (UINT32 *Rand); RCX >> > -;-------------------------------------------------------------------- >> > ---------- >> > -RdRand32Step PROC >> > - ; rdrand eax ; generate a 32 bit RN into eax, CF=1 >> > if RN >> generated ok, otherwise CF=0 >> > - db 0fh, 0c7h, 0f0h ; rdrand r32: "0f c7 /6 ModRM:r/m(w)" >> > - jb rn32_ok ; jmp if CF=1 >> > - xor rax, rax ; reg=0 if CF=0 >> > - ret ; return with failure status >> > -rn32_ok: >> > - mov [rcx], eax >> > - mov rax, 1 >> > - ret >> > -RdRand32Step ENDP >> > - >> > -;-------------------------------------------------------------------- >> > ---------- >> > -; Generate a 64 bit random number >> > -; Return TRUE if RN generated successfully, or FALSE if not >> > -; >> > -; BOOLEAN EFIAPI RdRand64Step (UINT64 *Random); RCX >> > -;-------------------------------------------------------------------- >> > ---------- >> > -RdRand64Step PROC >> > - ; rdrand rax ; generate a 64 bit RN into rax, CF=1 >> > if RN >generated >> ok, otherwise CF=0 >> > - db 048h, 0fh, 0c7h, 0f0h ; rdrand r64: "REX.W + 0F C7 /6 >> ModRM:r/m(w)" >> > - jb rn64_ok ; jmp if CF=1 >> > - xor rax, rax ; reg=0 if CF=0 >> > - ret ; return with failure status >> > -rn64_ok: >> > - mov [rcx], rax >> > - mov rax, 1 >> > - ret >> > -RdRand64Step ENDP >> > - >> > - END >> > diff --git >> a/SecurityPkg/RandomNumberGenerator/RngDxe/X64/GccRdRand.c >> > b/SecurityPkg/RandomNumberGenerator/RngDxe/X64/GccRdRand.c >> > deleted file mode 100644 >> > index d28336d..0000000 >> > --- a/SecurityPkg/RandomNumberGenerator/RngDxe/X64/GccRdRand.c >> > +++ /dev/null >> > @@ -1,95 +0,0 @@ >> > -/** @file >> > - RDRAND Support Routines for GCC environment. >> > - >> > -Copyright (c) 2013, Intel Corporation. All rights reserved.<BR> -This >> > program and the accompanying materials -are licensed and made >> > available under the terms and conditions of the BSD License -which >> > accompanies this distribution. The full text of the license may be >> > found at -http://opensource.org/licenses/bsd-license.php >> > - >> > -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" >> BASIS, >> > -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER >> EXPRESS OR IMPLIED. >> > - >> > -**/ >> > - >> > -/** >> > - Generates a 16-bit random number through RDRAND instruction. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - >> > - @retval TRUE RDRAND call was successful. >> > - @retval FALSE Failed attempts to call RDRAND. >> > - >> > -**/ >> > -BOOLEAN >> > -EFIAPI >> > -RdRand16Step ( >> > - OUT UINT16 *Rand >> > - ) >> > -{ >> > - UINT8 Carry; >> > - >> > - // >> > - // Uses byte code for RDRAND instruction, >> > - // in case that GCC version has no direct support on RDRAND assembly. >> > - // >> > - __asm__ __volatile__ ( >> > - ".byte 0x66; .byte 0x0f; .byte 0xc7; .byte 0xf0; setc %1" >> > - :"=a" (*Rand), >> > - "=qm" (Carry) >> > - ); >> > - >> > - return (BOOLEAN) Carry; >> > -} >> > - >> > -/** >> > - Generates a 32-bit random number through RDRAND instruction. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - >> > - @retval TRUE RDRAND call was successful. >> > - @retval FALSE Failed attempts to call RDRAND. >> > - >> > -**/ >> > -BOOLEAN >> > -EFIAPI >> > -RdRand32Step ( >> > - OUT UINT32 *Rand >> > - ) >> > -{ >> > - UINT8 Carry; >> > - >> > - __asm__ __volatile__ ( >> > - ".byte 0x0f; .byte 0xc7; .byte 0xf0; setc %1" >> > - :"=a" (*Rand), >> > - "=qm" (Carry) >> > - ); >> > - >> > - return (BOOLEAN) Carry; >> > -} >> > - >> > -/** >> > - Generates a 64-bit random number through RDRAND instruction. >> > - >> > - @param[out] Rand Buffer pointer to store the random result. >> > - >> > - @retval TRUE RDRAND call was successful. >> > - @retval FALSE Failed attempts to call RDRAND. >> > - >> > -**/ >> > -BOOLEAN >> > -EFIAPI >> > -RdRand64Step ( >> > - OUT UINT64 *Rand >> > - ) >> > -{ >> > - UINT8 Carry; >> > - >> > - __asm__ __volatile__ ( >> > - ".byte 0x48; .byte 0x0f; .byte 0xc7; .byte 0xf0; setc %1" >> > - :"=a" (*Rand), >> > - "=qm" (Carry) >> > - ); >> > - >> > - return (BOOLEAN) Carry; >> > -} >> > diff --git >> a/SecurityPkg/RandomNumberGenerator/RngDxe/X64/RdRandWord.c >> > b/SecurityPkg/RandomNumberGenerator/RngDxe/X64/RdRandWord.c >> > deleted file mode 100644 >> > index 946e5ba..0000000 >> > --- a/SecurityPkg/RandomNumberGenerator/RngDxe/X64/RdRandWord.c >> > +++ /dev/null >> > @@ -1,70 +0,0 @@ >> > -/** @file >> > - RDRAND Support Routines. >> > - >> > -Copyright (c) 2013, Intel Corporation. All rights reserved.<BR> -This >> > program and the accompanying materials -are licensed and made >> > available under the terms and conditions of the BSD License -which >> > accompanies this distribution. The full text of the license may be >> > found at -http://opensource.org/licenses/bsd-license.php >> > - >> > -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" >> BASIS, >> > -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER >> EXPRESS OR IMPLIED. >> > - >> > -**/ >> > - >> > -#include "RdRand.h" >> > - >> > -/** >> > - Calls RDRAND to request a word-length random number. >> > - >> > - @param[out] Rand Buffer pointer to store the random number. >> > - @param[in] NeedRetry Determine whether or not to loop retry. >> > - >> > - @retval EFI_SUCCESS Random word generation succeeded. >> > - @retval EFI_NOT_READY Failed to request random word. >> > - >> > -**/ >> > -EFI_STATUS >> > -EFIAPI >> > -RdRandWord ( >> > - OUT UINTN *Rand, >> > - IN BOOLEAN NeedRetry >> > - ) >> > -{ >> > - return RdRand64 (Rand, NeedRetry); >> > -} >> > - >> > -/** >> > - Calls RDRAND to request multiple word-length random numbers. >> > - >> > - @param[in] Length Size of the buffer, in words, to fill with. >> > - @param[out] RandBuffer Pointer to the buffer to store the random >> result. >> > - >> > - @retval EFI_SUCCESS Random words generation succeeded. >> > - @retval EFI_NOT_READY Failed to request random words. >> > - >> > -**/ >> > -EFI_STATUS >> > -EFIAPI >> > -RdRandGetWords ( >> > - IN UINTN Length, >> > - OUT UINTN *RandBuffer >> > - ) >> > -{ >> > - EFI_STATUS Status; >> > - UINT32 Index; >> > - >> > - for (Index = 0; Index < Length; Index++) { >> > - // >> > - // Obtain one word-length (64-bit) Random Number with possible >retry- >> loop. >> > - // >> > - Status = RdRand64 (RandBuffer, TRUE); >> > - if (EFI_ERROR (Status)) { >> > - return Status; >> > - } >> > - >> > - RandBuffer++; >> > - } >> > - >> > - return EFI_SUCCESS; >> > -} >> > \ No newline at end of file >> > diff --git a/SecurityPkg/SecurityPkg.dsc b/SecurityPkg/SecurityPkg.dsc >> > index 6e2ca5c..0908b26 100644 >> > --- a/SecurityPkg/SecurityPkg.dsc >> > +++ b/SecurityPkg/SecurityPkg.dsc >> > @@ -2,6 +2,7 @@ >> > # Security Module Package for All Architectures. >> > # >> > # Copyright (c) 2009 - 2015, Intel Corporation. All rights >> > reserved.<BR> >> > +# (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> >> > # This program and the accompanying materials # are licensed and >> > made available under the terms and conditions of the BSD License # >> > which accompanies this distribution. The full text of the license may >> > be found at @@ -61,6 +62,7 @@ >> > >> TcgPpVendorLib|SecurityPkg/Library/TcgPpVendorLibNull/TcgPpVendorLibN >> ull.inf >> > >> Tcg2PpVendorLib|SecurityPkg/Library/Tcg2PpVendorLibNull/Tcg2PpVendorL >> ibNull.inf >> > >> > >> TrEEPpVendorLib|SecurityPkg/Library/TrEEPpVendorLibNull/TrEEPpVendorLi >> > bNull.inf >> > + RngLib|MdePkg/Library/BaseRngLib/BaseRngLib.inf >> > >> > [LibraryClasses.common.PEIM] >> > PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf >> > @@ -74,6 +76,7 @@ >> > >> Tpm12DeviceLib|SecurityPkg/Library/Tpm12DeviceLibDTpm/Tpm12DeviceLib >> DTpm.inf >> > >> Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2DeviceLibDT >> pm.inf >> > >> > Tcg2PhysicalPresenceLib|SecurityPkg/Library/PeiTcg2PhysicalPresenceLib >> > /PeiTcg2PhysicalPresenceLib.inf >> > + RngLib|MdePkg/Library/BaseRngLib/BaseRngLib.inf >> > >> > [LibraryClasses.common.DXE_DRIVER] >> > HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf >> > -- >> > 1.7.9.5 >> > >> > _______________________________________________ >> > edk2-devel mailing list >> > edk2-devel@lists.01.org >> > https://lists.01.org/mailman/listinfo/edk2-devel >> _______________________________________________ >> edk2-devel mailing list >> edk2-devel@lists.01.org >> https://lists.01.org/mailman/listinfo/edk2-devel >_______________________________________________ >edk2-devel mailing list >edk2-devel@lists.01.org >https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel