From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1 with cipher CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 1D70881D27 for ; Mon, 31 Oct 2016 18:31:21 -0700 (PDT) Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga103.fm.intel.com with ESMTP; 31 Oct 2016 18:31:22 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,577,1473145200"; d="scan'208";a="25973825" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga005.jf.intel.com with ESMTP; 31 Oct 2016 18:31:21 -0700 Received: from fmsmsx101.amr.corp.intel.com (10.18.124.199) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 31 Oct 2016 18:31:21 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx101.amr.corp.intel.com (10.18.124.199) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 31 Oct 2016 18:31:20 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.139]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.104]) with mapi id 14.03.0248.002; Tue, 1 Nov 2016 09:31:18 +0800 From: "Ye, Ting" To: "Long, Qin" , "edk2-devel@lists.01.org" Thread-Topic: [Patch] CryptoPkg: Add xxxxHashAll APIs to facilitate the digest computation Thread-Index: AQHSM1DY7qErqZedj0qcS9Ze111MXqDDVTug Date: Tue, 1 Nov 2016 01:31:18 +0000 Message-ID: References: <20161031082845.9180-1-qin.long@intel.com> In-Reply-To: <20161031082845.9180-1-qin.long@intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch] CryptoPkg: Add xxxxHashAll APIs to facilitate the digest computation X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Nov 2016 01:31:21 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable 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.=20 Do you think it might be better for code readability to use MD4_DIGES= T_SIZE for MD4 digest? 2) BaseCryptLibRuntimeCryptProtocol in CryptoPkg/Library also includes **N= ull.c for unsupported HASH interfaces. Do you think we need add xxxxHashAll= APIs there? Others are good to me. Reviewed-by: Ye Ting Best Regards, Ye Ting -----Original Message----- From: Long, Qin=20 Sent: Monday, October 31, 2016 4:29 PM To: edk2-devel@lists.01.org Cc: Ye, Ting Subject: [Patch] CryptoPkg: Add xxxxHashAll APIs to facilitate the digest c= omputation 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 Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Qin Long --- 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 ++++++- CryptoPk= g/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/Applic= ation/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. =20 -Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.
+Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made availab= le under the terms and conditions of the BSD License which accompanies thi= s distribution. The full text of the license may be found at @@ -132,6 +13= 2,18 @@ ValidateCryptDigest ( return EFI_ABORTED; } =20 + Print (L"HashAll... "); + ZeroMem (Digest, MD5_DIGEST_SIZE); + Status =3D Md4HashAll (HashData, DataSize, Digest); if (!Status) { + Print (L"[Fail]"); + return EFI_ABORTED; + } + if (CompareMem (Digest, Md4Digest, MD5_DIGEST_SIZE) !=3D 0) { + Print (L"[Fail]"); + return EFI_ABORTED; + } + Print (L"[Pass]\n"); =20 Print (L"- MD5: "); @@ -172,6 +184,18 @@ ValidateCryptDigest ( return EFI_ABORTED; } =20 + Print (L"HashAll... "); + ZeroMem (Digest, MD5_DIGEST_SIZE); + Status =3D Md5HashAll (HashData, DataSize, Digest); if (!Status) { + Print (L"[Fail]"); + return EFI_ABORTED; + } + if (CompareMem (Digest, Md5Digest, MD5_DIGEST_SIZE) !=3D 0) { + Print (L"[Fail]"); + return EFI_ABORTED; + } + Print (L"[Pass]\n"); =20 Print (L"- SHA1: "); @@ -212,6 +236,18 @@ ValidateCryptDigest ( return EFI_ABORTED; } =20 + Print (L"HashAll... "); + ZeroMem (Digest, SHA1_DIGEST_SIZE); + Status =3D Sha1HashAll (HashData, DataSize, Digest); if (!Status) { + Print (L"[Fail]"); + return EFI_ABORTED; + } + if (CompareMem (Digest, Sha1Digest, SHA1_DIGEST_SIZE) !=3D 0) { + Print (L"[Fail]"); + return EFI_ABORTED; + } + Print (L"[Pass]\n"); =20 Print (L"- SHA256: "); @@ -252,6 +288,18 @@ ValidateCryptDigest ( return EFI_ABORTED; } =20 + Print (L"HashAll... "); + ZeroMem (Digest, SHA256_DIGEST_SIZE); Status =3D Sha256HashAll=20 + (HashData, DataSize, Digest); if (!Status) { + Print (L"[Fail]"); + return EFI_ABORTED; + } + if (CompareMem (Digest, Sha256Digest, SHA256_DIGEST_SIZE) !=3D 0) { + Print (L"[Fail]"); + return EFI_ABORTED; + } + Print (L"[Pass]\n"); =20 Print (L"- SHA384: "); @@ -292,6 +340,18 @@ ValidateCryptDigest ( return EFI_ABORTED; } =20 + Print (L"HashAll... "); + ZeroMem (Digest, SHA384_DIGEST_SIZE); Status =3D Sha384HashAll=20 + (HashData, DataSize, Digest); if (!Status) { + Print (L"[Fail]"); + return EFI_ABORTED; + } + if (CompareMem (Digest, Sha384Digest, SHA384_DIGEST_SIZE) !=3D 0) { + Print (L"[Fail]"); + return EFI_ABORTED; + } + Print (L"[Pass]\n"); =20 Print (L"- SHA512: "); @@ -332,6 +392,18 @@ ValidateCryptDigest ( return EFI_ABORTED; } =20 + Print (L"HashAll... "); + ZeroMem (Digest, SHA512_DIGEST_SIZE); Status =3D Sha512HashAll=20 + (HashData, DataSize, Digest); if (!Status) { + Print (L"[Fail]"); + return EFI_ABORTED; + } + if (CompareMem (Digest, Sha512Digest, SHA512_DIGEST_SIZE) !=3D 0) { + Print (L"[Fail]"); + return EFI_ABORTED; + } + Print (L"[Pass]\n"); =20 return EFI_SUCCESS; diff --git a/CryptoPkg/Include/Library/BaseCryptLib.h b/CryptoPkg/Include/L= ibrary/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 secur= ity functionality enabling. =20 -Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made availab= le under the terms and conditions of the BSD License which accompanies thi= s distribution. The full text of the license may be found at @@ -193,6 +19= 3,32 @@ Md4Final ( ); =20 /** + Computes the MD4 message digest of a input data buffer. + + This function performs the MD4 message digest of a given data buffer,=20 + 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 diges= t + 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 has= h operations. =20 If this interface is not supported, then return zero. @@ -307,6 +333,32 @@ Md5Final ( ); =20 /** + Computes the MD5 message digest of a input data buffer. + + This function performs the MD5 message digest of a given data buffer,=20 + 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 diges= t + 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 h= ash operations. =20 If this interface is not supported, then return zero. @@ -421,6 +473,32 @@ Sha1Final ( ); =20 /** + Computes the SHA-1 message digest of a input data buffer. + + This function performs the SHA-1 message digest of a given data=20 + 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 dig= est + 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. =20 @return The size, in bytes, of the context buffer required for SHA-256 = hash operations. @@ -526,6 +604,32 @@ Sha256Final ( ); =20 /** + Computes the SHA-256 message digest of a input data buffer. + + This function performs the SHA-256 message digest of a given data=20 + 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 d= igest + 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. =20 @return The size, in bytes, of the context buffer required for SHA-384 = hash operations. @@ -631,6 +735,32 @@ Sha384Final ( ); =20 /** + Computes the SHA-384 message digest of a input data buffer. + + This function performs the SHA-384 message digest of a given data=20 + 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 d= igest + 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. =20 @return The size, in bytes, of the context buffer required for SHA-512 = hash operations. @@ -735,6 +865,32 @@ Sha512Final ( OUT UINT8 *HashValue ); =20 +/** + Computes the SHA-512 message digest of a input data buffer. + + This function performs the SHA-512 message digest of a given data=20 + 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 d= igest + 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 + ); + //=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D // MAC (Message Authentication Code) Primitive //=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptMd4.c b/CryptoPkg/Lib= rary/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. =20 -Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.
+Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made availab= le under the terms and conditions of the BSD License which accompanies thi= s distribution. The full text of the license may be found at @@ -181,3 +18= 1,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,=20 + 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 diges= t + 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 =3D=3D NULL) { + return FALSE; + } + if (Data =3D=3D NULL && DataSize !=3D 0) { + return FALSE; + } + + // + // OpenSSL MD4 Hash Computation. + // + if (MD4 (Data, DataSize, HashValue) =3D=3D 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 capabiliti= es. =20 -Copyright (c) 2012, Intel Corporation. All rights reserved.
+Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made availab= le under the terms and conditions of the BSD License which accompanies thi= s distribution. The full text of the license may be found at @@ -122,3 +12= 2,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 diges= t + 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/Lib= rary/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. =20 -Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made availab= le under the terms and conditions of the BSD License which accompanies thi= s distribution. The full text of the license may be found at @@ -183,3 +18= 3,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,=20 + 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 diges= t + 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 =3D=3D NULL) { + return FALSE; + } + if (Data =3D=3D NULL && (DataSize !=3D 0)) { + return FALSE; + } + + // + // OpenSSL MD5 Hash Computation. + // + if (MD5 (Data, DataSize, HashValue) =3D=3D NULL) { + return FALSE; + } else { + return TRUE; + } +} diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c b/CryptoPkg/Li= brary/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. =20 -Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made availab= le under the terms and conditions of the BSD License which accompanies thi= s distribution. The full text of the license may be found at @@ -182,3 +18= 2,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=20 + 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 dig= est + 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 =3D=3D NULL) { + return FALSE; + } + if (Data =3D=3D NULL && DataSize !=3D 0) { + return FALSE; + } + + // + // OpenSSL SHA-1 Hash Computation. + // + if (SHA1 (Data, DataSize, HashValue) =3D=3D 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. =20 -Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made availab= le under the terms and conditions of the BSD License which accompanies thi= s distribution. The full text of the license may be found at @@ -181,3 +18= 1,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=20 + 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 d= igest + 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 =3D=3D NULL) { + return FALSE; + } + if (Data =3D=3D NULL && DataSize !=3D 0) { + return FALSE; + } + + // + // OpenSSL SHA-256 Hash Computation. + // + if (SHA256 (Data, DataSize, HashValue) =3D=3D 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. =20 -Copyright (c) 2014, Intel Corporation. All rights reserved.
+Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made availab= le under the terms and conditions of the BSD License which accompanies thi= s distribution. The full text of the license may be found at @@ -185,6 +18= 5,52 @@ Sha384Final ( } =20 /** + Computes the SHA-384 message digest of a input data buffer. + + This function performs the SHA-384 message digest of a given data=20 + 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 d= igest + 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 =3D=3D NULL) { + return FALSE; + } + if (Data =3D=3D NULL && DataSize !=3D 0) { + return FALSE; + } + + // + // OpenSSL SHA-384 Hash Computation. + // + if (SHA384 (Data, DataSize, HashValue) =3D=3D NULL) { + return FALSE; + } else { + return TRUE; + } +} + +/** Retrieves the size, in bytes, of the context buffer required for SHA-512= hash operations. =20 @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=20 + 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 d= igest + 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 =3D=3D NULL) { + return FALSE; + } + if (Data =3D=3D NULL && DataSize !=3D 0) { + return FALSE; + } + + // + // OpenSSL SHA-512 Hash Computation. + // + if (SHA512 (Data, DataSize, HashValue) =3D=3D NULL) { + return FALSE; + } else { + return TRUE; + } +} diff --git a/CryptoPkg/Library/BaseCryptLib/Hash/CryptSha512Null.c b/Crypto= Pkg/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 provid= e real capabilities. =20 -Copyright (c) 2014, Intel Corporation. All rights reserved.
+Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made availab= le under the terms and conditions of the BSD License which accompanies thi= s distribution. The full text of the license may be found at @@ -123,6 +12= 3,31 @@ Sha384Final ( } =20 /** + 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 d= igest + 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. =20 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 d= igest + 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