From: Pierre Gondois <pierre.gond...@arm.com>

NIST Special Publication 800-90C, s10.3.3 'Get_entropy_input
Constructions for Accessing Entropy Sources'
specifies multiple way to implement the Get_entropy_input()
function.

Implement s10.3.3.1 'Construction When a Conditioning Function
is not Used' in a separate file to let room for other potential
implementations.

Signed-off-by: Pierre Gondois <pierre.gond...@arm.com>
---
 MdePkg/Library/DrbgLib/GetEntropyInput.c | 72 ++++++++++++++++++++++++
 MdePkg/Library/DrbgLib/GetEntropyInput.h | 48 ++++++++++++++++
 2 files changed, 120 insertions(+)
 create mode 100644 MdePkg/Library/DrbgLib/GetEntropyInput.c
 create mode 100644 MdePkg/Library/DrbgLib/GetEntropyInput.h

diff --git a/MdePkg/Library/DrbgLib/GetEntropyInput.c 
b/MdePkg/Library/DrbgLib/GetEntropyInput.c
new file mode 100644
index 000000000000..6257bc9093dd
--- /dev/null
+++ b/MdePkg/Library/DrbgLib/GetEntropyInput.c
@@ -0,0 +1,72 @@
+/** @file
+  GetEntropyInput function implementation.
+
+  Copyright (c) 2022, Arm Limited. All rights reserved.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+  @par Reference(s):
+  - [1] NIST Special Publication 800-90A Revision 1, June 2015, Recommendation
+        for Random Number Generation Using Deterministic Random Bit Generators.
+        (https://csrc.nist.gov/publications/detail/sp/800-90a/rev-1/final)
+  - [2] NIST Special Publication 800-90B, Recommendation for the Entropy
+        Sources Used for Random Bit Generation.
+        (https://csrc.nist.gov/publications/detail/sp/800-90b/final)
+  - [3] (Second Draft) NIST Special Publication 800-90C, Recommendation for
+        Random Bit Generator (RBG) Constructions.
+        (https://csrc.nist.gov/publications/detail/sp/800-90c/draft)
+
+  @par Glossary:
+    - TRNG - True Random Number Generator
+    - Sec  - Security
+    - DRBG - Deterministic Random Bits Generator
+    - CTR  - Counter
+**/
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+
+#include "Common.h"
+
+/** GetEntropyInput implementation (no conditionning function).
+
+  Cf. [3] 10.3.3.1 Construction When a Conditioning Function is not Used
+
+  @param [in]   DrbgHandle        The Drbg hanble.
+  @param [in]   MinEntropy        Minimum entropy.
+  @param [out]  EntropyBitsStream Stream containing the generated entropy.
+
+  @retval EFI_SUCCESS             Success.
+  @retval EFI_INVALID_PARAMETER   Invalid parameter.
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.
+**/
+EFI_STATUS
+EFIAPI
+GetEntropyInputNoCondFn (
+  IN  DRBG_HANDLE  DrbgHandle,
+  IN  UINTN        MinEntropy,
+  OUT BIT_STREAM   **EntropyBitsStream
+  )
+{
+  EFI_STATUS  Status;
+
+  if ((DrbgHandle == NULL)          ||
+      (EntropyBitsStream == NULL)   ||
+      (*EntropyBitsStream != NULL))
+  {
+    ASSERT (DrbgHandle != NULL);
+    ASSERT (EntropyBitsStream != NULL);
+    ASSERT (*EntropyBitsStream == NULL);
+    return EFI_INVALID_PARAMETER;
+  }
+
+  // 1. (status, entropy_bitstring) = Get_Entropy(min_entropy, max_length).
+  // 2. If (status != SUCCESS), then return (status, Null).
+  // 3. Return SUCCESS, entropy_bitstring.
+  Status = GetEntropy (DrbgHandle, MinEntropy, EntropyBitsStream);
+  if (EFI_ERROR (Status)) {
+    ASSERT_EFI_ERROR (Status);
+    // Fall through.
+  }
+
+  return Status;
+}
diff --git a/MdePkg/Library/DrbgLib/GetEntropyInput.h 
b/MdePkg/Library/DrbgLib/GetEntropyInput.h
new file mode 100644
index 000000000000..336fbc3826c0
--- /dev/null
+++ b/MdePkg/Library/DrbgLib/GetEntropyInput.h
@@ -0,0 +1,48 @@
+/** @file
+  GetEntropyInput function implementation.
+
+  Copyright (c) 2022, Arm Limited. All rights reserved.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+  @par Reference(s):
+  - [1] NIST Special Publication 800-90A Revision 1, June 2015, Recommendation
+        for Random Number Generation Using Deterministic Random Bit Generators.
+        (https://csrc.nist.gov/publications/detail/sp/800-90a/rev-1/final)
+  - [2] NIST Special Publication 800-90B, Recommendation for the Entropy
+        Sources Used for Random Bit Generation.
+        (https://csrc.nist.gov/publications/detail/sp/800-90b/final)
+  - [3] (Second Draft) NIST Special Publication 800-90C, Recommendation for
+        Random Bit Generator (RBG) Constructions.
+        (https://csrc.nist.gov/publications/detail/sp/800-90c/draft)
+
+  @par Glossary:
+    - TRNG - True Random Number Generator
+    - Sec  - Security
+    - DRBG - Deterministic Random Bits Generator
+    - CTR  - Counter
+**/
+
+#ifndef GET_ENTROPY_INPUT_H_
+#define GET_ENTROPY_INPUT_H_
+
+/** GetEntropyInput implementation (no conditionning function).
+
+  Cf. [3] 10.3.3.1 Construction When a Conditioning Function is not Used
+
+  @param [in]   DrbgHandle        The Drbg hanble.
+  @param [in]   MinEntropy        Minimum entropy.
+  @param [out]  EntropyBitsStream Stream containing the generated entropy.
+
+  @retval EFI_SUCCESS             Success.
+  @retval EFI_INVALID_PARAMETER   Invalid parameter.
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.
+**/
+EFI_STATUS
+EFIAPI
+GetEntropyInputNoCondFn (
+  IN  DRBG_HANDLE  DrbgHandle,
+  IN  UINTN        MinEntropy,
+  OUT BIT_STREAM   **EntropyBitsStream
+  );
+
+#endif // GET_ENTROPY_INPUT_H_
-- 
2.25.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#90902): https://edk2.groups.io/g/devel/message/90902
Mute This Topic: https://groups.io/mt/92072290/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to