From: "Long, Qin" <qin.long@intel.com>
To: "Ye, Ting" <ting.ye@intel.com>,
"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: [Patch] CryptoPkg: Add xxxxHashAll APIs to facilitate the digest computation
Date: Tue, 1 Nov 2016 02:23:29 +0000 [thread overview]
Message-ID: <BF2CCE9263284D428840004653A28B6E51552602@SHSMSX103.ccr.corp.intel.com> (raw)
In-Reply-To: <BC0C045B0E2A584CA4575E779FA2C12A17E92FD0@SHSMSX103.ccr.corp.intel.com>
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
prev parent reply other threads:[~2016-11-01 2:23 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
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 message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=BF2CCE9263284D428840004653A28B6E51552602@SHSMSX103.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox