public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
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



      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