+++ /dev/null
-/** @file\r
- MD4 Digest Wrapper Implementation over OpenSSL.\r
-\r
-Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>\r
-SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#include "InternalCryptLib.h"\r
-#include <openssl/md4.h>\r
-\r
-/**\r
- Retrieves the size, in bytes, of the context buffer required for MD4 hash operations.\r
-\r
- @return The size, in bytes, of the context buffer required for MD4 hash operations.\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-Md4GetContextSize (\r
- VOID\r
- )\r
-{\r
- //\r
- // Retrieves the OpenSSL MD4 Context Size\r
- //\r
- return (UINTN) (sizeof (MD4_CTX));\r
-}\r
-\r
-/**\r
- Initializes user-supplied memory pointed by Md4Context as MD4 hash context for\r
- subsequent use.\r
-\r
- If Md4Context is NULL, then return FALSE.\r
-\r
- @param[out] Md4Context Pointer to MD4 context being initialized.\r
-\r
- @retval TRUE MD4 context initialization succeeded.\r
- @retval FALSE MD4 context initialization failed.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-Md4Init (\r
- OUT VOID *Md4Context\r
- )\r
-{\r
- //\r
- // Check input parameters.\r
- //\r
- if (Md4Context == NULL) {\r
- return FALSE;\r
- }\r
-\r
- //\r
- // OpenSSL MD4 Context Initialization\r
- //\r
- return (BOOLEAN) (MD4_Init ((MD4_CTX *) Md4Context));\r
-}\r
-\r
-/**\r
- Makes a copy of an existing MD4 context.\r
-\r
- If Md4Context is NULL, then return FALSE.\r
- If NewMd4Context is NULL, then return FALSE.\r
-\r
- @param[in] Md4Context Pointer to MD4 context being copied.\r
- @param[out] NewMd4Context Pointer to new MD4 context.\r
-\r
- @retval TRUE MD4 context copy succeeded.\r
- @retval FALSE MD4 context copy failed.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-Md4Duplicate (\r
- IN CONST VOID *Md4Context,\r
- OUT VOID *NewMd4Context\r
- )\r
-{\r
- //\r
- // Check input parameters.\r
- //\r
- if (Md4Context == NULL || NewMd4Context == NULL) {\r
- return FALSE;\r
- }\r
-\r
- CopyMem (NewMd4Context, Md4Context, sizeof (MD4_CTX));\r
-\r
- return TRUE;\r
-}\r
-\r
-/**\r
- Digests the input data and updates MD4 context.\r
-\r
- This function performs MD4 digest on a data buffer of the specified size.\r
- It can be called multiple times to compute the digest of long or discontinuous data streams.\r
- MD4 context should be already correctly initialized by Md4Init(), and should not be finalized\r
- by Md4Final(). Behavior with invalid context is undefined.\r
-\r
- If Md4Context is NULL, then return FALSE.\r
-\r
- @param[in, out] Md4Context Pointer to the MD4 context.\r
- @param[in] Data Pointer to the buffer containing the data to be hashed.\r
- @param[in] DataSize Size of Data buffer in bytes.\r
-\r
- @retval TRUE MD4 data digest succeeded.\r
- @retval FALSE MD4 data digest failed.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-Md4Update (\r
- IN OUT VOID *Md4Context,\r
- IN CONST VOID *Data,\r
- IN UINTN DataSize\r
- )\r
-{\r
- //\r
- // Check input parameters.\r
- //\r
- if (Md4Context == NULL) {\r
- return FALSE;\r
- }\r
-\r
- //\r
- // Check invalid parameters, in case that only DataLength was checked in OpenSSL\r
- //\r
- if (Data == NULL && DataSize != 0) {\r
- return FALSE;\r
- }\r
-\r
- //\r
- // OpenSSL MD4 Hash Update\r
- //\r
- return (BOOLEAN) (MD4_Update ((MD4_CTX *) Md4Context, Data, DataSize));\r
-}\r
-\r
-/**\r
- Completes computation of the MD4 digest value.\r
-\r
- This function completes MD4 hash computation and retrieves the digest value into\r
- the specified memory. After this function has been called, the MD4 context cannot\r
- be used again.\r
- MD4 context should be already correctly initialized by Md4Init(), and should not be\r
- finalized by Md4Final(). Behavior with invalid MD4 context is undefined.\r
-\r
- If Md4Context is NULL, then return FALSE.\r
- If HashValue is NULL, then return FALSE.\r
-\r
- @param[in, out] Md4Context Pointer to the MD4 context.\r
- @param[out] HashValue Pointer to a buffer that receives the MD4 digest\r
- value (16 bytes).\r
-\r
- @retval TRUE MD4 digest computation succeeded.\r
- @retval FALSE MD4 digest computation failed.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-Md4Final (\r
- IN OUT VOID *Md4Context,\r
- OUT UINT8 *HashValue\r
- )\r
-{\r
- //\r
- // Check input parameters.\r
- //\r
- if (Md4Context == NULL || HashValue == NULL) {\r
- return FALSE;\r
- }\r
-\r
- //\r
- // OpenSSL MD4 Hash Finalization\r
- //\r
- return (BOOLEAN) (MD4_Final (HashValue, (MD4_CTX *) Md4Context));\r
-}\r
-\r
-/**\r
- Computes the MD4 message digest of a input data buffer.\r
-\r
- This function performs the MD4 message digest of a given data buffer, and places\r
- the digest value into the specified memory.\r
-\r
- If this interface is not supported, then return FALSE.\r
-\r
- @param[in] Data Pointer to the buffer containing the data to be hashed.\r
- @param[in] DataSize Size of Data buffer in bytes.\r
- @param[out] HashValue Pointer to a buffer that receives the MD4 digest\r
- value (16 bytes).\r
-\r
- @retval TRUE MD4 digest computation succeeded.\r
- @retval FALSE MD4 digest computation failed.\r
- @retval FALSE This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-Md4HashAll (\r
- IN CONST VOID *Data,\r
- IN UINTN DataSize,\r
- OUT UINT8 *HashValue\r
- )\r
-{\r
- //\r
- // Check input parameters.\r
- //\r
- if (HashValue == NULL) {\r
- return FALSE;\r
- }\r
- if (Data == NULL && DataSize != 0) {\r
- return FALSE;\r
- }\r
-\r
- //\r
- // OpenSSL MD4 Hash Computation.\r
- //\r
- if (MD4 (Data, DataSize, HashValue) == NULL) {\r
- return FALSE;\r
- } else {\r
- return TRUE;\r
- }\r
-}\r