Hi Carlson The naming conversion for a lib instance is <Phase><Class>Lib<Instance>. See examples in MdePkg\Library.
I feel that we had better name it to be BaseRngLibTimer Thank you Yao Jiewen > -----Original Message----- > From: [email protected] <[email protected]> On Behalf Of Matthew > Carlson > Sent: Tuesday, July 28, 2020 9:53 AM > To: [email protected] > Cc: Kinney, Michael D <[email protected]>; Gao, Liming > <[email protected]>; Liu, Zhiguang <[email protected]>; Matthew > Carlson <[email protected]> > Subject: [edk2-devel] [PATCH v1 2/2] MdePkg: TimerRngLib: Added RngLib that > uses TimerLib > > From: Matthew Carlson <[email protected]> > > Added a new RngLib that provides random numbers from the TimerLib > using the performance counter. This is meant to be used for OpenSSL > to replicate past behavior. This should not be used in production as > a real source of entropy. > > Cc: Michael D Kinney <[email protected]> > Cc: Liming Gao <[email protected]> > Cc: Zhiguang Liu <[email protected]> > Signed-off-by: Matthew Carlson <[email protected]> > --- > MdePkg/Library/TimerRngLib/TimerRng.c | 153 ++++++++++++++++++++ > MdePkg/Library/TimerRngLib/TimerRngLib.inf | 37 +++++ > MdePkg/MdePkg.dsc | 2 + > 3 files changed, 192 insertions(+) > > diff --git a/MdePkg/Library/TimerRngLib/TimerRng.c > b/MdePkg/Library/TimerRngLib/TimerRng.c > new file mode 100644 > index 000000000000..1b0f7f04c01d > --- /dev/null > +++ b/MdePkg/Library/TimerRngLib/TimerRng.c > @@ -0,0 +1,153 @@ > +/** @file > > + BaseRng Library that uses the TimerLib to provide reasonably random > numbers. > > + Do not use this on a production system. > > + > > + Copyright (c) Microsoft Corporation. > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > +**/ > > + > > +#include <Library/BaseLib.h> > > +#include <Library/DebugLib.h> > > +#include <Library/TimerLib.h> > > +#include <Uefi.h> > > + > > +/** > > + Generates a 16-bit random number. > > + > > + if Rand is NULL, then ASSERT(). > > + > > + @param[out] Rand Buffer pointer to store the 16-bit random value. > > + > > + @retval TRUE Random number generated successfully. > > + @retval FALSE Failed to generate the random number. > > + > > +**/ > > +BOOLEAN > > +EFIAPI > > +GetRandomNumber16 ( > > + OUT UINT16 *Rand > > + ) > > +{ > > + UINT32 Index; > > + UINT8* RandPtr; > > + > > + ASSERT (Rand != NULL); > > + > > + if (NULL == Rand) { > > + return FALSE; > > + } > > + > > + RandPtr = (UINT8 *) Rand; > > + // Get 2 bytes of random ish data > > + for (Index = 0; Index < 2; Index ++) { > > + *RandPtr = (UINT8) (GetPerformanceCounter () & 0xFF); > > + MicroSecondDelay (4); > > + RandPtr++; > > + } > > + return TRUE; > > +} > > + > > +/** > > + Generates a 32-bit random number. > > + > > + if Rand is NULL, then ASSERT(). > > + > > + @param[out] Rand Buffer pointer to store the 32-bit random value. > > + > > + @retval TRUE Random number generated successfully. > > + @retval FALSE Failed to generate the random number. > > + > > +**/ > > +BOOLEAN > > +EFIAPI > > +GetRandomNumber32 ( > > + OUT UINT32 *Rand > > + ) > > +{ > > + UINT32 Index; > > + UINT8* RandPtr; > > + > > + ASSERT (Rand != NULL); > > + > > + if (NULL == Rand) { > > + return FALSE; > > + } > > + > > + RandPtr = (UINT8 *) Rand; > > + // Get 4 bytes of random ish data > > + for (Index = 0; Index < 4; Index ++) { > > + *RandPtr = (UINT8) (GetPerformanceCounter () & 0xFF); > > + MicroSecondDelay (2); > > + RandPtr++; > > + } > > + return TRUE; > > +} > > + > > +/** > > + Generates a 64-bit random number. > > + > > + if Rand is NULL, then ASSERT(). > > + > > + @param[out] Rand Buffer pointer to store the 64-bit random value. > > + > > + @retval TRUE Random number generated successfully. > > + @retval FALSE Failed to generate the random number. > > + > > +**/ > > +BOOLEAN > > +EFIAPI > > +GetRandomNumber64 ( > > + OUT UINT64 *Rand > > + ) > > +{ > > + UINT32 Index; > > + UINT8* RandPtr; > > + > > + ASSERT (Rand != NULL); > > + > > + if (NULL == Rand) { > > + return FALSE; > > + } > > + > > + RandPtr = (UINT8 *) Rand; > > + // Get 8 bytes of random ish data > > + for (Index = 0; Index < 8; Index ++) { > > + *RandPtr = (UINT8) (GetPerformanceCounter () & 0xFF); > > + MicroSecondDelay (1); > > + RandPtr++; > > + } > > + > > + return TRUE; > > +} > > + > > +/** > > + 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/MdePkg/Library/TimerRngLib/TimerRngLib.inf > b/MdePkg/Library/TimerRngLib/TimerRngLib.inf > new file mode 100644 > index 000000000000..a80a89b77e72 > --- /dev/null > +++ b/MdePkg/Library/TimerRngLib/TimerRngLib.inf > @@ -0,0 +1,37 @@ > +## @file > > +# Instance of RNG (Random Number Generator) Library. > > +# > > +# BaseRng Library that uses the TimerLib to provide reasonably random > numbers. > > +# Do not use this on a production system. > > +# > > +# Copyright (c) Microsoft Corporation. All rights reserved.<BR> > > +# > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > +# > > +## > > + > > +[Defines] > > + INF_VERSION = 0x00010005 > > + BASE_NAME = BaseRngLib > > + MODULE_UNI_FILE = BaseRngLib.uni > > + FILE_GUID = 74950C45-10FC-4AB5-B114-49C87C17409B > > + MODULE_TYPE = BASE > > + VERSION_STRING = 1.0 > > + LIBRARY_CLASS = RngLib > > + CONSTRUCTOR = BaseRngLibConstructor > > + > > +# > > +# VALID_ARCHITECTURES = IA32 X64 > > +# > > + > > +[Sources] > > + TimerRng.c > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + > > +[LibraryClasses] > > + BaseLib > > + DebugLib > > + TimerLib > > diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc > index 472fa3777412..c46a95e52e15 100644 > --- a/MdePkg/MdePkg.dsc > +++ b/MdePkg/MdePkg.dsc > @@ -120,6 +120,8 @@ > MdePkg/Library/SmmLibNull/SmmLibNull.inf > > > MdePkg/Library/BaseExtractGuidedSectionLib/BaseExtractGuidedSectionLib.inf > > > > + MdePkg/Library/TimerRngLib/TimerRngLib.inf > > + > > > MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoin > t.inf > > > MdePkg/Library/StandaloneMmServicesTableLib/StandaloneMmServicesTableLi > b.inf > > > > -- > 2.27.0.windows.1 > > > -=-=-=-=-=-= > Groups.io Links: You receive all messages sent to this group. > > View/Reply Online (#63373): https://edk2.groups.io/g/devel/message/63373 > Mute This Topic: https://groups.io/mt/75836598/1772286 > Group Owner: [email protected] > Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] > -=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#63377): https://edk2.groups.io/g/devel/message/63377 Mute This Topic: https://groups.io/mt/75836598/21656 Group Owner: [email protected] Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
