summaryrefslogtreecommitdiffstats
path: root/src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-11 08:17:27 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-11 08:17:27 +0000
commitf215e02bf85f68d3a6106c2a1f4f7f063f819064 (patch)
tree6bb5b92c046312c4e95ac2620b10ddf482d3fa8b /src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib
parentInitial commit. (diff)
downloadvirtualbox-f215e02bf85f68d3a6106c2a1f4f7f063f819064.tar.xz
virtualbox-f215e02bf85f68d3a6106c2a1f4f7f063f819064.zip
Adding upstream version 7.0.14-dfsg.upstream/7.0.14-dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib')
-rw-r--r--src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.c283
-rw-r--r--src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.inf44
-rw-r--r--src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.uni17
3 files changed, 344 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.c b/src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.c
new file mode 100644
index 00000000..6e89200d
--- /dev/null
+++ b/src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.c
@@ -0,0 +1,283 @@
+/** @file
+ Unified Hash API Implementation
+
+ This file implements the Unified Hash API.
+
+ This API, when called, will calculate the Hash using the
+ hashing algorithm specified by PcdHashApiLibPolicy.
+
+ Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Base.h>
+#include <IndustryStandard/Tpm20.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/BaseCryptLib.h>
+#include <Library/DebugLib.h>
+#include <Library/PcdLib.h>
+#include <Library/HashApiLib.h>
+
+/**
+ Retrieves the size, in bytes, of the context buffer required for hash operations.
+
+ @return The size, in bytes, of the context buffer required for hash operations.
+**/
+UINTN
+EFIAPI
+HashApiGetContextSize (
+ VOID
+ )
+{
+ switch (PcdGet32 (PcdHashApiLibPolicy)) {
+ case HASH_ALG_SHA1:
+ return Sha1GetContextSize ();
+ break;
+
+ case HASH_ALG_SHA256:
+ return Sha256GetContextSize ();
+ break;
+
+ case HASH_ALG_SHA384:
+ return Sha384GetContextSize ();
+ break;
+
+ case HASH_ALG_SHA512:
+ return Sha512GetContextSize ();
+ break;
+
+ case HASH_ALG_SM3_256:
+ return Sm3GetContextSize ();
+ break;
+
+ default:
+ ASSERT (FALSE);
+ return 0;
+ break;
+ }
+}
+
+/**
+ Init hash sequence.
+
+ @param[out] HashContext Hash context.
+
+ @retval TRUE Hash start and HashHandle returned.
+ @retval FALSE Hash Init unsuccessful.
+**/
+BOOLEAN
+EFIAPI
+HashApiInit (
+ OUT HASH_API_CONTEXT HashContext
+ )
+{
+ switch (PcdGet32 (PcdHashApiLibPolicy)) {
+ case HASH_ALG_SHA1:
+ return Sha1Init (HashContext);
+ break;
+
+ case HASH_ALG_SHA256:
+ return Sha256Init (HashContext);
+ break;
+
+ case HASH_ALG_SHA384:
+ return Sha384Init (HashContext);
+ break;
+
+ case HASH_ALG_SHA512:
+ return Sha512Init (HashContext);
+ break;
+
+ case HASH_ALG_SM3_256:
+ return Sm3Init (HashContext);
+ break;
+
+ default:
+ ASSERT (FALSE);
+ return FALSE;
+ break;
+ }
+}
+
+/**
+ Makes a copy of an existing hash context.
+
+ @param[in] HashContext Hash context.
+ @param[out] NewHashContext New copy of hash context.
+
+ @retval TRUE Hash context copy succeeded.
+ @retval FALSE Hash context copy failed.
+**/
+BOOLEAN
+EFIAPI
+HashApiDuplicate (
+ IN HASH_API_CONTEXT HashContext,
+ OUT HASH_API_CONTEXT NewHashContext
+ )
+{
+ switch (PcdGet32 (PcdHashApiLibPolicy)) {
+ case HASH_ALG_SHA1:
+ return Sha1Duplicate (HashContext, NewHashContext);
+ break;
+
+ case HASH_ALG_SHA256:
+ return Sha256Duplicate (HashContext, NewHashContext);
+ break;
+
+ case HASH_ALG_SHA384:
+ return Sha384Duplicate (HashContext, NewHashContext);
+ break;
+
+ case HASH_ALG_SHA512:
+ return Sha512Duplicate (HashContext, NewHashContext);
+ break;
+
+ case HASH_ALG_SM3_256:
+ return Sm3Duplicate (HashContext, NewHashContext);
+ break;
+
+ default:
+ ASSERT (FALSE);
+ return FALSE;
+ break;
+ }
+}
+
+/**
+ Update hash data.
+
+ @param[in] HashContext Hash context.
+ @param[in] DataToHash Data to be hashed.
+ @param[in] DataToHashLen Data size.
+
+ @retval TRUE Hash updated.
+ @retval FALSE Hash updated unsuccessful.
+**/
+BOOLEAN
+EFIAPI
+HashApiUpdate (
+ IN HASH_API_CONTEXT HashContext,
+ IN VOID *DataToHash,
+ IN UINTN DataToHashLen
+ )
+{
+ switch (PcdGet32 (PcdHashApiLibPolicy)) {
+ case HASH_ALG_SHA1:
+ return Sha1Update (HashContext, DataToHash, DataToHashLen);
+ break;
+
+ case HASH_ALG_SHA256:
+ return Sha256Update (HashContext, DataToHash, DataToHashLen);
+ break;
+
+ case HASH_ALG_SHA384:
+ return Sha384Update (HashContext, DataToHash, DataToHashLen);
+ break;
+
+ case HASH_ALG_SHA512:
+ return Sha512Update (HashContext, DataToHash, DataToHashLen);
+ break;
+
+ case HASH_ALG_SM3_256:
+ return Sm3Update (HashContext, DataToHash, DataToHashLen);
+ break;
+
+ default:
+ ASSERT (FALSE);
+ return FALSE;
+ break;
+ }
+}
+
+/**
+ Hash complete.
+
+ @param[in] HashContext Hash context.
+ @param[out] Digest Hash Digest.
+
+ @retval TRUE Hash complete and Digest is returned.
+ @retval FALSE Hash complete unsuccessful.
+**/
+BOOLEAN
+EFIAPI
+HashApiFinal (
+ IN HASH_API_CONTEXT HashContext,
+ OUT UINT8 *Digest
+ )
+{
+ switch (PcdGet32 (PcdHashApiLibPolicy)) {
+ case HASH_ALG_SHA1:
+ return Sha1Final (HashContext, Digest);
+ break;
+
+ case HASH_ALG_SHA256:
+ return Sha256Final (HashContext, Digest);
+ break;
+
+ case HASH_ALG_SHA384:
+ return Sha384Final (HashContext, Digest);
+ break;
+
+ case HASH_ALG_SHA512:
+ return Sha512Final (HashContext, Digest);
+ break;
+
+ case HASH_ALG_SM3_256:
+ return Sm3Final (HashContext, Digest);
+ break;
+
+ default:
+ ASSERT (FALSE);
+ return FALSE;
+ break;
+ }
+}
+
+/**
+ Computes hash message digest of a input data buffer.
+
+ @param[in] DataToHash Data to be hashed.
+ @param[in] DataToHashLen Data size.
+ @param[out] Digest Hash Digest.
+
+ @retval TRUE Hash digest computation succeeded.
+ @retval FALSE Hash digest computation failed.
+**/
+BOOLEAN
+EFIAPI
+HashApiHashAll (
+ IN CONST VOID *DataToHash,
+ IN UINTN DataToHashLen,
+ OUT UINT8 *Digest
+ )
+{
+ switch (PcdGet32 (PcdHashApiLibPolicy)) {
+ case HASH_ALG_SHA1:
+ return Sha1HashAll (DataToHash, DataToHashLen, Digest);
+ break;
+
+ case HASH_ALG_SHA256:
+ return Sha256HashAll (DataToHash, DataToHashLen, Digest);
+ break;
+
+ case HASH_ALG_SHA384:
+ return Sha384HashAll (DataToHash, DataToHashLen, Digest);
+ break;
+
+ case HASH_ALG_SHA512:
+ return Sha512HashAll (DataToHash, DataToHashLen, Digest);
+ break;
+
+ case HASH_ALG_SM3_256:
+ return Sm3HashAll (DataToHash, DataToHashLen, Digest);
+ break;
+
+ default:
+ ASSERT (FALSE);
+ return FALSE;
+ break;
+ }
+}
diff --git a/src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.inf b/src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.inf
new file mode 100644
index 00000000..116b7dc8
--- /dev/null
+++ b/src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.inf
@@ -0,0 +1,44 @@
+## @file
+# Provides Unified API for Hash Calculation
+#
+# This library is BaseHashApiLib. It will redirect hash request to
+# each individual hash API, such as SHA1, SHA256, SHA384, SM3 based
+# on hashing algorithm specified by PcdHashApiLibPolicy.
+#
+# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = BaseHashApiLib
+ MODULE_UNI_FILE = BaseHashApiLib.uni
+ FILE_GUID = B1E566DD-DE7C-4F04-BDA0-B1295D3BE927
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = HashApiLib
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+[Sources]
+ BaseHashApiLib.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ CryptoPkg/CryptoPkg.dec
+
+[LibraryClasses]
+ BaseLib
+ BaseMemoryLib
+ DebugLib
+ MemoryAllocationLib
+ BaseCryptLib
+ PcdLib
+
+[Pcd]
+ gEfiCryptoPkgTokenSpaceGuid.PcdHashApiLibPolicy ## CONSUMES
diff --git a/src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.uni b/src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.uni
new file mode 100644
index 00000000..49ba82e8
--- /dev/null
+++ b/src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.uni
@@ -0,0 +1,17 @@
+// /** @file
+// Provides Unified API for Hash Calculation
+//
+// This library is BaseHashApiLib. It will redirect hash request to
+// each individual hash API, such as SHA1, SHA256, SHA384, SM3 based
+// on hashing algorithm specified by PcdHashApiLibPolicy.
+//
+// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+//
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+// **/
+
+
+#string STR_MODULE_ABSTRACT #language en-US "Provides hash service by specified hash handler"
+
+#string STR_MODULE_DESCRIPTION #language en-US "This library is Unified Hash API. It will redirect hash request to the hash handler specified by PcdHashApiLibPolicy."