From f215e02bf85f68d3a6106c2a1f4f7f063f819064 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 11 Apr 2024 10:17:27 +0200 Subject: Adding upstream version 7.0.14-dfsg. Signed-off-by: Daniel Baumann --- .../Library/BaseHashApiLib/BaseHashApiLib.c | 283 +++++++++++++++++++++ .../Library/BaseHashApiLib/BaseHashApiLib.inf | 44 ++++ .../Library/BaseHashApiLib/BaseHashApiLib.uni | 17 ++ 3 files changed, 344 insertions(+) create mode 100644 src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.c create mode 100644 src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.inf create mode 100644 src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.uni (limited to 'src/VBox/Devices/EFI/Firmware/CryptoPkg/Library/BaseHashApiLib') 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.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** + 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.
+# 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.
+// +// 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." -- cgit v1.2.3