public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [Patch] CryptoPkg: Add xxxxHashAll APIs to facilitate the digest computation
@ 2016-10-31  8:28 Qin Long
  2016-11-01  1:31 ` Ye, Ting
  0 siblings, 1 reply; 3+ messages in thread
From: Qin Long @ 2016-10-31  8:28 UTC (permalink / raw)
  To: edk2-devel; +Cc: ting.ye

Add new xxxxHashAll APIs to facilitate the digest computation of blob
data. New APIs include: Md4HashAll(), Md5HashAll(), Sha1HashAll(),
Sha256HashAll(), Sha384HashAll(), and Sha512HashAll().

The corresponding test cases were added in Cryptest utility.

Cc: Ting Ye <ting.ye@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Qin Long <qin.long@intel.com>
---
 CryptoPkg/Application/Cryptest/HashVerify.c        |  74 +++++++++-
 CryptoPkg/Include/Library/BaseCryptLib.h           | 158 ++++++++++++++++++++-
 CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c     |  48 ++++++-
 CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c |  27 +++-
 CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c     |  48 ++++++-
 CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c    |  48 ++++++-
 CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c  |  48 ++++++-
 CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c  |  94 +++++++++++-
 .../Library/BaseCryptLib/Hash/CryptSha512Null.c    |  52 ++++++-
 9 files changed, 588 insertions(+), 9 deletions(-)

diff --git a/CryptoPkg/Application/Cryptest/HashVerify.c b/CryptoPkg/Application/Cryptest/HashVerify.c
index ca64361..345664b 100644
--- a/CryptoPkg/Application/Cryptest/HashVerify.c
+++ b/CryptoPkg/Application/Cryptest/HashVerify.c
@@ -1,7 +1,7 @@
 /** @file
   Application for Hash Primitives Validation.
 
-Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials
 are licensed and made available under the terms and conditions of the BSD License
 which accompanies this distribution.  The full text of the license may be found at
@@ -132,6 +132,18 @@ ValidateCryptDigest (
     return EFI_ABORTED;
   }
 
+  Print (L"HashAll... ");
+  ZeroMem (Digest, MD5_DIGEST_SIZE);
+  Status  = Md4HashAll (HashData, DataSize, Digest);
+  if (!Status) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+  if (CompareMem (Digest, Md4Digest, MD5_DIGEST_SIZE) != 0) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+
   Print (L"[Pass]\n");
 
   Print (L"- MD5:    ");
@@ -172,6 +184,18 @@ ValidateCryptDigest (
     return EFI_ABORTED;
   }
 
+  Print (L"HashAll... ");
+  ZeroMem (Digest, MD5_DIGEST_SIZE);
+  Status  = Md5HashAll (HashData, DataSize, Digest);
+  if (!Status) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+  if (CompareMem (Digest, Md5Digest, MD5_DIGEST_SIZE) != 0) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+
   Print (L"[Pass]\n");
 
   Print (L"- SHA1:   ");
@@ -212,6 +236,18 @@ ValidateCryptDigest (
     return EFI_ABORTED;
   }
 
+  Print (L"HashAll... ");
+  ZeroMem (Digest, SHA1_DIGEST_SIZE);
+  Status  = Sha1HashAll (HashData, DataSize, Digest);
+  if (!Status) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+  if (CompareMem (Digest, Sha1Digest, SHA1_DIGEST_SIZE) != 0) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+
   Print (L"[Pass]\n");
 
   Print (L"- SHA256: ");
@@ -252,6 +288,18 @@ ValidateCryptDigest (
     return EFI_ABORTED;
   }
 
+  Print (L"HashAll... ");
+  ZeroMem (Digest, SHA256_DIGEST_SIZE);
+  Status  = Sha256HashAll (HashData, DataSize, Digest);
+  if (!Status) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+  if (CompareMem (Digest, Sha256Digest, SHA256_DIGEST_SIZE) != 0) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+
   Print (L"[Pass]\n");
 
   Print (L"- SHA384: ");
@@ -292,6 +340,18 @@ ValidateCryptDigest (
     return EFI_ABORTED;
   }
 
+  Print (L"HashAll... ");
+  ZeroMem (Digest, SHA384_DIGEST_SIZE);
+  Status  = Sha384HashAll (HashData, DataSize, Digest);
+  if (!Status) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+  if (CompareMem (Digest, Sha384Digest, SHA384_DIGEST_SIZE) != 0) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+
   Print (L"[Pass]\n");
 
   Print (L"- SHA512: ");
@@ -332,6 +392,18 @@ ValidateCryptDigest (
     return EFI_ABORTED;
   }
 
+  Print (L"HashAll... ");
+  ZeroMem (Digest, SHA512_DIGEST_SIZE);
+  Status  = Sha512HashAll (HashData, DataSize, Digest);
+  if (!Status) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+  if (CompareMem (Digest, Sha512Digest, SHA512_DIGEST_SIZE) != 0) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+
   Print (L"[Pass]\n");
 
   return EFI_SUCCESS;
diff --git a/CryptoPkg/Include/Library/BaseCryptLib.h b/CryptoPkg/Include/Library/BaseCryptLib.h
index 0371d73..3463626 100644
--- a/CryptoPkg/Include/Library/BaseCryptLib.h
+++ b/CryptoPkg/Include/Library/BaseCryptLib.h
@@ -4,7 +4,7 @@
   primitives (Hash Serials, HMAC, RSA, Diffie-Hellman, etc) for UEFI security
   functionality enabling.
 
-Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials
 are licensed and made available under the terms and conditions of the BSD License
 which accompanies this distribution.  The full text of the license may be found at
@@ -193,6 +193,32 @@ Md4Final (
   );
 
 /**
+  Computes the MD4 message digest of a input data buffer.
+
+  This function performs the MD4 message digest of a given data buffer, and places
+  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the MD4 digest
+                           value (16 bytes).
+
+  @retval TRUE   MD4 digest computation succeeded.
+  @retval FALSE  MD4 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Md4HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  );
+
+/**
   Retrieves the size, in bytes, of the context buffer required for MD5 hash operations.
 
   If this interface is not supported, then return zero.
@@ -307,6 +333,32 @@ Md5Final (
   );
 
 /**
+  Computes the MD5 message digest of a input data buffer.
+
+  This function performs the MD5 message digest of a given data buffer, and places
+  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the MD5 digest
+                           value (16 bytes).
+
+  @retval TRUE   MD5 digest computation succeeded.
+  @retval FALSE  MD5 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Md5HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  );
+
+/**
   Retrieves the size, in bytes, of the context buffer required for SHA-1 hash operations.
 
   If this interface is not supported, then return zero.
@@ -421,6 +473,32 @@ Sha1Final (
   );
 
 /**
+  Computes the SHA-1 message digest of a input data buffer.
+
+  This function performs the SHA-1 message digest of a given data buffer, and places
+  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-1 digest
+                           value (20 bytes).
+
+  @retval TRUE   SHA-1 digest computation succeeded.
+  @retval FALSE  SHA-1 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha1HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  );
+
+/**
   Retrieves the size, in bytes, of the context buffer required for SHA-256 hash operations.
 
   @return  The size, in bytes, of the context buffer required for SHA-256 hash operations.
@@ -526,6 +604,32 @@ Sha256Final (
   );
 
 /**
+  Computes the SHA-256 message digest of a input data buffer.
+
+  This function performs the SHA-256 message digest of a given data buffer, and places
+  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-256 digest
+                           value (32 bytes).
+
+  @retval TRUE   SHA-256 digest computation succeeded.
+  @retval FALSE  SHA-256 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha256HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  );
+
+/**
   Retrieves the size, in bytes, of the context buffer required for SHA-384 hash operations.
 
   @return  The size, in bytes, of the context buffer required for SHA-384 hash operations.
@@ -631,6 +735,32 @@ Sha384Final (
   );
 
 /**
+  Computes the SHA-384 message digest of a input data buffer.
+
+  This function performs the SHA-384 message digest of a given data buffer, and places
+  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-384 digest
+                           value (48 bytes).
+
+  @retval TRUE   SHA-384 digest computation succeeded.
+  @retval FALSE  SHA-384 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha384HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  );
+
+/**
   Retrieves the size, in bytes, of the context buffer required for SHA-512 hash operations.
 
   @return  The size, in bytes, of the context buffer required for SHA-512 hash operations.
@@ -735,6 +865,32 @@ Sha512Final (
   OUT     UINT8  *HashValue
   );
 
+/**
+  Computes the SHA-512 message digest of a input data buffer.
+
+  This function performs the SHA-512 message digest of a given data buffer, and places
+  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-512 digest
+                           value (64 bytes).
+
+  @retval TRUE   SHA-512 digest computation succeeded.
+  @retval FALSE  SHA-512 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha512HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  );
+
 //=====================================================================================
 //    MAC (Message Authentication Code) Primitive
 //=====================================================================================
diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c
index 633d343..d9cc445 100644
--- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c
+++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c
@@ -1,7 +1,7 @@
 /** @file
   MD4 Digest Wrapper Implementation over OpenSSL.
 
-Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials
 are licensed and made available under the terms and conditions of the BSD License
 which accompanies this distribution.  The full text of the license may be found at
@@ -181,3 +181,49 @@ Md4Final (
   //
   return (BOOLEAN) (MD4_Final (HashValue, (MD4_CTX *) Md4Context));
 }
+
+/**
+  Computes the MD4 message digest of a input data buffer.
+
+  This function performs the MD4 message digest of a given data buffer, and places
+  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the MD4 digest
+                           value (16 bytes).
+
+  @retval TRUE   MD4 digest computation succeeded.
+  @retval FALSE  MD4 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Md4HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  //
+  // Check input parameters.
+  //
+  if (HashValue == NULL) {
+    return FALSE;
+  }
+  if (Data == NULL && DataSize != 0) {
+    return FALSE;
+  }
+
+  //
+  // OpenSSL MD4 Hash Computation.
+  //
+  if (MD4 (Data, DataSize, HashValue) == NULL) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c
index fc634fd..01b3f23 100644
--- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c
+++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c
@@ -1,7 +1,7 @@
 /** @file
   MD4 Digest Wrapper Implementation which does not provide real capabilities.
 
-Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials
 are licensed and made available under the terms and conditions of the BSD License
 which accompanies this distribution.  The full text of the license may be found at
@@ -122,3 +122,28 @@ Md4Final (
   ASSERT (FALSE);
   return FALSE;
 }
+
+/**
+  Computes the MD4 message digest of a input data buffer.
+
+  Return FALSE to indicate this interface is not supported.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the MD4 digest
+                           value (16 bytes).
+
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Md4HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  ASSERT (FALSE);
+  return FALSE;
+}
diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c
index e1c10e3..34eabe9 100644
--- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c
+++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c
@@ -1,7 +1,7 @@
 /** @file
   MD5 Digest Wrapper Implementation over OpenSSL.
 
-Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials
 are licensed and made available under the terms and conditions of the BSD License
 which accompanies this distribution.  The full text of the license may be found at
@@ -183,3 +183,49 @@ Md5Final (
   //
   return (BOOLEAN) (MD5_Final (HashValue, (MD5_CTX *) Md5Context));
 }
+
+/**
+  Computes the MD5 message digest of a input data buffer.
+
+  This function performs the MD5 message digest of a given data buffer, and places
+  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the MD5 digest
+                           value (16 bytes).
+
+  @retval TRUE   MD5 digest computation succeeded.
+  @retval FALSE  MD5 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Md5HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  //
+  // Check input parameters.
+  //
+  if (HashValue == NULL) {
+    return FALSE;
+  }
+  if (Data == NULL && (DataSize != 0)) {
+    return FALSE;
+  }
+
+  //
+  // OpenSSL MD5 Hash Computation.
+  //
+  if (MD5 (Data, DataSize, HashValue) == NULL) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c
index 78c29c1..b8a6d0c 100644
--- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c
+++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c
@@ -1,7 +1,7 @@
 /** @file
   SHA-1 Digest Wrapper Implementation over OpenSSL.
 
-Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials
 are licensed and made available under the terms and conditions of the BSD License
 which accompanies this distribution.  The full text of the license may be found at
@@ -182,3 +182,49 @@ Sha1Final (
   //
   return (BOOLEAN) (SHA1_Final (HashValue, (SHA_CTX *) Sha1Context));
 }
+
+/**
+  Computes the SHA-1 message digest of a input data buffer.
+
+  This function performs the SHA-1 message digest of a given data buffer, and places
+  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-1 digest
+                           value (20 bytes).
+
+  @retval TRUE   SHA-1 digest computation succeeded.
+  @retval FALSE  SHA-1 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha1HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  //
+  // Check input parameters.
+  //
+  if (HashValue == NULL) {
+    return FALSE;
+  }
+  if (Data == NULL && DataSize != 0) {
+    return FALSE;
+  }
+
+  //
+  // OpenSSL SHA-1 Hash Computation.
+  //
+  if (SHA1 (Data, DataSize, HashValue) == NULL) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c
index 56894ac..aaf689b 100644
--- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c
+++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c
@@ -1,7 +1,7 @@
 /** @file
   SHA-256 Digest Wrapper Implementation over OpenSSL.
 
-Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials
 are licensed and made available under the terms and conditions of the BSD License
 which accompanies this distribution.  The full text of the license may be found at
@@ -181,3 +181,49 @@ Sha256Final (
   //
   return (BOOLEAN) (SHA256_Final (HashValue, (SHA256_CTX *) Sha256Context));
 }
+
+/**
+  Computes the SHA-256 message digest of a input data buffer.
+
+  This function performs the SHA-256 message digest of a given data buffer, and places
+  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-256 digest
+                           value (32 bytes).
+
+  @retval TRUE   SHA-256 digest computation succeeded.
+  @retval FALSE  SHA-256 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha256HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  //
+  // Check input parameters.
+  //
+  if (HashValue == NULL) {
+    return FALSE;
+  }
+  if (Data == NULL && DataSize != 0) {
+    return FALSE;
+  }
+
+  //
+  // OpenSSL SHA-256 Hash Computation.
+  //
+  if (SHA256 (Data, DataSize, HashValue) == NULL) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c
index 491f45d..457151e 100644
--- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c
+++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c
@@ -1,7 +1,7 @@
 /** @file
   SHA-384 and SHA-512 Digest Wrapper Implementations over OpenSSL.
 
-Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials
 are licensed and made available under the terms and conditions of the BSD License
 which accompanies this distribution.  The full text of the license may be found at
@@ -185,6 +185,52 @@ Sha384Final (
 }
 
 /**
+  Computes the SHA-384 message digest of a input data buffer.
+
+  This function performs the SHA-384 message digest of a given data buffer, and places
+  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-384 digest
+                           value (48 bytes).
+
+  @retval TRUE   SHA-384 digest computation succeeded.
+  @retval FALSE  SHA-384 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha384HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  //
+  // Check input parameters.
+  //
+  if (HashValue == NULL) {
+    return FALSE;
+  }
+  if (Data == NULL && DataSize != 0) {
+    return FALSE;
+  }
+
+  //
+  // OpenSSL SHA-384 Hash Computation.
+  //
+  if (SHA384 (Data, DataSize, HashValue) == NULL) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
+
+/**
   Retrieves the size, in bytes, of the context buffer required for SHA-512 hash operations.
 
   @return  The size, in bytes, of the context buffer required for SHA-512 hash operations.
@@ -352,3 +398,49 @@ Sha512Final (
   //
   return (BOOLEAN) (SHA384_Final (HashValue, (SHA512_CTX *) Sha512Context));
 }
+
+/**
+  Computes the SHA-512 message digest of a input data buffer.
+
+  This function performs the SHA-512 message digest of a given data buffer, and places
+  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-512 digest
+                           value (64 bytes).
+
+  @retval TRUE   SHA-512 digest computation succeeded.
+  @retval FALSE  SHA-512 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha512HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  //
+  // Check input parameters.
+  //
+  if (HashValue == NULL) {
+    return FALSE;
+  }
+  if (Data == NULL && DataSize != 0) {
+    return FALSE;
+  }
+
+  //
+  // OpenSSL SHA-512 Hash Computation.
+  //
+  if (SHA512 (Data, DataSize, HashValue) == NULL) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512Null.c b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512Null.c
index 89aeacc..8cd754f 100644
--- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512Null.c
+++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512Null.c
@@ -1,7 +1,7 @@
 /** @file
   SHA-384 and SHA-512 Digest Wrapper Implementations which does not provide real capabilities.
 
-Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials
 are licensed and made available under the terms and conditions of the BSD License
 which accompanies this distribution.  The full text of the license may be found at
@@ -123,6 +123,31 @@ Sha384Final (
 }
 
 /**
+  Computes the SHA-384 message digest of a input data buffer.
+
+  Return FALSE to indicate this interface is not supported.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-384 digest
+                           value (48 bytes).
+
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha384HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  ASSERT (FALSE);
+  return FALSE;
+}
+
+/**
   Retrieves the size, in bytes, of the context buffer required for SHA-512 hash operations.
 
   Return zero to indicate this interface is not supported.
@@ -229,3 +254,28 @@ Sha512Final (
   ASSERT (FALSE);
   return FALSE;
 }
+
+/**
+  Computes the SHA-512 message digest of a input data buffer.
+
+  Return FALSE to indicate this interface is not supported.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-512 digest
+                           value (64 bytes).
+
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha512HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  ASSERT (FALSE);
+  return FALSE;
+}
-- 
2.10.1.windows.1



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Patch] CryptoPkg: Add xxxxHashAll APIs to facilitate the digest computation
  2016-10-31  8:28 [Patch] CryptoPkg: Add xxxxHashAll APIs to facilitate the digest computation Qin Long
@ 2016-11-01  1:31 ` Ye, Ting
  2016-11-01  2:23   ` Long, Qin
  0 siblings, 1 reply; 3+ messages in thread
From: Ye, Ting @ 2016-11-01  1:31 UTC (permalink / raw)
  To: Long, Qin, edk2-devel@lists.01.org

Hi Qin,

I have two questions for this patch:
1)  Both MD5_DIGEST_SIZE and MD4_DIGEST_SIZE are defined in BaseCryptLib.h, with same value 16 bytes. However, in HashVerify.c, we use MD5_DIGEST_SIZE directly for validating MD4  digest. 
      Do you think it might be better for code readability to use MD4_DIGEST_SIZE for MD4 digest?
2)  BaseCryptLibRuntimeCryptProtocol in CryptoPkg/Library also includes **Null.c for unsupported HASH interfaces. Do you think we need add xxxxHashAll APIs there?

Others are good to me.
Reviewed-by: Ye Ting <ting.ye@intel.com>

Best Regards,
Ye Ting


-----Original Message-----
From: Long, Qin 
Sent: Monday, October 31, 2016 4:29 PM
To: edk2-devel@lists.01.org
Cc: Ye, Ting <ting.ye@intel.com>
Subject: [Patch] CryptoPkg: Add xxxxHashAll APIs to facilitate the digest computation

Add new xxxxHashAll APIs to facilitate the digest computation of blob data. New APIs include: Md4HashAll(), Md5HashAll(), Sha1HashAll(), Sha256HashAll(), Sha384HashAll(), and Sha512HashAll().

The corresponding test cases were added in Cryptest utility.

Cc: Ting Ye <ting.ye@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Qin Long <qin.long@intel.com>
---
 CryptoPkg/Application/Cryptest/HashVerify.c        |  74 +++++++++-
 CryptoPkg/Include/Library/BaseCryptLib.h           | 158 ++++++++++++++++++++-
 CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c     |  48 ++++++-
 CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c |  27 +++-
 CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c     |  48 ++++++-
 CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c    |  48 ++++++-
 CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c  |  48 ++++++-  CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c  |  94 +++++++++++-
 .../Library/BaseCryptLib/Hash/CryptSha512Null.c    |  52 ++++++-
 9 files changed, 588 insertions(+), 9 deletions(-)

diff --git a/CryptoPkg/Application/Cryptest/HashVerify.c b/CryptoPkg/Application/Cryptest/HashVerify.c
index ca64361..345664b 100644
--- a/CryptoPkg/Application/Cryptest/HashVerify.c
+++ b/CryptoPkg/Application/Cryptest/HashVerify.c
@@ -1,7 +1,7 @@
 /** @file
   Application for Hash Primitives Validation.
 
-Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials  are licensed and made available under the terms and conditions of the BSD License  which accompanies this distribution.  The full text of the license may be found at @@ -132,6 +132,18 @@ ValidateCryptDigest (
     return EFI_ABORTED;
   }
 
+  Print (L"HashAll... ");
+  ZeroMem (Digest, MD5_DIGEST_SIZE);
+  Status  = Md4HashAll (HashData, DataSize, Digest);  if (!Status) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+  if (CompareMem (Digest, Md4Digest, MD5_DIGEST_SIZE) != 0) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+
   Print (L"[Pass]\n");
 
   Print (L"- MD5:    ");
@@ -172,6 +184,18 @@ ValidateCryptDigest (
     return EFI_ABORTED;
   }
 
+  Print (L"HashAll... ");
+  ZeroMem (Digest, MD5_DIGEST_SIZE);
+  Status  = Md5HashAll (HashData, DataSize, Digest);  if (!Status) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+  if (CompareMem (Digest, Md5Digest, MD5_DIGEST_SIZE) != 0) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+
   Print (L"[Pass]\n");
 
   Print (L"- SHA1:   ");
@@ -212,6 +236,18 @@ ValidateCryptDigest (
     return EFI_ABORTED;
   }
 
+  Print (L"HashAll... ");
+  ZeroMem (Digest, SHA1_DIGEST_SIZE);
+  Status  = Sha1HashAll (HashData, DataSize, Digest);  if (!Status) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+  if (CompareMem (Digest, Sha1Digest, SHA1_DIGEST_SIZE) != 0) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+
   Print (L"[Pass]\n");
 
   Print (L"- SHA256: ");
@@ -252,6 +288,18 @@ ValidateCryptDigest (
     return EFI_ABORTED;
   }
 
+  Print (L"HashAll... ");
+  ZeroMem (Digest, SHA256_DIGEST_SIZE);  Status  = Sha256HashAll 
+ (HashData, DataSize, Digest);  if (!Status) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+  if (CompareMem (Digest, Sha256Digest, SHA256_DIGEST_SIZE) != 0) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+
   Print (L"[Pass]\n");
 
   Print (L"- SHA384: ");
@@ -292,6 +340,18 @@ ValidateCryptDigest (
     return EFI_ABORTED;
   }
 
+  Print (L"HashAll... ");
+  ZeroMem (Digest, SHA384_DIGEST_SIZE);  Status  = Sha384HashAll 
+ (HashData, DataSize, Digest);  if (!Status) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+  if (CompareMem (Digest, Sha384Digest, SHA384_DIGEST_SIZE) != 0) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+
   Print (L"[Pass]\n");
 
   Print (L"- SHA512: ");
@@ -332,6 +392,18 @@ ValidateCryptDigest (
     return EFI_ABORTED;
   }
 
+  Print (L"HashAll... ");
+  ZeroMem (Digest, SHA512_DIGEST_SIZE);  Status  = Sha512HashAll 
+ (HashData, DataSize, Digest);  if (!Status) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+  if (CompareMem (Digest, Sha512Digest, SHA512_DIGEST_SIZE) != 0) {
+    Print (L"[Fail]");
+    return EFI_ABORTED;
+  }
+
   Print (L"[Pass]\n");
 
   return EFI_SUCCESS;
diff --git a/CryptoPkg/Include/Library/BaseCryptLib.h b/CryptoPkg/Include/Library/BaseCryptLib.h
index 0371d73..3463626 100644
--- a/CryptoPkg/Include/Library/BaseCryptLib.h
+++ b/CryptoPkg/Include/Library/BaseCryptLib.h
@@ -4,7 +4,7 @@
   primitives (Hash Serials, HMAC, RSA, Diffie-Hellman, etc) for UEFI security
   functionality enabling.
 
-Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials  are licensed and made available under the terms and conditions of the BSD License  which accompanies this distribution.  The full text of the license may be found at @@ -193,6 +193,32 @@ Md4Final (
   );
 
 /**
+  Computes the MD4 message digest of a input data buffer.
+
+  This function performs the MD4 message digest of a given data buffer, 
+ and places  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the MD4 digest
+                           value (16 bytes).
+
+  @retval TRUE   MD4 digest computation succeeded.
+  @retval FALSE  MD4 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Md4HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  );
+
+/**
   Retrieves the size, in bytes, of the context buffer required for MD5 hash operations.
 
   If this interface is not supported, then return zero.
@@ -307,6 +333,32 @@ Md5Final (
   );
 
 /**
+  Computes the MD5 message digest of a input data buffer.
+
+  This function performs the MD5 message digest of a given data buffer, 
+ and places  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the MD5 digest
+                           value (16 bytes).
+
+  @retval TRUE   MD5 digest computation succeeded.
+  @retval FALSE  MD5 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Md5HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  );
+
+/**
   Retrieves the size, in bytes, of the context buffer required for SHA-1 hash operations.
 
   If this interface is not supported, then return zero.
@@ -421,6 +473,32 @@ Sha1Final (
   );
 
 /**
+  Computes the SHA-1 message digest of a input data buffer.
+
+  This function performs the SHA-1 message digest of a given data 
+ buffer, and places  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-1 digest
+                           value (20 bytes).
+
+  @retval TRUE   SHA-1 digest computation succeeded.
+  @retval FALSE  SHA-1 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha1HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  );
+
+/**
   Retrieves the size, in bytes, of the context buffer required for SHA-256 hash operations.
 
   @return  The size, in bytes, of the context buffer required for SHA-256 hash operations.
@@ -526,6 +604,32 @@ Sha256Final (
   );
 
 /**
+  Computes the SHA-256 message digest of a input data buffer.
+
+  This function performs the SHA-256 message digest of a given data 
+ buffer, and places  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-256 digest
+                           value (32 bytes).
+
+  @retval TRUE   SHA-256 digest computation succeeded.
+  @retval FALSE  SHA-256 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha256HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  );
+
+/**
   Retrieves the size, in bytes, of the context buffer required for SHA-384 hash operations.
 
   @return  The size, in bytes, of the context buffer required for SHA-384 hash operations.
@@ -631,6 +735,32 @@ Sha384Final (
   );
 
 /**
+  Computes the SHA-384 message digest of a input data buffer.
+
+  This function performs the SHA-384 message digest of a given data 
+ buffer, and places  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-384 digest
+                           value (48 bytes).
+
+  @retval TRUE   SHA-384 digest computation succeeded.
+  @retval FALSE  SHA-384 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha384HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  );
+
+/**
   Retrieves the size, in bytes, of the context buffer required for SHA-512 hash operations.
 
   @return  The size, in bytes, of the context buffer required for SHA-512 hash operations.
@@ -735,6 +865,32 @@ Sha512Final (
   OUT     UINT8  *HashValue
   );
 
+/**
+  Computes the SHA-512 message digest of a input data buffer.
+
+  This function performs the SHA-512 message digest of a given data 
+ buffer, and places  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-512 digest
+                           value (64 bytes).
+
+  @retval TRUE   SHA-512 digest computation succeeded.
+  @retval FALSE  SHA-512 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha512HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  );
+
 //=====================================================================================
 //    MAC (Message Authentication Code) Primitive
 //=====================================================================================
diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c
index 633d343..d9cc445 100644
--- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c
+++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c
@@ -1,7 +1,7 @@
 /** @file
   MD4 Digest Wrapper Implementation over OpenSSL.
 
-Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials  are licensed and made available under the terms and conditions of the BSD License  which accompanies this distribution.  The full text of the license may be found at @@ -181,3 +181,49 @@ Md4Final (
   //
   return (BOOLEAN) (MD4_Final (HashValue, (MD4_CTX *) Md4Context));  }
+
+/**
+  Computes the MD4 message digest of a input data buffer.
+
+  This function performs the MD4 message digest of a given data buffer, 
+ and places  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the MD4 digest
+                           value (16 bytes).
+
+  @retval TRUE   MD4 digest computation succeeded.
+  @retval FALSE  MD4 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Md4HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  //
+  // Check input parameters.
+  //
+  if (HashValue == NULL) {
+    return FALSE;
+  }
+  if (Data == NULL && DataSize != 0) {
+    return FALSE;
+  }
+
+  //
+  // OpenSSL MD4 Hash Computation.
+  //
+  if (MD4 (Data, DataSize, HashValue) == NULL) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c
index fc634fd..01b3f23 100644
--- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c
+++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c
@@ -1,7 +1,7 @@
 /** @file
   MD4 Digest Wrapper Implementation which does not provide real capabilities.
 
-Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials  are licensed and made available under the terms and conditions of the BSD License  which accompanies this distribution.  The full text of the license may be found at @@ -122,3 +122,28 @@ Md4Final (
   ASSERT (FALSE);
   return FALSE;
 }
+
+/**
+  Computes the MD4 message digest of a input data buffer.
+
+  Return FALSE to indicate this interface is not supported.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the MD4 digest
+                           value (16 bytes).
+
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Md4HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  ASSERT (FALSE);
+  return FALSE;
+}
diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c
index e1c10e3..34eabe9 100644
--- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c
+++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c
@@ -1,7 +1,7 @@
 /** @file
   MD5 Digest Wrapper Implementation over OpenSSL.
 
-Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials  are licensed and made available under the terms and conditions of the BSD License  which accompanies this distribution.  The full text of the license may be found at @@ -183,3 +183,49 @@ Md5Final (
   //
   return (BOOLEAN) (MD5_Final (HashValue, (MD5_CTX *) Md5Context));  }
+
+/**
+  Computes the MD5 message digest of a input data buffer.
+
+  This function performs the MD5 message digest of a given data buffer, 
+ and places  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the MD5 digest
+                           value (16 bytes).
+
+  @retval TRUE   MD5 digest computation succeeded.
+  @retval FALSE  MD5 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Md5HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  //
+  // Check input parameters.
+  //
+  if (HashValue == NULL) {
+    return FALSE;
+  }
+  if (Data == NULL && (DataSize != 0)) {
+    return FALSE;
+  }
+
+  //
+  // OpenSSL MD5 Hash Computation.
+  //
+  if (MD5 (Data, DataSize, HashValue) == NULL) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c
index 78c29c1..b8a6d0c 100644
--- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c
+++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c
@@ -1,7 +1,7 @@
 /** @file
   SHA-1 Digest Wrapper Implementation over OpenSSL.
 
-Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials  are licensed and made available under the terms and conditions of the BSD License  which accompanies this distribution.  The full text of the license may be found at @@ -182,3 +182,49 @@ Sha1Final (
   //
   return (BOOLEAN) (SHA1_Final (HashValue, (SHA_CTX *) Sha1Context));  }
+
+/**
+  Computes the SHA-1 message digest of a input data buffer.
+
+  This function performs the SHA-1 message digest of a given data 
+ buffer, and places  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-1 digest
+                           value (20 bytes).
+
+  @retval TRUE   SHA-1 digest computation succeeded.
+  @retval FALSE  SHA-1 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha1HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  //
+  // Check input parameters.
+  //
+  if (HashValue == NULL) {
+    return FALSE;
+  }
+  if (Data == NULL && DataSize != 0) {
+    return FALSE;
+  }
+
+  //
+  // OpenSSL SHA-1 Hash Computation.
+  //
+  if (SHA1 (Data, DataSize, HashValue) == NULL) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c
index 56894ac..aaf689b 100644
--- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c
+++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c
@@ -1,7 +1,7 @@
 /** @file
   SHA-256 Digest Wrapper Implementation over OpenSSL.
 
-Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials  are licensed and made available under the terms and conditions of the BSD License  which accompanies this distribution.  The full text of the license may be found at @@ -181,3 +181,49 @@ Sha256Final (
   //
   return (BOOLEAN) (SHA256_Final (HashValue, (SHA256_CTX *) Sha256Context));  }
+
+/**
+  Computes the SHA-256 message digest of a input data buffer.
+
+  This function performs the SHA-256 message digest of a given data 
+ buffer, and places  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-256 digest
+                           value (32 bytes).
+
+  @retval TRUE   SHA-256 digest computation succeeded.
+  @retval FALSE  SHA-256 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha256HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  //
+  // Check input parameters.
+  //
+  if (HashValue == NULL) {
+    return FALSE;
+  }
+  if (Data == NULL && DataSize != 0) {
+    return FALSE;
+  }
+
+  //
+  // OpenSSL SHA-256 Hash Computation.
+  //
+  if (SHA256 (Data, DataSize, HashValue) == NULL) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c
index 491f45d..457151e 100644
--- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c
+++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c
@@ -1,7 +1,7 @@
 /** @file
   SHA-384 and SHA-512 Digest Wrapper Implementations over OpenSSL.
 
-Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials  are licensed and made available under the terms and conditions of the BSD License  which accompanies this distribution.  The full text of the license may be found at @@ -185,6 +185,52 @@ Sha384Final (  }
 
 /**
+  Computes the SHA-384 message digest of a input data buffer.
+
+  This function performs the SHA-384 message digest of a given data 
+ buffer, and places  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-384 digest
+                           value (48 bytes).
+
+  @retval TRUE   SHA-384 digest computation succeeded.
+  @retval FALSE  SHA-384 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha384HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  //
+  // Check input parameters.
+  //
+  if (HashValue == NULL) {
+    return FALSE;
+  }
+  if (Data == NULL && DataSize != 0) {
+    return FALSE;
+  }
+
+  //
+  // OpenSSL SHA-384 Hash Computation.
+  //
+  if (SHA384 (Data, DataSize, HashValue) == NULL) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
+
+/**
   Retrieves the size, in bytes, of the context buffer required for SHA-512 hash operations.
 
   @return  The size, in bytes, of the context buffer required for SHA-512 hash operations.
@@ -352,3 +398,49 @@ Sha512Final (
   //
   return (BOOLEAN) (SHA384_Final (HashValue, (SHA512_CTX *) Sha512Context));  }
+
+/**
+  Computes the SHA-512 message digest of a input data buffer.
+
+  This function performs the SHA-512 message digest of a given data 
+ buffer, and places  the digest value into the specified memory.
+
+  If this interface is not supported, then return FALSE.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-512 digest
+                           value (64 bytes).
+
+  @retval TRUE   SHA-512 digest computation succeeded.
+  @retval FALSE  SHA-512 digest computation failed.
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha512HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  //
+  // Check input parameters.
+  //
+  if (HashValue == NULL) {
+    return FALSE;
+  }
+  if (Data == NULL && DataSize != 0) {
+    return FALSE;
+  }
+
+  //
+  // OpenSSL SHA-512 Hash Computation.
+  //
+  if (SHA512 (Data, DataSize, HashValue) == NULL) {
+    return FALSE;
+  } else {
+    return TRUE;
+  }
+}
diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512Null.c b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512Null.c
index 89aeacc..8cd754f 100644
--- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512Null.c
+++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512Null.c
@@ -1,7 +1,7 @@
 /** @file
   SHA-384 and SHA-512 Digest Wrapper Implementations which does not provide real capabilities.
 
-Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials  are licensed and made available under the terms and conditions of the BSD License  which accompanies this distribution.  The full text of the license may be found at @@ -123,6 +123,31 @@ Sha384Final (  }
 
 /**
+  Computes the SHA-384 message digest of a input data buffer.
+
+  Return FALSE to indicate this interface is not supported.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-384 digest
+                           value (48 bytes).
+
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha384HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  ASSERT (FALSE);
+  return FALSE;
+}
+
+/**
   Retrieves the size, in bytes, of the context buffer required for SHA-512 hash operations.
 
   Return zero to indicate this interface is not supported.
@@ -229,3 +254,28 @@ Sha512Final (
   ASSERT (FALSE);
   return FALSE;
 }
+
+/**
+  Computes the SHA-512 message digest of a input data buffer.
+
+  Return FALSE to indicate this interface is not supported.
+
+  @param[in]   Data        Pointer to the buffer containing the data to be hashed.
+  @param[in]   DataSize    Size of Data buffer in bytes.
+  @param[out]  HashValue   Pointer to a buffer that receives the SHA-512 digest
+                           value (64 bytes).
+
+  @retval FALSE  This interface is not supported.
+
+**/
+BOOLEAN
+EFIAPI
+Sha512HashAll (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  )
+{
+  ASSERT (FALSE);
+  return FALSE;
+}
--
2.10.1.windows.1



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Patch] CryptoPkg: Add xxxxHashAll APIs to facilitate the digest computation
  2016-11-01  1:31 ` Ye, Ting
@ 2016-11-01  2:23   ` Long, Qin
  0 siblings, 0 replies; 3+ messages in thread
From: Long, Qin @ 2016-11-01  2:23 UTC (permalink / raw)
  To: Ye, Ting, edk2-devel@lists.01.org

Yes, it's better to update to use MD4_DIGEST_SIZE, instead of MD5_DIGEST_SIZE there.
For #2, it was specifically designed for IPF platform before, I may clean-up them in future. So will just keep as-is now.
Will send the V2 for updates. 


Best Regards & Thanks,
LONG, Qin

> -----Original Message-----
> From: Ye, Ting
> Sent: Tuesday, November 1, 2016 9:31 AM
> To: Long, Qin <qin.long@intel.com>; edk2-devel@lists.01.org
> Subject: RE: [Patch] CryptoPkg: Add xxxxHashAll APIs to facilitate the digest
> computation
> 
> Hi Qin,
> 
> I have two questions for this patch:
> 1)  Both MD5_DIGEST_SIZE and MD4_DIGEST_SIZE are defined in
> BaseCryptLib.h, with same value 16 bytes. However, in HashVerify.c, we use
> MD5_DIGEST_SIZE directly for validating MD4  digest.
>       Do you think it might be better for code readability to use
> MD4_DIGEST_SIZE for MD4 digest?
> 2)  BaseCryptLibRuntimeCryptProtocol in CryptoPkg/Library also includes
> **Null.c for unsupported HASH interfaces. Do you think we need add
> xxxxHashAll APIs there?
> 
> Others are good to me.
> Reviewed-by: Ye Ting <ting.ye@intel.com>
> 
> Best Regards,
> Ye Ting
> 
> 
> -----Original Message-----
> From: Long, Qin
> Sent: Monday, October 31, 2016 4:29 PM
> To: edk2-devel@lists.01.org
> Cc: Ye, Ting <ting.ye@intel.com>
> Subject: [Patch] CryptoPkg: Add xxxxHashAll APIs to facilitate the digest
> computation
> 
> Add new xxxxHashAll APIs to facilitate the digest computation of blob data.
> New APIs include: Md4HashAll(), Md5HashAll(), Sha1HashAll(),
> Sha256HashAll(), Sha384HashAll(), and Sha512HashAll().
> 
> The corresponding test cases were added in Cryptest utility.
> 
> Cc: Ting Ye <ting.ye@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Qin Long <qin.long@intel.com>
> ---
>  CryptoPkg/Application/Cryptest/HashVerify.c        |  74 +++++++++-
>  CryptoPkg/Include/Library/BaseCryptLib.h           | 158
> ++++++++++++++++++++-
>  CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c     |  48 ++++++-
>  CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c |  27 +++-
>  CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c     |  48 ++++++-
>  CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c    |  48 ++++++-
>  CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c  |  48 ++++++-
> CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c  |  94 +++++++++++-
>  .../Library/BaseCryptLib/Hash/CryptSha512Null.c    |  52 ++++++-
>  9 files changed, 588 insertions(+), 9 deletions(-)
> 
> diff --git a/CryptoPkg/Application/Cryptest/HashVerify.c
> b/CryptoPkg/Application/Cryptest/HashVerify.c
> index ca64361..345664b 100644
> --- a/CryptoPkg/Application/Cryptest/HashVerify.c
> +++ b/CryptoPkg/Application/Cryptest/HashVerify.c
> @@ -1,7 +1,7 @@
>  /** @file
>    Application for Hash Primitives Validation.
> 
> -Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
>  This program and the accompanying materials  are licensed and made
> available under the terms and conditions of the BSD License  which
> accompanies this distribution.  The full text of the license may be found at
> @@ -132,6 +132,18 @@ ValidateCryptDigest (
>      return EFI_ABORTED;
>    }
> 
> +  Print (L"HashAll... ");
> +  ZeroMem (Digest, MD5_DIGEST_SIZE);
> +  Status  = Md4HashAll (HashData, DataSize, Digest);  if (!Status) {
> +    Print (L"[Fail]");
> +    return EFI_ABORTED;
> +  }
> +  if (CompareMem (Digest, Md4Digest, MD5_DIGEST_SIZE) != 0) {
> +    Print (L"[Fail]");
> +    return EFI_ABORTED;
> +  }
> +
>    Print (L"[Pass]\n");
> 
>    Print (L"- MD5:    ");
> @@ -172,6 +184,18 @@ ValidateCryptDigest (
>      return EFI_ABORTED;
>    }
> 
> +  Print (L"HashAll... ");
> +  ZeroMem (Digest, MD5_DIGEST_SIZE);
> +  Status  = Md5HashAll (HashData, DataSize, Digest);  if (!Status) {
> +    Print (L"[Fail]");
> +    return EFI_ABORTED;
> +  }
> +  if (CompareMem (Digest, Md5Digest, MD5_DIGEST_SIZE) != 0) {
> +    Print (L"[Fail]");
> +    return EFI_ABORTED;
> +  }
> +
>    Print (L"[Pass]\n");
> 
>    Print (L"- SHA1:   ");
> @@ -212,6 +236,18 @@ ValidateCryptDigest (
>      return EFI_ABORTED;
>    }
> 
> +  Print (L"HashAll... ");
> +  ZeroMem (Digest, SHA1_DIGEST_SIZE);
> +  Status  = Sha1HashAll (HashData, DataSize, Digest);  if (!Status) {
> +    Print (L"[Fail]");
> +    return EFI_ABORTED;
> +  }
> +  if (CompareMem (Digest, Sha1Digest, SHA1_DIGEST_SIZE) != 0) {
> +    Print (L"[Fail]");
> +    return EFI_ABORTED;
> +  }
> +
>    Print (L"[Pass]\n");
> 
>    Print (L"- SHA256: ");
> @@ -252,6 +288,18 @@ ValidateCryptDigest (
>      return EFI_ABORTED;
>    }
> 
> +  Print (L"HashAll... ");
> +  ZeroMem (Digest, SHA256_DIGEST_SIZE);  Status  = Sha256HashAll
> + (HashData, DataSize, Digest);  if (!Status) {
> +    Print (L"[Fail]");
> +    return EFI_ABORTED;
> +  }
> +  if (CompareMem (Digest, Sha256Digest, SHA256_DIGEST_SIZE) != 0) {
> +    Print (L"[Fail]");
> +    return EFI_ABORTED;
> +  }
> +
>    Print (L"[Pass]\n");
> 
>    Print (L"- SHA384: ");
> @@ -292,6 +340,18 @@ ValidateCryptDigest (
>      return EFI_ABORTED;
>    }
> 
> +  Print (L"HashAll... ");
> +  ZeroMem (Digest, SHA384_DIGEST_SIZE);  Status  = Sha384HashAll
> + (HashData, DataSize, Digest);  if (!Status) {
> +    Print (L"[Fail]");
> +    return EFI_ABORTED;
> +  }
> +  if (CompareMem (Digest, Sha384Digest, SHA384_DIGEST_SIZE) != 0) {
> +    Print (L"[Fail]");
> +    return EFI_ABORTED;
> +  }
> +
>    Print (L"[Pass]\n");
> 
>    Print (L"- SHA512: ");
> @@ -332,6 +392,18 @@ ValidateCryptDigest (
>      return EFI_ABORTED;
>    }
> 
> +  Print (L"HashAll... ");
> +  ZeroMem (Digest, SHA512_DIGEST_SIZE);  Status  = Sha512HashAll
> + (HashData, DataSize, Digest);  if (!Status) {
> +    Print (L"[Fail]");
> +    return EFI_ABORTED;
> +  }
> +  if (CompareMem (Digest, Sha512Digest, SHA512_DIGEST_SIZE) != 0) {
> +    Print (L"[Fail]");
> +    return EFI_ABORTED;
> +  }
> +
>    Print (L"[Pass]\n");
> 
>    return EFI_SUCCESS;
> diff --git a/CryptoPkg/Include/Library/BaseCryptLib.h
> b/CryptoPkg/Include/Library/BaseCryptLib.h
> index 0371d73..3463626 100644
> --- a/CryptoPkg/Include/Library/BaseCryptLib.h
> +++ b/CryptoPkg/Include/Library/BaseCryptLib.h
> @@ -4,7 +4,7 @@
>    primitives (Hash Serials, HMAC, RSA, Diffie-Hellman, etc) for UEFI security
>    functionality enabling.
> 
> -Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
>  This program and the accompanying materials  are licensed and made
> available under the terms and conditions of the BSD License  which
> accompanies this distribution.  The full text of the license may be found at
> @@ -193,6 +193,32 @@ Md4Final (
>    );
> 
>  /**
> +  Computes the MD4 message digest of a input data buffer.
> +
> +  This function performs the MD4 message digest of a given data buffer,
> + and places  the digest value into the specified memory.
> +
> +  If this interface is not supported, then return FALSE.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the MD4 digest
> +                           value (16 bytes).
> +
> +  @retval TRUE   MD4 digest computation succeeded.
> +  @retval FALSE  MD4 digest computation failed.
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Md4HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  );
> +
> +/**
>    Retrieves the size, in bytes, of the context buffer required for MD5 hash
> operations.
> 
>    If this interface is not supported, then return zero.
> @@ -307,6 +333,32 @@ Md5Final (
>    );
> 
>  /**
> +  Computes the MD5 message digest of a input data buffer.
> +
> +  This function performs the MD5 message digest of a given data buffer,
> + and places  the digest value into the specified memory.
> +
> +  If this interface is not supported, then return FALSE.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the MD5 digest
> +                           value (16 bytes).
> +
> +  @retval TRUE   MD5 digest computation succeeded.
> +  @retval FALSE  MD5 digest computation failed.
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Md5HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  );
> +
> +/**
>    Retrieves the size, in bytes, of the context buffer required for SHA-1 hash
> operations.
> 
>    If this interface is not supported, then return zero.
> @@ -421,6 +473,32 @@ Sha1Final (
>    );
> 
>  /**
> +  Computes the SHA-1 message digest of a input data buffer.
> +
> +  This function performs the SHA-1 message digest of a given data
> + buffer, and places  the digest value into the specified memory.
> +
> +  If this interface is not supported, then return FALSE.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the SHA-1
> digest
> +                           value (20 bytes).
> +
> +  @retval TRUE   SHA-1 digest computation succeeded.
> +  @retval FALSE  SHA-1 digest computation failed.
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Sha1HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  );
> +
> +/**
>    Retrieves the size, in bytes, of the context buffer required for SHA-256
> hash operations.
> 
>    @return  The size, in bytes, of the context buffer required for SHA-256 hash
> operations.
> @@ -526,6 +604,32 @@ Sha256Final (
>    );
> 
>  /**
> +  Computes the SHA-256 message digest of a input data buffer.
> +
> +  This function performs the SHA-256 message digest of a given data
> + buffer, and places  the digest value into the specified memory.
> +
> +  If this interface is not supported, then return FALSE.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the SHA-256
> digest
> +                           value (32 bytes).
> +
> +  @retval TRUE   SHA-256 digest computation succeeded.
> +  @retval FALSE  SHA-256 digest computation failed.
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Sha256HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  );
> +
> +/**
>    Retrieves the size, in bytes, of the context buffer required for SHA-384
> hash operations.
> 
>    @return  The size, in bytes, of the context buffer required for SHA-384 hash
> operations.
> @@ -631,6 +735,32 @@ Sha384Final (
>    );
> 
>  /**
> +  Computes the SHA-384 message digest of a input data buffer.
> +
> +  This function performs the SHA-384 message digest of a given data
> + buffer, and places  the digest value into the specified memory.
> +
> +  If this interface is not supported, then return FALSE.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the SHA-384
> digest
> +                           value (48 bytes).
> +
> +  @retval TRUE   SHA-384 digest computation succeeded.
> +  @retval FALSE  SHA-384 digest computation failed.
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Sha384HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  );
> +
> +/**
>    Retrieves the size, in bytes, of the context buffer required for SHA-512
> hash operations.
> 
>    @return  The size, in bytes, of the context buffer required for SHA-512 hash
> operations.
> @@ -735,6 +865,32 @@ Sha512Final (
>    OUT     UINT8  *HashValue
>    );
> 
> +/**
> +  Computes the SHA-512 message digest of a input data buffer.
> +
> +  This function performs the SHA-512 message digest of a given data
> + buffer, and places  the digest value into the specified memory.
> +
> +  If this interface is not supported, then return FALSE.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the SHA-512
> digest
> +                           value (64 bytes).
> +
> +  @retval TRUE   SHA-512 digest computation succeeded.
> +  @retval FALSE  SHA-512 digest computation failed.
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Sha512HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  );
> +
> 
> //=========================================================
> ============================
>  //    MAC (Message Authentication Code) Primitive
> 
> //=========================================================
> ============================
> diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c
> b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c
> index 633d343..d9cc445 100644
> --- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c
> +++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c
> @@ -1,7 +1,7 @@
>  /** @file
>    MD4 Digest Wrapper Implementation over OpenSSL.
> 
> -Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
>  This program and the accompanying materials  are licensed and made
> available under the terms and conditions of the BSD License  which
> accompanies this distribution.  The full text of the license may be found at
> @@ -181,3 +181,49 @@ Md4Final (
>    //
>    return (BOOLEAN) (MD4_Final (HashValue, (MD4_CTX *) Md4Context));  }
> +
> +/**
> +  Computes the MD4 message digest of a input data buffer.
> +
> +  This function performs the MD4 message digest of a given data buffer,
> + and places  the digest value into the specified memory.
> +
> +  If this interface is not supported, then return FALSE.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the MD4 digest
> +                           value (16 bytes).
> +
> +  @retval TRUE   MD4 digest computation succeeded.
> +  @retval FALSE  MD4 digest computation failed.
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Md4HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  )
> +{
> +  //
> +  // Check input parameters.
> +  //
> +  if (HashValue == NULL) {
> +    return FALSE;
> +  }
> +  if (Data == NULL && DataSize != 0) {
> +    return FALSE;
> +  }
> +
> +  //
> +  // OpenSSL MD4 Hash Computation.
> +  //
> +  if (MD4 (Data, DataSize, HashValue) == NULL) {
> +    return FALSE;
> +  } else {
> +    return TRUE;
> +  }
> +}
> diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c
> b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c
> index fc634fd..01b3f23 100644
> --- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c
> +++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4Null.c
> @@ -1,7 +1,7 @@
>  /** @file
>    MD4 Digest Wrapper Implementation which does not provide real
> capabilities.
> 
> -Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>
>  This program and the accompanying materials  are licensed and made
> available under the terms and conditions of the BSD License  which
> accompanies this distribution.  The full text of the license may be found at
> @@ -122,3 +122,28 @@ Md4Final (
>    ASSERT (FALSE);
>    return FALSE;
>  }
> +
> +/**
> +  Computes the MD4 message digest of a input data buffer.
> +
> +  Return FALSE to indicate this interface is not supported.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the MD4 digest
> +                           value (16 bytes).
> +
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Md4HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  )
> +{
> +  ASSERT (FALSE);
> +  return FALSE;
> +}
> diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c
> b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c
> index e1c10e3..34eabe9 100644
> --- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c
> +++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd5.c
> @@ -1,7 +1,7 @@
>  /** @file
>    MD5 Digest Wrapper Implementation over OpenSSL.
> 
> -Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
>  This program and the accompanying materials  are licensed and made
> available under the terms and conditions of the BSD License  which
> accompanies this distribution.  The full text of the license may be found at
> @@ -183,3 +183,49 @@ Md5Final (
>    //
>    return (BOOLEAN) (MD5_Final (HashValue, (MD5_CTX *) Md5Context));  }
> +
> +/**
> +  Computes the MD5 message digest of a input data buffer.
> +
> +  This function performs the MD5 message digest of a given data buffer,
> + and places  the digest value into the specified memory.
> +
> +  If this interface is not supported, then return FALSE.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the MD5 digest
> +                           value (16 bytes).
> +
> +  @retval TRUE   MD5 digest computation succeeded.
> +  @retval FALSE  MD5 digest computation failed.
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Md5HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  )
> +{
> +  //
> +  // Check input parameters.
> +  //
> +  if (HashValue == NULL) {
> +    return FALSE;
> +  }
> +  if (Data == NULL && (DataSize != 0)) {
> +    return FALSE;
> +  }
> +
> +  //
> +  // OpenSSL MD5 Hash Computation.
> +  //
> +  if (MD5 (Data, DataSize, HashValue) == NULL) {
> +    return FALSE;
> +  } else {
> +    return TRUE;
> +  }
> +}
> diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c
> b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c
> index 78c29c1..b8a6d0c 100644
> --- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c
> +++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c
> @@ -1,7 +1,7 @@
>  /** @file
>    SHA-1 Digest Wrapper Implementation over OpenSSL.
> 
> -Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
>  This program and the accompanying materials  are licensed and made
> available under the terms and conditions of the BSD License  which
> accompanies this distribution.  The full text of the license may be found at
> @@ -182,3 +182,49 @@ Sha1Final (
>    //
>    return (BOOLEAN) (SHA1_Final (HashValue, (SHA_CTX *) Sha1Context));  }
> +
> +/**
> +  Computes the SHA-1 message digest of a input data buffer.
> +
> +  This function performs the SHA-1 message digest of a given data
> + buffer, and places  the digest value into the specified memory.
> +
> +  If this interface is not supported, then return FALSE.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the SHA-1
> digest
> +                           value (20 bytes).
> +
> +  @retval TRUE   SHA-1 digest computation succeeded.
> +  @retval FALSE  SHA-1 digest computation failed.
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Sha1HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  )
> +{
> +  //
> +  // Check input parameters.
> +  //
> +  if (HashValue == NULL) {
> +    return FALSE;
> +  }
> +  if (Data == NULL && DataSize != 0) {
> +    return FALSE;
> +  }
> +
> +  //
> +  // OpenSSL SHA-1 Hash Computation.
> +  //
> +  if (SHA1 (Data, DataSize, HashValue) == NULL) {
> +    return FALSE;
> +  } else {
> +    return TRUE;
> +  }
> +}
> diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c
> b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c
> index 56894ac..aaf689b 100644
> --- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c
> +++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha256.c
> @@ -1,7 +1,7 @@
>  /** @file
>    SHA-256 Digest Wrapper Implementation over OpenSSL.
> 
> -Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
>  This program and the accompanying materials  are licensed and made
> available under the terms and conditions of the BSD License  which
> accompanies this distribution.  The full text of the license may be found at
> @@ -181,3 +181,49 @@ Sha256Final (
>    //
>    return (BOOLEAN) (SHA256_Final (HashValue, (SHA256_CTX *)
> Sha256Context));  }
> +
> +/**
> +  Computes the SHA-256 message digest of a input data buffer.
> +
> +  This function performs the SHA-256 message digest of a given data
> + buffer, and places  the digest value into the specified memory.
> +
> +  If this interface is not supported, then return FALSE.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the SHA-256
> digest
> +                           value (32 bytes).
> +
> +  @retval TRUE   SHA-256 digest computation succeeded.
> +  @retval FALSE  SHA-256 digest computation failed.
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Sha256HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  )
> +{
> +  //
> +  // Check input parameters.
> +  //
> +  if (HashValue == NULL) {
> +    return FALSE;
> +  }
> +  if (Data == NULL && DataSize != 0) {
> +    return FALSE;
> +  }
> +
> +  //
> +  // OpenSSL SHA-256 Hash Computation.
> +  //
> +  if (SHA256 (Data, DataSize, HashValue) == NULL) {
> +    return FALSE;
> +  } else {
> +    return TRUE;
> +  }
> +}
> diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c
> b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c
> index 491f45d..457151e 100644
> --- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c
> +++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512.c
> @@ -1,7 +1,7 @@
>  /** @file
>    SHA-384 and SHA-512 Digest Wrapper Implementations over OpenSSL.
> 
> -Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>
>  This program and the accompanying materials  are licensed and made
> available under the terms and conditions of the BSD License  which
> accompanies this distribution.  The full text of the license may be found at
> @@ -185,6 +185,52 @@ Sha384Final (  }
> 
>  /**
> +  Computes the SHA-384 message digest of a input data buffer.
> +
> +  This function performs the SHA-384 message digest of a given data
> + buffer, and places  the digest value into the specified memory.
> +
> +  If this interface is not supported, then return FALSE.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the SHA-384
> digest
> +                           value (48 bytes).
> +
> +  @retval TRUE   SHA-384 digest computation succeeded.
> +  @retval FALSE  SHA-384 digest computation failed.
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Sha384HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  )
> +{
> +  //
> +  // Check input parameters.
> +  //
> +  if (HashValue == NULL) {
> +    return FALSE;
> +  }
> +  if (Data == NULL && DataSize != 0) {
> +    return FALSE;
> +  }
> +
> +  //
> +  // OpenSSL SHA-384 Hash Computation.
> +  //
> +  if (SHA384 (Data, DataSize, HashValue) == NULL) {
> +    return FALSE;
> +  } else {
> +    return TRUE;
> +  }
> +}
> +
> +/**
>    Retrieves the size, in bytes, of the context buffer required for SHA-512
> hash operations.
> 
>    @return  The size, in bytes, of the context buffer required for SHA-512 hash
> operations.
> @@ -352,3 +398,49 @@ Sha512Final (
>    //
>    return (BOOLEAN) (SHA384_Final (HashValue, (SHA512_CTX *)
> Sha512Context));  }
> +
> +/**
> +  Computes the SHA-512 message digest of a input data buffer.
> +
> +  This function performs the SHA-512 message digest of a given data
> + buffer, and places  the digest value into the specified memory.
> +
> +  If this interface is not supported, then return FALSE.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the SHA-512
> digest
> +                           value (64 bytes).
> +
> +  @retval TRUE   SHA-512 digest computation succeeded.
> +  @retval FALSE  SHA-512 digest computation failed.
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Sha512HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  )
> +{
> +  //
> +  // Check input parameters.
> +  //
> +  if (HashValue == NULL) {
> +    return FALSE;
> +  }
> +  if (Data == NULL && DataSize != 0) {
> +    return FALSE;
> +  }
> +
> +  //
> +  // OpenSSL SHA-512 Hash Computation.
> +  //
> +  if (SHA512 (Data, DataSize, HashValue) == NULL) {
> +    return FALSE;
> +  } else {
> +    return TRUE;
> +  }
> +}
> diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512Null.c
> b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512Null.c
> index 89aeacc..8cd754f 100644
> --- a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512Null.c
> +++ b/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512Null.c
> @@ -1,7 +1,7 @@
>  /** @file
>    SHA-384 and SHA-512 Digest Wrapper Implementations which does not
> provide real capabilities.
> 
> -Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>
>  This program and the accompanying materials  are licensed and made
> available under the terms and conditions of the BSD License  which
> accompanies this distribution.  The full text of the license may be found at
> @@ -123,6 +123,31 @@ Sha384Final (  }
> 
>  /**
> +  Computes the SHA-384 message digest of a input data buffer.
> +
> +  Return FALSE to indicate this interface is not supported.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the SHA-384
> digest
> +                           value (48 bytes).
> +
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Sha384HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  )
> +{
> +  ASSERT (FALSE);
> +  return FALSE;
> +}
> +
> +/**
>    Retrieves the size, in bytes, of the context buffer required for SHA-512
> hash operations.
> 
>    Return zero to indicate this interface is not supported.
> @@ -229,3 +254,28 @@ Sha512Final (
>    ASSERT (FALSE);
>    return FALSE;
>  }
> +
> +/**
> +  Computes the SHA-512 message digest of a input data buffer.
> +
> +  Return FALSE to indicate this interface is not supported.
> +
> +  @param[in]   Data        Pointer to the buffer containing the data to be
> hashed.
> +  @param[in]   DataSize    Size of Data buffer in bytes.
> +  @param[out]  HashValue   Pointer to a buffer that receives the SHA-512
> digest
> +                           value (64 bytes).
> +
> +  @retval FALSE  This interface is not supported.
> +
> +**/
> +BOOLEAN
> +EFIAPI
> +Sha512HashAll (
> +  IN   CONST VOID  *Data,
> +  IN   UINTN       DataSize,
> +  OUT  UINT8       *HashValue
> +  )
> +{
> +  ASSERT (FALSE);
> +  return FALSE;
> +}
> --
> 2.10.1.windows.1



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-11-01  2:23 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-31  8:28 [Patch] CryptoPkg: Add xxxxHashAll APIs to facilitate the digest computation Qin Long
2016-11-01  1:31 ` Ye, Ting
2016-11-01  2:23   ` Long, Qin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox