From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mx.groups.io with SMTP id smtpd.web12.28466.1661238389086803848 for ; Tue, 23 Aug 2022 00:06:33 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=ClstVGd1; spf=pass (domain: intel.com, ip: 134.134.136.65, mailfrom: qi1.zhang@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1661238392; x=1692774392; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=81jtyH55jYnwI3NNazzc93owidyRN1gIbn/CVhtVVgw=; b=ClstVGd1BjAMtW42znn2LwxrAUyNFPop+8vWmzdhgXz6sr5/og5XayVX T3F/F7JuocFqMDIGM06Xi4MmUS/tbmtdtDA1ZjPksyBj4rJU968icC+3z LlMpxkJvSTjs5+mfNzOpBAJvEapR9s7PomJJdEXgbIS2Gedtd4TgZSHVV 4Tzy0rZVCIWpfj29UUUXstD+/lq5e3s3zdbGqJsEIsD2r/4YDXYpQ+Oew Ra+7EbSNEGGM5uytlYZAEAZpORjaAn37q2e6AAqb+dAfrB9XdrqG8wplT uNfAO15HAJr/vujZSfa8XAXgjbMXkjSLtLxpRiojuLi9GRnvA7qRnJJCS Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10447"; a="294893697" X-IronPort-AV: E=Sophos;i="5.93,256,1654585200"; d="scan'208";a="294893697" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Aug 2022 00:06:32 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,256,1654585200"; d="scan'208";a="677512602" Received: from shwdesssddpdqi.ccr.corp.intel.com ([10.239.157.129]) by fmsmga004.fm.intel.com with ESMTP; 23 Aug 2022 00:06:30 -0700 From: "Qi Zhang" To: devel@edk2.groups.io Cc: Qi Zhang , Jiewen Yao , Jian J Wang , Xiaoyu Lu , Guomin Jiang Subject: [PATCH 2/5] CryptoPkg: Add HMAC-SHA384 cipher support. Date: Tue, 23 Aug 2022 15:06:20 +0800 Message-Id: <20220823070623.7002-3-qi1.zhang@intel.com> X-Mailer: git-send-email 2.26.2.windows.1 In-Reply-To: <20220823070623.7002-1-qi1.zhang@intel.com> References: <20220823070623.7002-1-qi1.zhang@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Rename file from CryptHmacSha256 to CryptHmac and add HmacSha384 and HmacSha256All funcitons. REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4025 Signed-off-by: Qi Zhang Cc: Jiewen Yao Cc: Jian J Wang Cc: Xiaoyu Lu Cc: Guomin Jiang --- .../Library/BaseCryptLib/Hmac/CryptHmac.c | 629 ++++++++++++++++++ .../Library/BaseCryptLib/Hmac/CryptHmacNull.c | 359 ++++++++++ .../BaseCryptLib/Hmac/CryptHmacSha256.c | 217 ------ .../BaseCryptLib/Hmac/CryptHmacSha256Null.c | 139 ---- .../BaseCryptLibNull/Hmac/CryptHmacNull.c | 359 ++++++++++ .../Hmac/CryptHmacSha256Null.c | 139 ---- 6 files changed, 1347 insertions(+), 495 deletions(-) create mode 100644 CryptoPkg/Library/BaseCryptLib/Hmac/CryptHmac.c create mode 100644 CryptoPkg/Library/BaseCryptLib/Hmac/CryptHmacNull.c delete mode 100644 CryptoPkg/Library/BaseCryptLib/Hmac/CryptHmacSha256.c delete mode 100644 CryptoPkg/Library/BaseCryptLib/Hmac/CryptHmacSha256Null= .c create mode 100644 CryptoPkg/Library/BaseCryptLibNull/Hmac/CryptHmacNull.c delete mode 100644 CryptoPkg/Library/BaseCryptLibNull/Hmac/CryptHmacSha256= Null.c diff --git a/CryptoPkg/Library/BaseCryptLib/Hmac/CryptHmac.c b/CryptoPkg/Li= brary/BaseCryptLib/Hmac/CryptHmac.c new file mode 100644 index 0000000000..2786267a0b --- /dev/null +++ b/CryptoPkg/Library/BaseCryptLib/Hmac/CryptHmac.c @@ -0,0 +1,629 @@ +/** @file=0D + HMAC-SHA256/SHA384 Wrapper Implementation over OpenSSL.=0D +=0D +Copyright (c) 2016 - 2022, Intel Corporation. All rights reserved.
=0D +SPDX-License-Identifier: BSD-2-Clause-Patent=0D +=0D +**/=0D +=0D +#include "InternalCryptLib.h"=0D +#include =0D +=0D +/**=0D + Allocates and initializes one HMAC_CTX context for subsequent HMAC-MD us= e.=0D +=0D + @return Pointer to the HMAC_CTX context that has been initialized.=0D + If the allocations fails, HmacMdNew() returns NULL.=0D +=0D +**/=0D +VOID *=0D +HmacMdNew (=0D + VOID=0D + )=0D +{=0D + //=0D + // Allocates & Initializes HMAC_CTX Context by OpenSSL HMAC_CTX_new()=0D + //=0D + return (VOID *)HMAC_CTX_new ();=0D +}=0D +=0D +/**=0D + Release the specified HMAC_CTX context.=0D +=0D + @param[in] HmacMdCtx Pointer to the HMAC_CTX context to be released.=0D +=0D +**/=0D +VOID=0D +HmacMdFree (=0D + IN VOID *HmacMdCtx=0D + )=0D +{=0D + //=0D + // Free OpenSSL HMAC_CTX Context=0D + //=0D + HMAC_CTX_free ((HMAC_CTX *)HmacMdCtx);=0D +}=0D +=0D +/**=0D + Set user-supplied key for subsequent use. It must be done before any=0D + calling to HmacMdUpdate().=0D +=0D + If HmacMdContext is NULL, then return FALSE.=0D +=0D + @param[in] Md Message Digest.=0D + @param[out] HmacMdContext Pointer to HMAC-MD context.=0D + @param[in] Key Pointer to the user-supplied key.=0D + @param[in] KeySize Key size in bytes.=0D +=0D + @retval TRUE The Key is set successfully.=0D + @retval FALSE The Key is set unsuccessfully.=0D +=0D +**/=0D +BOOLEAN=0D +HmacMdSetKey (=0D + IN CONST EVP_MD *Md,=0D + OUT VOID *HmacMdContext,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize=0D + )=0D +{=0D + //=0D + // Check input parameters.=0D + //=0D + if ((HmacMdContext =3D=3D NULL) || (KeySize > INT_MAX)) {=0D + return FALSE;=0D + }=0D +=0D + if (HMAC_Init_ex ((HMAC_CTX *)HmacMdContext, Key, (UINT32)KeySize, Md, N= ULL) !=3D 1) {=0D + return FALSE;=0D + }=0D +=0D + return TRUE;=0D +}=0D +=0D +/**=0D + Makes a copy of an existing HMAC-MD context.=0D +=0D + If HmacMdContext is NULL, then return FALSE.=0D + If NewHmacMdContext is NULL, then return FALSE.=0D +=0D + @param[in] HmacMdContext Pointer to HMAC-MD context being copied.=0D + @param[out] NewHmacMdContext Pointer to new HMAC-MD context.=0D +=0D + @retval TRUE HMAC-MD context copy succeeded.=0D + @retval FALSE HMAC-MD context copy failed.=0D +=0D +**/=0D +BOOLEAN=0D +HmacMdDuplicate (=0D + IN CONST VOID *HmacMdContext,=0D + OUT VOID *NewHmacMdContext=0D + )=0D +{=0D + //=0D + // Check input parameters.=0D + //=0D + if ((HmacMdContext =3D=3D NULL) || (NewHmacMdContext =3D=3D NULL)) {=0D + return FALSE;=0D + }=0D +=0D + if (HMAC_CTX_copy ((HMAC_CTX *)NewHmacMdContext, (HMAC_CTX *)HmacMdConte= xt) !=3D 1) {=0D + return FALSE;=0D + }=0D +=0D + return TRUE;=0D +}=0D +=0D +/**=0D + Digests the input data and updates HMAC-MD context.=0D +=0D + This function performs HMAC-MD digest on a data buffer of the specified = size.=0D + It can be called multiple times to compute the digest of long or discont= inuous data streams.=0D + HMAC-MD context should be initialized by HmacMdNew(), and should not be = finalized=0D + by HmacMdFinal(). Behavior with invalid context is undefined.=0D +=0D + If HmacMdContext is NULL, then return FALSE.=0D +=0D + @param[in, out] HmacMdContext Pointer to the HMAC-MD context.=0D + @param[in] Data Pointer to the buffer containing the = data to be digested.=0D + @param[in] DataSize Size of Data buffer in bytes.=0D +=0D + @retval TRUE HMAC-MD data digest succeeded.=0D + @retval FALSE HMAC-MD data digest failed.=0D +=0D +**/=0D +BOOLEAN=0D +HmacMdUpdate (=0D + IN OUT VOID *HmacMdContext,=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize=0D + )=0D +{=0D + //=0D + // Check input parameters.=0D + //=0D + if (HmacMdContext =3D=3D NULL) {=0D + return FALSE;=0D + }=0D +=0D + //=0D + // Check invalid parameters, in case that only DataLength was checked in= OpenSSL=0D + //=0D + if ((Data =3D=3D NULL) && (DataSize !=3D 0)) {=0D + return FALSE;=0D + }=0D +=0D + //=0D + // OpenSSL HMAC-MD digest update=0D + //=0D + if (HMAC_Update ((HMAC_CTX *)HmacMdContext, Data, DataSize) !=3D 1) {=0D + return FALSE;=0D + }=0D +=0D + return TRUE;=0D +}=0D +=0D +/**=0D + Completes computation of the HMAC-MD digest value.=0D +=0D + This function completes HMAC-MD hash computation and retrieves the diges= t value into=0D + the specified memory. After this function has been called, the HMAC-MD c= ontext cannot=0D + be used again.=0D + HMAC-MD context should be initialized by HmacMdNew(), and should not be = finalized=0D + by HmacMdFinal(). Behavior with invalid HMAC-MD context is undefined.=0D +=0D + If HmacMdContext is NULL, then return FALSE.=0D + If HmacValue is NULL, then return FALSE.=0D +=0D + @param[in, out] HmacMdContext Pointer to the HMAC-MD context.=0D + @param[out] HmacValue Pointer to a buffer that receives th= e HMAC-MD digest=0D + value.=0D +=0D + @retval TRUE HMAC-MD digest computation succeeded.=0D + @retval FALSE HMAC-MD digest computation failed.=0D +=0D +**/=0D +BOOLEAN=0D +HmacMdFinal (=0D + IN OUT VOID *HmacMdContext,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + UINT32 Length;=0D +=0D + //=0D + // Check input parameters.=0D + //=0D + if ((HmacMdContext =3D=3D NULL) || (HmacValue =3D=3D NULL)) {=0D + return FALSE;=0D + }=0D +=0D + //=0D + // OpenSSL HMAC-MD digest finalization=0D + //=0D + if (HMAC_Final ((HMAC_CTX *)HmacMdContext, HmacValue, &Length) !=3D 1) {= =0D + return FALSE;=0D + }=0D +=0D + if (HMAC_CTX_reset ((HMAC_CTX *)HmacMdContext) !=3D 1) {=0D + return FALSE;=0D + }=0D +=0D + return TRUE;=0D +}=0D +=0D +/**=0D + Computes the HMAC-MD digest of a input data buffer.=0D +=0D + This function performs the HMAC-MD digest of a given data buffer, and pl= aces=0D + the digest value into the specified memory.=0D +=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in] Md Message Digest.=0D + @param[in] Data Pointer to the buffer containing the data to be= digested.=0D + @param[in] DataSize Size of Data buffer in bytes.=0D + @param[in] Key Pointer to the user-supplied key.=0D + @param[in] KeySize Key size in bytes.=0D + @param[out] HmacValue Pointer to a buffer that receives the HMAC-MD d= igest=0D + value.=0D +=0D + @retval TRUE HMAC-MD digest computation succeeded.=0D + @retval FALSE HMAC-MD digest computation failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +HmacMdAll (=0D + IN CONST EVP_MD *Md,=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + UINT32 Length;=0D + HMAC_CTX *Ctx;=0D + BOOLEAN RetVal;=0D +=0D + Ctx =3D HMAC_CTX_new ();=0D + if (Ctx =3D=3D NULL) {=0D + return FALSE;=0D + }=0D +=0D + RetVal =3D (BOOLEAN)HMAC_CTX_reset (Ctx);=0D + if (!RetVal) {=0D + goto Done;=0D + }=0D +=0D + RetVal =3D (BOOLEAN)HMAC_Init_ex (Ctx, Key, (UINT32)KeySize, Md, NULL);= =0D + if (!RetVal) {=0D + goto Done;=0D + }=0D +=0D + RetVal =3D (BOOLEAN)HMAC_Update (Ctx, Data, DataSize);=0D + if (!RetVal) {=0D + goto Done;=0D + }=0D +=0D + RetVal =3D (BOOLEAN)HMAC_Final (Ctx, HmacValue, &Length);=0D + if (!RetVal) {=0D + goto Done;=0D + }=0D +=0D +Done:=0D + HMAC_CTX_free (Ctx);=0D +=0D + return RetVal;=0D +}=0D +=0D +/**=0D + Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA25= 6 use.=0D +=0D + @return Pointer to the HMAC_CTX context that has been initialized.=0D + If the allocations fails, HmacSha256New() returns NULL.=0D +=0D +**/=0D +VOID *=0D +EFIAPI=0D +HmacSha256New (=0D + VOID=0D + )=0D +{=0D + return HmacMdNew ();=0D +}=0D +=0D +/**=0D + Release the specified HMAC_CTX context.=0D +=0D + @param[in] HmacSha256Ctx Pointer to the HMAC_CTX context to be release= d.=0D +=0D +**/=0D +VOID=0D +EFIAPI=0D +HmacSha256Free (=0D + IN VOID *HmacSha256Ctx=0D + )=0D +{=0D + HmacMdFree (HmacSha256Ctx);=0D +}=0D +=0D +/**=0D + Set user-supplied key for subsequent use. It must be done before any=0D + calling to HmacSha256Update().=0D +=0D + If HmacSha256Context is NULL, then return FALSE.=0D +=0D + @param[out] HmacSha256Context Pointer to HMAC-SHA256 context.=0D + @param[in] Key Pointer to the user-supplied key.=0D + @param[in] KeySize Key size in bytes.=0D +=0D + @retval TRUE The Key is set successfully.=0D + @retval FALSE The Key is set unsuccessfully.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256SetKey (=0D + OUT VOID *HmacSha256Context,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize=0D + )=0D +{=0D + return HmacMdSetKey (EVP_sha256 (), HmacSha256Context, Key, KeySize);=0D +}=0D +=0D +/**=0D + Makes a copy of an existing HMAC-SHA256 context.=0D +=0D + If HmacSha256Context is NULL, then return FALSE.=0D + If NewHmacSha256Context is NULL, then return FALSE.=0D +=0D + @param[in] HmacSha256Context Pointer to HMAC-SHA256 context being c= opied.=0D + @param[out] NewHmacSha256Context Pointer to new HMAC-SHA256 context.=0D +=0D + @retval TRUE HMAC-SHA256 context copy succeeded.=0D + @retval FALSE HMAC-SHA256 context copy failed.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256Duplicate (=0D + IN CONST VOID *HmacSha256Context,=0D + OUT VOID *NewHmacSha256Context=0D + )=0D +{=0D + return HmacMdDuplicate (HmacSha256Context, NewHmacSha256Context);=0D +}=0D +=0D +/**=0D + Digests the input data and updates HMAC-SHA256 context.=0D +=0D + This function performs HMAC-SHA256 digest on a data buffer of the specif= ied size.=0D + It can be called multiple times to compute the digest of long or discont= inuous data streams.=0D + HMAC-SHA256 context should be initialized by HmacSha256New(), and should= not be finalized=0D + by HmacSha256Final(). Behavior with invalid context is undefined.=0D +=0D + If HmacSha256Context is NULL, then return FALSE.=0D +=0D + @param[in, out] HmacSha256Context Pointer to the HMAC-SHA256 context.=0D + @param[in] Data Pointer to the buffer containing the = data to be digested.=0D + @param[in] DataSize Size of Data buffer in bytes.=0D +=0D + @retval TRUE HMAC-SHA256 data digest succeeded.=0D + @retval FALSE HMAC-SHA256 data digest failed.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256Update (=0D + IN OUT VOID *HmacSha256Context,=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize=0D + )=0D +{=0D + return HmacMdUpdate (HmacSha256Context, Data, DataSize);=0D +}=0D +=0D +/**=0D + Completes computation of the HMAC-SHA256 digest value.=0D +=0D + This function completes HMAC-SHA256 hash computation and retrieves the d= igest value into=0D + the specified memory. After this function has been called, the HMAC-SHA2= 56 context cannot=0D + be used again.=0D + HMAC-SHA256 context should be initialized by HmacSha256New(), and should= not be finalized=0D + by HmacSha256Final(). Behavior with invalid HMAC-SHA256 context is undef= ined.=0D +=0D + If HmacSha256Context is NULL, then return FALSE.=0D + If HmacValue is NULL, then return FALSE.=0D +=0D + @param[in, out] HmacSha256Context Pointer to the HMAC-SHA256 context.= =0D + @param[out] HmacValue Pointer to a buffer that receives th= e HMAC-SHA256 digest=0D + value (32 bytes).=0D +=0D + @retval TRUE HMAC-SHA256 digest computation succeeded.=0D + @retval FALSE HMAC-SHA256 digest computation failed.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256Final (=0D + IN OUT VOID *HmacSha256Context,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + return HmacMdFinal (HmacSha256Context, HmacValue);=0D +}=0D +=0D +/**=0D + Computes the HMAC-SHA256 digest of a input data buffer.=0D +=0D + This function performs the HMAC-SHA256 digest of a given data buffer, an= d places=0D + the digest value into the specified memory.=0D +=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in] Data Pointer to the buffer containing the data to be= digested.=0D + @param[in] DataSize Size of Data buffer in bytes.=0D + @param[in] Key Pointer to the user-supplied key.=0D + @param[in] KeySize Key size in bytes.=0D + @param[out] HmacValue Pointer to a buffer that receives the HMAC-SHA2= 56 digest=0D + value (32 bytes).=0D +=0D + @retval TRUE HMAC-SHA256 digest computation succeeded.=0D + @retval FALSE HMAC-SHA256 digest computation failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256All (=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + return HmacMdAll (EVP_sha256 (), Data, DataSize, Key, KeySize, HmacValue= );=0D +}=0D +=0D +/**=0D + Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA38= 4 use.=0D +=0D + @return Pointer to the HMAC_CTX context that has been initialized.=0D + If the allocations fails, HmacSha384New() returns NULL.=0D +=0D +**/=0D +VOID *=0D +EFIAPI=0D +HmacSha384New (=0D + VOID=0D + )=0D +{=0D + return HmacMdNew ();=0D +}=0D +=0D +/**=0D + Release the specified HMAC_CTX context.=0D +=0D + @param[in] HmacSha384Ctx Pointer to the HMAC_CTX context to be release= d.=0D +=0D +**/=0D +VOID=0D +EFIAPI=0D +HmacSha384Free (=0D + IN VOID *HmacSha384Ctx=0D + )=0D +{=0D + HmacMdFree (HmacSha384Ctx);=0D +}=0D +=0D +/**=0D + Set user-supplied key for subsequent use. It must be done before any=0D + calling to HmacSha384Update().=0D +=0D + If HmacSha384Context is NULL, then return FALSE.=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[out] HmacSha384Context Pointer to HMAC-SHA384 context.=0D + @param[in] Key Pointer to the user-supplied key.=0D + @param[in] KeySize Key size in bytes.=0D +=0D + @retval TRUE The Key is set successfully.=0D + @retval FALSE The Key is set unsuccessfully.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384SetKey (=0D + OUT VOID *HmacSha384Context,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize=0D + )=0D +{=0D + return HmacMdSetKey (EVP_sha384 (), HmacSha384Context, Key, KeySize);=0D +}=0D +=0D +/**=0D + Makes a copy of an existing HMAC-SHA384 context.=0D +=0D + If HmacSha384Context is NULL, then return FALSE.=0D + If NewHmacSha384Context is NULL, then return FALSE.=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in] HmacSha384Context Pointer to HMAC-SHA384 context being c= opied.=0D + @param[out] NewHmacSha384Context Pointer to new HMAC-SHA384 context.=0D +=0D + @retval TRUE HMAC-SHA384 context copy succeeded.=0D + @retval FALSE HMAC-SHA384 context copy failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384Duplicate (=0D + IN CONST VOID *HmacSha384Context,=0D + OUT VOID *NewHmacSha384Context=0D + )=0D +{=0D + return HmacMdDuplicate (HmacSha384Context, NewHmacSha384Context);=0D +}=0D +=0D +/**=0D + Digests the input data and updates HMAC-SHA384 context.=0D +=0D + This function performs HMAC-SHA384 digest on a data buffer of the specif= ied size.=0D + It can be called multiple times to compute the digest of long or discont= inuous data streams.=0D + HMAC-SHA384 context should be initialized by HmacSha384New(), and should= not be finalized=0D + by HmacSha384Final(). Behavior with invalid context is undefined.=0D +=0D + If HmacSha384Context is NULL, then return FALSE.=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in, out] HmacSha384Context Pointer to the HMAC-SHA384 context.=0D + @param[in] Data Pointer to the buffer containing the = data to be digested.=0D + @param[in] DataSize Size of Data buffer in bytes.=0D +=0D + @retval TRUE HMAC-SHA384 data digest succeeded.=0D + @retval FALSE HMAC-SHA384 data digest failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384Update (=0D + IN OUT VOID *HmacSha384Context,=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize=0D + )=0D +{=0D + return HmacMdUpdate (HmacSha384Context, Data, DataSize);=0D +}=0D +=0D +/**=0D + Completes computation of the HMAC-SHA384 digest value.=0D +=0D + This function completes HMAC-SHA384 hash computation and retrieves the d= igest value into=0D + the specified memory. After this function has been called, the HMAC-SHA3= 84 context cannot=0D + be used again.=0D + HMAC-SHA384 context should be initialized by HmacSha384New(), and should= not be finalized=0D + by HmacSha384Final(). Behavior with invalid HMAC-SHA384 context is undef= ined.=0D +=0D + If HmacSha384Context is NULL, then return FALSE.=0D + If HmacValue is NULL, then return FALSE.=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in, out] HmacSha384Context Pointer to the HMAC-SHA384 context.= =0D + @param[out] HmacValue Pointer to a buffer that receives th= e HMAC-SHA384 digest=0D + value (48 bytes).=0D +=0D + @retval TRUE HMAC-SHA384 digest computation succeeded.=0D + @retval FALSE HMAC-SHA384 digest computation failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384Final (=0D + IN OUT VOID *HmacSha384Context,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + return HmacMdFinal (HmacSha384Context, HmacValue);=0D +}=0D +=0D +/**=0D + Computes the HMAC-SHA384 digest of a input data buffer.=0D +=0D + This function performs the HMAC-SHA384 digest of a given data buffer, an= d places=0D + the digest value into the specified memory.=0D +=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in] Data Pointer to the buffer containing the data to be= digested.=0D + @param[in] DataSize Size of Data buffer in bytes.=0D + @param[in] Key Pointer to the user-supplied key.=0D + @param[in] KeySize Key size in bytes.=0D + @param[out] HmacValue Pointer to a buffer that receives the HMAC-SHA3= 84 digest=0D + value (48 bytes).=0D +=0D + @retval TRUE HMAC-SHA384 digest computation succeeded.=0D + @retval FALSE HMAC-SHA384 digest computation failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384All (=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + return HmacMdAll (EVP_sha384 (), Data, DataSize, Key, KeySize, HmacValue= );=0D +}=0D diff --git a/CryptoPkg/Library/BaseCryptLib/Hmac/CryptHmacNull.c b/CryptoPk= g/Library/BaseCryptLib/Hmac/CryptHmacNull.c new file mode 100644 index 0000000000..0a76db41ec --- /dev/null +++ b/CryptoPkg/Library/BaseCryptLib/Hmac/CryptHmacNull.c @@ -0,0 +1,359 @@ +/** @file=0D + HMAC-SHA256/SHA384 Wrapper Implementation which does not provide real ca= pabilities.=0D +=0D +Copyright (c) 2016 - 2022, Intel Corporation. All rights reserved.
=0D +SPDX-License-Identifier: BSD-2-Clause-Patent=0D +=0D +**/=0D +=0D +#include "InternalCryptLib.h"=0D +=0D +/**=0D + Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA25= 6 use.=0D +=0D + Return NULL to indicate this interface is not supported.=0D +=0D + @return NULL This interface is not supported..=0D +=0D +**/=0D +VOID *=0D +EFIAPI=0D +HmacSha256New (=0D + VOID=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return NULL;=0D +}=0D +=0D +/**=0D + Release the specified HMAC_CTX context.=0D +=0D + This function will do nothing.=0D +=0D + @param[in] HmacSha256Ctx Pointer to the HMAC_CTX context to be release= d.=0D +=0D +**/=0D +VOID=0D +EFIAPI=0D +HmacSha256Free (=0D + IN VOID *HmacSha256Ctx=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return;=0D +}=0D +=0D +/**=0D + Set user-supplied key for subsequent use. It must be done before any=0D + calling to HmacSha256Update().=0D +=0D + Return FALSE to indicate this interface is not supported.=0D +=0D + @param[out] HmacSha256Context Pointer to HMAC-SHA256 context.=0D + @param[in] Key Pointer to the user-supplied key.=0D + @param[in] KeySize Key size in bytes.=0D +=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256SetKey (=0D + OUT VOID *HmacSha256Context,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Makes a copy of an existing HMAC-SHA256 context.=0D +=0D + Return FALSE to indicate this interface is not supported.=0D +=0D + @param[in] HmacSha256Context Pointer to HMAC-SHA256 context being c= opied.=0D + @param[out] NewHmacSha256Context Pointer to new HMAC-SHA256 context.=0D +=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256Duplicate (=0D + IN CONST VOID *HmacSha256Context,=0D + OUT VOID *NewHmacSha256Context=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Digests the input data and updates HMAC-SHA256 context.=0D +=0D + Return FALSE to indicate this interface is not supported.=0D +=0D + @param[in, out] HmacSha256Context Pointer to the HMAC-SHA256 context.=0D + @param[in] Data Pointer to the buffer containing the = data to be digested.=0D + @param[in] DataSize Size of Data buffer in bytes.=0D +=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256Update (=0D + IN OUT VOID *HmacSha256Context,=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Completes computation of the HMAC-SHA256 digest value.=0D +=0D + Return FALSE to indicate this interface is not supported.=0D +=0D + @param[in, out] HmacSha256Context Pointer to the HMAC-SHA256 context.= =0D + @param[out] HmacValue Pointer to a buffer that receives th= e HMAC-SHA256 digest=0D + value (32 bytes).=0D +=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256Final (=0D + IN OUT VOID *HmacSha256Context,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Computes the HMAC-SHA256 digest of a input data buffer.=0D +=0D + This function performs the HMAC-SHA256 digest of a given data buffer, an= d places=0D + the digest value into the specified memory.=0D +=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in] Data Pointer to the buffer containing the data to be= digested.=0D + @param[in] DataSize Size of Data buffer in bytes.=0D + @param[in] Key Pointer to the user-supplied key.=0D + @param[in] KeySize Key size in bytes.=0D + @param[out] HmacValue Pointer to a buffer that receives the HMAC-SHA2= 56 digest=0D + value (32 bytes).=0D +=0D + @retval TRUE HMAC-SHA256 digest computation succeeded.=0D + @retval FALSE HMAC-SHA256 digest computation failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256All (=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA38= 4 use.=0D +=0D + @return Pointer to the HMAC_CTX context that has been initialized.=0D + If the allocations fails, HmacSha384New() returns NULL.=0D +=0D +**/=0D +VOID *=0D +EFIAPI=0D +HmacSha384New (=0D + VOID=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return NULL;=0D +}=0D +=0D +/**=0D + Release the specified HMAC_CTX context.=0D +=0D + @param[in] HmacSha384Ctx Pointer to the HMAC_CTX context to be release= d.=0D +=0D +**/=0D +VOID=0D +EFIAPI=0D +HmacSha384Free (=0D + IN VOID *HmacSha384Ctx=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return;=0D +}=0D +=0D +/**=0D + Set user-supplied key for subsequent use. It must be done before any=0D + calling to HmacSha384Update().=0D +=0D + If HmacSha384Context is NULL, then return FALSE.=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[out] HmacSha384Context Pointer to HMAC-SHA384 context.=0D + @param[in] Key Pointer to the user-supplied key.=0D + @param[in] KeySize Key size in bytes.=0D +=0D + @retval TRUE The Key is set successfully.=0D + @retval FALSE The Key is set unsuccessfully.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384SetKey (=0D + OUT VOID *HmacSha384Context,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Makes a copy of an existing HMAC-SHA384 context.=0D +=0D + If HmacSha384Context is NULL, then return FALSE.=0D + If NewHmacSha384Context is NULL, then return FALSE.=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in] HmacSha384Context Pointer to HMAC-SHA384 context being c= opied.=0D + @param[out] NewHmacSha384Context Pointer to new HMAC-SHA384 context.=0D +=0D + @retval TRUE HMAC-SHA384 context copy succeeded.=0D + @retval FALSE HMAC-SHA384 context copy failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384Duplicate (=0D + IN CONST VOID *HmacSha384Context,=0D + OUT VOID *NewHmacSha384Context=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Digests the input data and updates HMAC-SHA384 context.=0D +=0D + This function performs HMAC-SHA384 digest on a data buffer of the specif= ied size.=0D + It can be called multiple times to compute the digest of long or discont= inuous data streams.=0D + HMAC-SHA384 context should be initialized by HmacSha384New(), and should= not be finalized=0D + by HmacSha384Final(). Behavior with invalid context is undefined.=0D +=0D + If HmacSha384Context is NULL, then return FALSE.=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in, out] HmacSha384Context Pointer to the HMAC-SHA384 context.=0D + @param[in] Data Pointer to the buffer containing the = data to be digested.=0D + @param[in] DataSize Size of Data buffer in bytes.=0D +=0D + @retval TRUE HMAC-SHA384 data digest succeeded.=0D + @retval FALSE HMAC-SHA384 data digest failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384Update (=0D + IN OUT VOID *HmacSha384Context,=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Completes computation of the HMAC-SHA384 digest value.=0D +=0D + This function completes HMAC-SHA384 hash computation and retrieves the d= igest value into=0D + the specified memory. After this function has been called, the HMAC-SHA3= 84 context cannot=0D + be used again.=0D + HMAC-SHA384 context should be initialized by HmacSha384New(), and should= not be finalized=0D + by HmacSha384Final(). Behavior with invalid HMAC-SHA384 context is undef= ined.=0D +=0D + If HmacSha384Context is NULL, then return FALSE.=0D + If HmacValue is NULL, then return FALSE.=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in, out] HmacSha384Context Pointer to the HMAC-SHA384 context.= =0D + @param[out] HmacValue Pointer to a buffer that receives th= e HMAC-SHA384 digest=0D + value (48 bytes).=0D +=0D + @retval TRUE HMAC-SHA384 digest computation succeeded.=0D + @retval FALSE HMAC-SHA384 digest computation failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384Final (=0D + IN OUT VOID *HmacSha384Context,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Computes the HMAC-SHA384 digest of a input data buffer.=0D +=0D + This function performs the HMAC-SHA384 digest of a given data buffer, an= d places=0D + the digest value into the specified memory.=0D +=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in] Data Pointer to the buffer containing the data to be= digested.=0D + @param[in] DataSize Size of Data buffer in bytes.=0D + @param[in] Key Pointer to the user-supplied key.=0D + @param[in] KeySize Key size in bytes.=0D + @param[out] HmacValue Pointer to a buffer that receives the HMAC-SHA3= 84 digest=0D + value (48 bytes).=0D +=0D + @retval TRUE HMAC-SHA384 digest computation succeeded.=0D + @retval FALSE HMAC-SHA384 digest computation failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384All (=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D diff --git a/CryptoPkg/Library/BaseCryptLib/Hmac/CryptHmacSha256.c b/Crypto= Pkg/Library/BaseCryptLib/Hmac/CryptHmacSha256.c deleted file mode 100644 index 7e83551c1b..0000000000 --- a/CryptoPkg/Library/BaseCryptLib/Hmac/CryptHmacSha256.c +++ /dev/null @@ -1,217 +0,0 @@ -/** @file=0D - HMAC-SHA256 Wrapper Implementation over OpenSSL.=0D -=0D -Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.
=0D -SPDX-License-Identifier: BSD-2-Clause-Patent=0D -=0D -**/=0D -=0D -#include "InternalCryptLib.h"=0D -#include =0D -=0D -/**=0D - Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA25= 6 use.=0D -=0D - @return Pointer to the HMAC_CTX context that has been initialized.=0D - If the allocations fails, HmacSha256New() returns NULL.=0D -=0D -**/=0D -VOID *=0D -EFIAPI=0D -HmacSha256New (=0D - VOID=0D - )=0D -{=0D - //=0D - // Allocates & Initializes HMAC_CTX Context by OpenSSL HMAC_CTX_new()=0D - //=0D - return (VOID *)HMAC_CTX_new ();=0D -}=0D -=0D -/**=0D - Release the specified HMAC_CTX context.=0D -=0D - @param[in] HmacSha256Ctx Pointer to the HMAC_CTX context to be release= d.=0D -=0D -**/=0D -VOID=0D -EFIAPI=0D -HmacSha256Free (=0D - IN VOID *HmacSha256Ctx=0D - )=0D -{=0D - //=0D - // Free OpenSSL HMAC_CTX Context=0D - //=0D - HMAC_CTX_free ((HMAC_CTX *)HmacSha256Ctx);=0D -}=0D -=0D -/**=0D - Set user-supplied key for subsequent use. It must be done before any=0D - calling to HmacSha256Update().=0D -=0D - If HmacSha256Context is NULL, then return FALSE.=0D -=0D - @param[out] HmacSha256Context Pointer to HMAC-SHA256 context.=0D - @param[in] Key Pointer to the user-supplied key.=0D - @param[in] KeySize Key size in bytes.=0D -=0D - @retval TRUE The Key is set successfully.=0D - @retval FALSE The Key is set unsuccessfully.=0D -=0D -**/=0D -BOOLEAN=0D -EFIAPI=0D -HmacSha256SetKey (=0D - OUT VOID *HmacSha256Context,=0D - IN CONST UINT8 *Key,=0D - IN UINTN KeySize=0D - )=0D -{=0D - //=0D - // Check input parameters.=0D - //=0D - if ((HmacSha256Context =3D=3D NULL) || (KeySize > INT_MAX)) {=0D - return FALSE;=0D - }=0D -=0D - if (HMAC_Init_ex ((HMAC_CTX *)HmacSha256Context, Key, (UINT32)KeySize, E= VP_sha256 (), NULL) !=3D 1) {=0D - return FALSE;=0D - }=0D -=0D - return TRUE;=0D -}=0D -=0D -/**=0D - Makes a copy of an existing HMAC-SHA256 context.=0D -=0D - If HmacSha256Context is NULL, then return FALSE.=0D - If NewHmacSha256Context is NULL, then return FALSE.=0D -=0D - @param[in] HmacSha256Context Pointer to HMAC-SHA256 context being c= opied.=0D - @param[out] NewHmacSha256Context Pointer to new HMAC-SHA256 context.=0D -=0D - @retval TRUE HMAC-SHA256 context copy succeeded.=0D - @retval FALSE HMAC-SHA256 context copy failed.=0D -=0D -**/=0D -BOOLEAN=0D -EFIAPI=0D -HmacSha256Duplicate (=0D - IN CONST VOID *HmacSha256Context,=0D - OUT VOID *NewHmacSha256Context=0D - )=0D -{=0D - //=0D - // Check input parameters.=0D - //=0D - if ((HmacSha256Context =3D=3D NULL) || (NewHmacSha256Context =3D=3D NULL= )) {=0D - return FALSE;=0D - }=0D -=0D - if (HMAC_CTX_copy ((HMAC_CTX *)NewHmacSha256Context, (HMAC_CTX *)HmacSha= 256Context) !=3D 1) {=0D - return FALSE;=0D - }=0D -=0D - return TRUE;=0D -}=0D -=0D -/**=0D - Digests the input data and updates HMAC-SHA256 context.=0D -=0D - This function performs HMAC-SHA256 digest on a data buffer of the specif= ied size.=0D - It can be called multiple times to compute the digest of long or discont= inuous data streams.=0D - HMAC-SHA256 context should be initialized by HmacSha256New(), and should= not be finalized=0D - by HmacSha256Final(). Behavior with invalid context is undefined.=0D -=0D - If HmacSha256Context is NULL, then return FALSE.=0D -=0D - @param[in, out] HmacSha256Context Pointer to the HMAC-SHA256 context.=0D - @param[in] Data Pointer to the buffer containing the = data to be digested.=0D - @param[in] DataSize Size of Data buffer in bytes.=0D -=0D - @retval TRUE HMAC-SHA256 data digest succeeded.=0D - @retval FALSE HMAC-SHA256 data digest failed.=0D -=0D -**/=0D -BOOLEAN=0D -EFIAPI=0D -HmacSha256Update (=0D - IN OUT VOID *HmacSha256Context,=0D - IN CONST VOID *Data,=0D - IN UINTN DataSize=0D - )=0D -{=0D - //=0D - // Check input parameters.=0D - //=0D - if (HmacSha256Context =3D=3D NULL) {=0D - return FALSE;=0D - }=0D -=0D - //=0D - // Check invalid parameters, in case that only DataLength was checked in= OpenSSL=0D - //=0D - if ((Data =3D=3D NULL) && (DataSize !=3D 0)) {=0D - return FALSE;=0D - }=0D -=0D - //=0D - // OpenSSL HMAC-SHA256 digest update=0D - //=0D - if (HMAC_Update ((HMAC_CTX *)HmacSha256Context, Data, DataSize) !=3D 1) = {=0D - return FALSE;=0D - }=0D -=0D - return TRUE;=0D -}=0D -=0D -/**=0D - Completes computation of the HMAC-SHA256 digest value.=0D -=0D - This function completes HMAC-SHA256 hash computation and retrieves the d= igest value into=0D - the specified memory. After this function has been called, the HMAC-SHA2= 56 context cannot=0D - be used again.=0D - HMAC-SHA256 context should be initialized by HmacSha256New(), and should= not be finalized=0D - by HmacSha256Final(). Behavior with invalid HMAC-SHA256 context is undef= ined.=0D -=0D - If HmacSha256Context is NULL, then return FALSE.=0D - If HmacValue is NULL, then return FALSE.=0D -=0D - @param[in, out] HmacSha256Context Pointer to the HMAC-SHA256 context.= =0D - @param[out] HmacValue Pointer to a buffer that receives th= e HMAC-SHA256 digest=0D - value (32 bytes).=0D -=0D - @retval TRUE HMAC-SHA256 digest computation succeeded.=0D - @retval FALSE HMAC-SHA256 digest computation failed.=0D -=0D -**/=0D -BOOLEAN=0D -EFIAPI=0D -HmacSha256Final (=0D - IN OUT VOID *HmacSha256Context,=0D - OUT UINT8 *HmacValue=0D - )=0D -{=0D - UINT32 Length;=0D -=0D - //=0D - // Check input parameters.=0D - //=0D - if ((HmacSha256Context =3D=3D NULL) || (HmacValue =3D=3D NULL)) {=0D - return FALSE;=0D - }=0D -=0D - //=0D - // OpenSSL HMAC-SHA256 digest finalization=0D - //=0D - if (HMAC_Final ((HMAC_CTX *)HmacSha256Context, HmacValue, &Length) !=3D = 1) {=0D - return FALSE;=0D - }=0D -=0D - if (HMAC_CTX_reset ((HMAC_CTX *)HmacSha256Context) !=3D 1) {=0D - return FALSE;=0D - }=0D -=0D - return TRUE;=0D -}=0D diff --git a/CryptoPkg/Library/BaseCryptLib/Hmac/CryptHmacSha256Null.c b/Cr= yptoPkg/Library/BaseCryptLib/Hmac/CryptHmacSha256Null.c deleted file mode 100644 index 2e3cb3bdfe..0000000000 --- a/CryptoPkg/Library/BaseCryptLib/Hmac/CryptHmacSha256Null.c +++ /dev/null @@ -1,139 +0,0 @@ -/** @file=0D - HMAC-SHA256 Wrapper Implementation which does not provide real capabilit= ies.=0D -=0D -Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.
=0D -SPDX-License-Identifier: BSD-2-Clause-Patent=0D -=0D -**/=0D -=0D -#include "InternalCryptLib.h"=0D -=0D -/**=0D - Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA25= 6 use.=0D -=0D - Return NULL to indicate this interface is not supported.=0D -=0D - @return NULL This interface is not supported..=0D -=0D -**/=0D -VOID *=0D -EFIAPI=0D -HmacSha256New (=0D - VOID=0D - )=0D -{=0D - ASSERT (FALSE);=0D - return NULL;=0D -}=0D -=0D -/**=0D - Release the specified HMAC_CTX context.=0D -=0D - This function will do nothing.=0D -=0D - @param[in] HmacSha256Ctx Pointer to the HMAC_CTX context to be release= d.=0D -=0D -**/=0D -VOID=0D -EFIAPI=0D -HmacSha256Free (=0D - IN VOID *HmacSha256Ctx=0D - )=0D -{=0D - ASSERT (FALSE);=0D - return;=0D -}=0D -=0D -/**=0D - Set user-supplied key for subsequent use. It must be done before any=0D - calling to HmacSha256Update().=0D -=0D - Return FALSE to indicate this interface is not supported.=0D -=0D - @param[out] HmacSha256Context Pointer to HMAC-SHA256 context.=0D - @param[in] Key Pointer to the user-supplied key.=0D - @param[in] KeySize Key size in bytes.=0D -=0D - @retval FALSE This interface is not supported.=0D -=0D -**/=0D -BOOLEAN=0D -EFIAPI=0D -HmacSha256SetKey (=0D - OUT VOID *HmacSha256Context,=0D - IN CONST UINT8 *Key,=0D - IN UINTN KeySize=0D - )=0D -{=0D - ASSERT (FALSE);=0D - return FALSE;=0D -}=0D -=0D -/**=0D - Makes a copy of an existing HMAC-SHA256 context.=0D -=0D - Return FALSE to indicate this interface is not supported.=0D -=0D - @param[in] HmacSha256Context Pointer to HMAC-SHA256 context being c= opied.=0D - @param[out] NewHmacSha256Context Pointer to new HMAC-SHA256 context.=0D -=0D - @retval FALSE This interface is not supported.=0D -=0D -**/=0D -BOOLEAN=0D -EFIAPI=0D -HmacSha256Duplicate (=0D - IN CONST VOID *HmacSha256Context,=0D - OUT VOID *NewHmacSha256Context=0D - )=0D -{=0D - ASSERT (FALSE);=0D - return FALSE;=0D -}=0D -=0D -/**=0D - Digests the input data and updates HMAC-SHA256 context.=0D -=0D - Return FALSE to indicate this interface is not supported.=0D -=0D - @param[in, out] HmacSha256Context Pointer to the HMAC-SHA256 context.=0D - @param[in] Data Pointer to the buffer containing the = data to be digested.=0D - @param[in] DataSize Size of Data buffer in bytes.=0D -=0D - @retval FALSE This interface is not supported.=0D -=0D -**/=0D -BOOLEAN=0D -EFIAPI=0D -HmacSha256Update (=0D - IN OUT VOID *HmacSha256Context,=0D - IN CONST VOID *Data,=0D - IN UINTN DataSize=0D - )=0D -{=0D - ASSERT (FALSE);=0D - return FALSE;=0D -}=0D -=0D -/**=0D - Completes computation of the HMAC-SHA256 digest value.=0D -=0D - Return FALSE to indicate this interface is not supported.=0D -=0D - @param[in, out] HmacSha256Context Pointer to the HMAC-SHA256 context.= =0D - @param[out] HmacValue Pointer to a buffer that receives th= e HMAC-SHA256 digest=0D - value (32 bytes).=0D -=0D - @retval FALSE This interface is not supported.=0D -=0D -**/=0D -BOOLEAN=0D -EFIAPI=0D -HmacSha256Final (=0D - IN OUT VOID *HmacSha256Context,=0D - OUT UINT8 *HmacValue=0D - )=0D -{=0D - ASSERT (FALSE);=0D - return FALSE;=0D -}=0D diff --git a/CryptoPkg/Library/BaseCryptLibNull/Hmac/CryptHmacNull.c b/Cryp= toPkg/Library/BaseCryptLibNull/Hmac/CryptHmacNull.c new file mode 100644 index 0000000000..0a76db41ec --- /dev/null +++ b/CryptoPkg/Library/BaseCryptLibNull/Hmac/CryptHmacNull.c @@ -0,0 +1,359 @@ +/** @file=0D + HMAC-SHA256/SHA384 Wrapper Implementation which does not provide real ca= pabilities.=0D +=0D +Copyright (c) 2016 - 2022, Intel Corporation. All rights reserved.
=0D +SPDX-License-Identifier: BSD-2-Clause-Patent=0D +=0D +**/=0D +=0D +#include "InternalCryptLib.h"=0D +=0D +/**=0D + Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA25= 6 use.=0D +=0D + Return NULL to indicate this interface is not supported.=0D +=0D + @return NULL This interface is not supported..=0D +=0D +**/=0D +VOID *=0D +EFIAPI=0D +HmacSha256New (=0D + VOID=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return NULL;=0D +}=0D +=0D +/**=0D + Release the specified HMAC_CTX context.=0D +=0D + This function will do nothing.=0D +=0D + @param[in] HmacSha256Ctx Pointer to the HMAC_CTX context to be release= d.=0D +=0D +**/=0D +VOID=0D +EFIAPI=0D +HmacSha256Free (=0D + IN VOID *HmacSha256Ctx=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return;=0D +}=0D +=0D +/**=0D + Set user-supplied key for subsequent use. It must be done before any=0D + calling to HmacSha256Update().=0D +=0D + Return FALSE to indicate this interface is not supported.=0D +=0D + @param[out] HmacSha256Context Pointer to HMAC-SHA256 context.=0D + @param[in] Key Pointer to the user-supplied key.=0D + @param[in] KeySize Key size in bytes.=0D +=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256SetKey (=0D + OUT VOID *HmacSha256Context,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Makes a copy of an existing HMAC-SHA256 context.=0D +=0D + Return FALSE to indicate this interface is not supported.=0D +=0D + @param[in] HmacSha256Context Pointer to HMAC-SHA256 context being c= opied.=0D + @param[out] NewHmacSha256Context Pointer to new HMAC-SHA256 context.=0D +=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256Duplicate (=0D + IN CONST VOID *HmacSha256Context,=0D + OUT VOID *NewHmacSha256Context=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Digests the input data and updates HMAC-SHA256 context.=0D +=0D + Return FALSE to indicate this interface is not supported.=0D +=0D + @param[in, out] HmacSha256Context Pointer to the HMAC-SHA256 context.=0D + @param[in] Data Pointer to the buffer containing the = data to be digested.=0D + @param[in] DataSize Size of Data buffer in bytes.=0D +=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256Update (=0D + IN OUT VOID *HmacSha256Context,=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Completes computation of the HMAC-SHA256 digest value.=0D +=0D + Return FALSE to indicate this interface is not supported.=0D +=0D + @param[in, out] HmacSha256Context Pointer to the HMAC-SHA256 context.= =0D + @param[out] HmacValue Pointer to a buffer that receives th= e HMAC-SHA256 digest=0D + value (32 bytes).=0D +=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256Final (=0D + IN OUT VOID *HmacSha256Context,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Computes the HMAC-SHA256 digest of a input data buffer.=0D +=0D + This function performs the HMAC-SHA256 digest of a given data buffer, an= d places=0D + the digest value into the specified memory.=0D +=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in] Data Pointer to the buffer containing the data to be= digested.=0D + @param[in] DataSize Size of Data buffer in bytes.=0D + @param[in] Key Pointer to the user-supplied key.=0D + @param[in] KeySize Key size in bytes.=0D + @param[out] HmacValue Pointer to a buffer that receives the HMAC-SHA2= 56 digest=0D + value (32 bytes).=0D +=0D + @retval TRUE HMAC-SHA256 digest computation succeeded.=0D + @retval FALSE HMAC-SHA256 digest computation failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha256All (=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA38= 4 use.=0D +=0D + @return Pointer to the HMAC_CTX context that has been initialized.=0D + If the allocations fails, HmacSha384New() returns NULL.=0D +=0D +**/=0D +VOID *=0D +EFIAPI=0D +HmacSha384New (=0D + VOID=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return NULL;=0D +}=0D +=0D +/**=0D + Release the specified HMAC_CTX context.=0D +=0D + @param[in] HmacSha384Ctx Pointer to the HMAC_CTX context to be release= d.=0D +=0D +**/=0D +VOID=0D +EFIAPI=0D +HmacSha384Free (=0D + IN VOID *HmacSha384Ctx=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return;=0D +}=0D +=0D +/**=0D + Set user-supplied key for subsequent use. It must be done before any=0D + calling to HmacSha384Update().=0D +=0D + If HmacSha384Context is NULL, then return FALSE.=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[out] HmacSha384Context Pointer to HMAC-SHA384 context.=0D + @param[in] Key Pointer to the user-supplied key.=0D + @param[in] KeySize Key size in bytes.=0D +=0D + @retval TRUE The Key is set successfully.=0D + @retval FALSE The Key is set unsuccessfully.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384SetKey (=0D + OUT VOID *HmacSha384Context,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Makes a copy of an existing HMAC-SHA384 context.=0D +=0D + If HmacSha384Context is NULL, then return FALSE.=0D + If NewHmacSha384Context is NULL, then return FALSE.=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in] HmacSha384Context Pointer to HMAC-SHA384 context being c= opied.=0D + @param[out] NewHmacSha384Context Pointer to new HMAC-SHA384 context.=0D +=0D + @retval TRUE HMAC-SHA384 context copy succeeded.=0D + @retval FALSE HMAC-SHA384 context copy failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384Duplicate (=0D + IN CONST VOID *HmacSha384Context,=0D + OUT VOID *NewHmacSha384Context=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Digests the input data and updates HMAC-SHA384 context.=0D +=0D + This function performs HMAC-SHA384 digest on a data buffer of the specif= ied size.=0D + It can be called multiple times to compute the digest of long or discont= inuous data streams.=0D + HMAC-SHA384 context should be initialized by HmacSha384New(), and should= not be finalized=0D + by HmacSha384Final(). Behavior with invalid context is undefined.=0D +=0D + If HmacSha384Context is NULL, then return FALSE.=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in, out] HmacSha384Context Pointer to the HMAC-SHA384 context.=0D + @param[in] Data Pointer to the buffer containing the = data to be digested.=0D + @param[in] DataSize Size of Data buffer in bytes.=0D +=0D + @retval TRUE HMAC-SHA384 data digest succeeded.=0D + @retval FALSE HMAC-SHA384 data digest failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384Update (=0D + IN OUT VOID *HmacSha384Context,=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Completes computation of the HMAC-SHA384 digest value.=0D +=0D + This function completes HMAC-SHA384 hash computation and retrieves the d= igest value into=0D + the specified memory. After this function has been called, the HMAC-SHA3= 84 context cannot=0D + be used again.=0D + HMAC-SHA384 context should be initialized by HmacSha384New(), and should= not be finalized=0D + by HmacSha384Final(). Behavior with invalid HMAC-SHA384 context is undef= ined.=0D +=0D + If HmacSha384Context is NULL, then return FALSE.=0D + If HmacValue is NULL, then return FALSE.=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in, out] HmacSha384Context Pointer to the HMAC-SHA384 context.= =0D + @param[out] HmacValue Pointer to a buffer that receives th= e HMAC-SHA384 digest=0D + value (48 bytes).=0D +=0D + @retval TRUE HMAC-SHA384 digest computation succeeded.=0D + @retval FALSE HMAC-SHA384 digest computation failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384Final (=0D + IN OUT VOID *HmacSha384Context,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D +=0D +/**=0D + Computes the HMAC-SHA384 digest of a input data buffer.=0D +=0D + This function performs the HMAC-SHA384 digest of a given data buffer, an= d places=0D + the digest value into the specified memory.=0D +=0D + If this interface is not supported, then return FALSE.=0D +=0D + @param[in] Data Pointer to the buffer containing the data to be= digested.=0D + @param[in] DataSize Size of Data buffer in bytes.=0D + @param[in] Key Pointer to the user-supplied key.=0D + @param[in] KeySize Key size in bytes.=0D + @param[out] HmacValue Pointer to a buffer that receives the HMAC-SHA3= 84 digest=0D + value (48 bytes).=0D +=0D + @retval TRUE HMAC-SHA384 digest computation succeeded.=0D + @retval FALSE HMAC-SHA384 digest computation failed.=0D + @retval FALSE This interface is not supported.=0D +=0D +**/=0D +BOOLEAN=0D +EFIAPI=0D +HmacSha384All (=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + ASSERT (FALSE);=0D + return FALSE;=0D +}=0D diff --git a/CryptoPkg/Library/BaseCryptLibNull/Hmac/CryptHmacSha256Null.c = b/CryptoPkg/Library/BaseCryptLibNull/Hmac/CryptHmacSha256Null.c deleted file mode 100644 index 2e3cb3bdfe..0000000000 --- a/CryptoPkg/Library/BaseCryptLibNull/Hmac/CryptHmacSha256Null.c +++ /dev/null @@ -1,139 +0,0 @@ -/** @file=0D - HMAC-SHA256 Wrapper Implementation which does not provide real capabilit= ies.=0D -=0D -Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.
=0D -SPDX-License-Identifier: BSD-2-Clause-Patent=0D -=0D -**/=0D -=0D -#include "InternalCryptLib.h"=0D -=0D -/**=0D - Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA25= 6 use.=0D -=0D - Return NULL to indicate this interface is not supported.=0D -=0D - @return NULL This interface is not supported..=0D -=0D -**/=0D -VOID *=0D -EFIAPI=0D -HmacSha256New (=0D - VOID=0D - )=0D -{=0D - ASSERT (FALSE);=0D - return NULL;=0D -}=0D -=0D -/**=0D - Release the specified HMAC_CTX context.=0D -=0D - This function will do nothing.=0D -=0D - @param[in] HmacSha256Ctx Pointer to the HMAC_CTX context to be release= d.=0D -=0D -**/=0D -VOID=0D -EFIAPI=0D -HmacSha256Free (=0D - IN VOID *HmacSha256Ctx=0D - )=0D -{=0D - ASSERT (FALSE);=0D - return;=0D -}=0D -=0D -/**=0D - Set user-supplied key for subsequent use. It must be done before any=0D - calling to HmacSha256Update().=0D -=0D - Return FALSE to indicate this interface is not supported.=0D -=0D - @param[out] HmacSha256Context Pointer to HMAC-SHA256 context.=0D - @param[in] Key Pointer to the user-supplied key.=0D - @param[in] KeySize Key size in bytes.=0D -=0D - @retval FALSE This interface is not supported.=0D -=0D -**/=0D -BOOLEAN=0D -EFIAPI=0D -HmacSha256SetKey (=0D - OUT VOID *HmacSha256Context,=0D - IN CONST UINT8 *Key,=0D - IN UINTN KeySize=0D - )=0D -{=0D - ASSERT (FALSE);=0D - return FALSE;=0D -}=0D -=0D -/**=0D - Makes a copy of an existing HMAC-SHA256 context.=0D -=0D - Return FALSE to indicate this interface is not supported.=0D -=0D - @param[in] HmacSha256Context Pointer to HMAC-SHA256 context being c= opied.=0D - @param[out] NewHmacSha256Context Pointer to new HMAC-SHA256 context.=0D -=0D - @retval FALSE This interface is not supported.=0D -=0D -**/=0D -BOOLEAN=0D -EFIAPI=0D -HmacSha256Duplicate (=0D - IN CONST VOID *HmacSha256Context,=0D - OUT VOID *NewHmacSha256Context=0D - )=0D -{=0D - ASSERT (FALSE);=0D - return FALSE;=0D -}=0D -=0D -/**=0D - Digests the input data and updates HMAC-SHA256 context.=0D -=0D - Return FALSE to indicate this interface is not supported.=0D -=0D - @param[in, out] HmacSha256Context Pointer to the HMAC-SHA256 context.=0D - @param[in] Data Pointer to the buffer containing the = data to be digested.=0D - @param[in] DataSize Size of Data buffer in bytes.=0D -=0D - @retval FALSE This interface is not supported.=0D -=0D -**/=0D -BOOLEAN=0D -EFIAPI=0D -HmacSha256Update (=0D - IN OUT VOID *HmacSha256Context,=0D - IN CONST VOID *Data,=0D - IN UINTN DataSize=0D - )=0D -{=0D - ASSERT (FALSE);=0D - return FALSE;=0D -}=0D -=0D -/**=0D - Completes computation of the HMAC-SHA256 digest value.=0D -=0D - Return FALSE to indicate this interface is not supported.=0D -=0D - @param[in, out] HmacSha256Context Pointer to the HMAC-SHA256 context.= =0D - @param[out] HmacValue Pointer to a buffer that receives th= e HMAC-SHA256 digest=0D - value (32 bytes).=0D -=0D - @retval FALSE This interface is not supported.=0D -=0D -**/=0D -BOOLEAN=0D -EFIAPI=0D -HmacSha256Final (=0D - IN OUT VOID *HmacSha256Context,=0D - OUT UINT8 *HmacValue=0D - )=0D -{=0D - ASSERT (FALSE);=0D - return FALSE;=0D -}=0D --=20 2.26.2.windows.1