From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mx.groups.io with SMTP id smtpd.web08.17427.1661170806673624724 for ; Mon, 22 Aug 2022 05:20:07 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=XeNsVUeH; spf=pass (domain: intel.com, ip: 192.55.52.136, 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=1661170806; x=1692706806; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=J+92NM3rY4h0APh/ivU7DsHI3vi1iliitksUztiEG+s=; b=XeNsVUeHRGvKwY6IsTCThYRkQE9znbehF9GZ/lpAkjpFZ+xuNIZax6ms zpiP7kmjKSPX/Md8WGatPhH1x0ykV7NOBXVEwNjJeeE76BO8QVrRvNijw E+g9303Dds6y7SpNicOztiJ3CguJ551gAfLQa/muFB7EFVWy9NGk1THXa 3agvm81V5P+ANYxcE4Q2C/ktTTCv1vtGqqFsbW6qafyoNrfVQ7VS93QYL XGreZky7rcHY37TQD/v6AJN0GRrojvltQPkR8nJDvxopf9teVECmaOh9c /qL/a23OGidoxhtJf1qlWu4/5kNMtDmEwQbp4BU+DtB8gL7do/2qrEZNl A==; X-IronPort-AV: E=McAfee;i="6500,9779,10446"; a="273153876" X-IronPort-AV: E=Sophos;i="5.93,254,1654585200"; d="scan'208";a="273153876" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Aug 2022 05:20:06 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,254,1654585200"; d="scan'208";a="669515413" Received: from shwdesssddpdqi.ccr.corp.intel.com ([10.239.157.129]) by fmsmga008.fm.intel.com with ESMTP; 22 Aug 2022 05:20:03 -0700 From: "Qi Zhang" To: devel@edk2.groups.io Cc: Qi Zhang , Jiewen Yao , Jian J Wang , Xiaoyu Lu , Guomin Jiang Subject: [PATCH] CryptoPkg: Add HMAC-SHA384 cipher support. Date: Mon, 22 Aug 2022 20:19:58 +0800 Message-Id: <20220822121958.6137-1-qi1.zhang@intel.com> X-Mailer: git-send-email 2.26.2.windows.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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 --- CryptoPkg/Driver/Crypto.c | 221 ++++++ CryptoPkg/Include/Library/BaseCryptLib.h | 188 ++++++ .../Pcd/PcdCryptoServiceFamilyEnable.h | 13 + .../Library/BaseCryptLib/BaseCryptLib.inf | 2 +- .../Library/BaseCryptLib/Hmac/CryptHmac.c | 629 ++++++++++++++++++ .../Library/BaseCryptLib/Hmac/CryptHmacNull.c | 359 ++++++++++ .../BaseCryptLib/Hmac/CryptHmacSha256.c | 217 ------ .../BaseCryptLib/Hmac/CryptHmacSha256Null.c | 139 ---- .../Library/BaseCryptLib/PeiCryptLib.inf | 2 +- .../Library/BaseCryptLib/RuntimeCryptLib.inf | 2 +- .../Library/BaseCryptLib/SecCryptLib.inf | 2 +- .../Library/BaseCryptLib/SmmCryptLib.inf | 2 +- .../BaseCryptLib/UnitTestHostBaseCryptLib.inf | 2 +- .../BaseCryptLibNull/BaseCryptLibNull.inf | 2 +- .../BaseCryptLibNull/Hmac/CryptHmacNull.c | 359 ++++++++++ .../Hmac/CryptHmacSha256Null.c | 139 ---- .../BaseCryptLibOnProtocolPpi/CryptLib.c | 212 ++++++ CryptoPkg/Private/Protocol/Crypto.h | 197 ++++++ .../UnitTest/Library/BaseCryptLib/HmacTests.c | 19 + 19 files changed, 2204 insertions(+), 502 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/Driver/Crypto.c b/CryptoPkg/Driver/Crypto.c index 76cb9f4da0..cdbba2b811 100644 --- a/CryptoPkg/Driver/Crypto.c +++ b/CryptoPkg/Driver/Crypto.c @@ -1847,6 +1847,218 @@ CryptoServiceHmacSha256Final ( return CALL_BASECRYPTLIB (HmacSha256.Services.Final, HmacSha256Final, (H= macSha256Context, HmacValue), 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 +CryptoServiceHmacSha256All (=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 CALL_BASECRYPTLIB (HmacSha256.Services.All, HmacSha256All, (Data,= DataSize, Key, KeySize, HmacValue), 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 +CryptoServiceHmacSha384New (=0D + VOID=0D + )=0D +{=0D + return CALL_BASECRYPTLIB (HmacSha384.Services.New, HmacSha384New, (), NU= LL);=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 +CryptoServiceHmacSha384Free (=0D + IN VOID *HmacSha384Ctx=0D + )=0D +{=0D + CALL_VOID_BASECRYPTLIB (HmacSha384.Services.Free, HmacSha384Free, (HmacS= ha384Ctx));=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 +CryptoServiceHmacSha384SetKey (=0D + OUT VOID *HmacSha384Context,=0D + IN CONST UINT8 *Key,=0D + IN UINTN KeySize=0D + )=0D +{=0D + return CALL_BASECRYPTLIB (HmacSha384.Services.SetKey, HmacSha384SetKey, = (HmacSha384Context, Key, KeySize), 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 +CryptoServiceHmacSha384Duplicate (=0D + IN CONST VOID *HmacSha384Context,=0D + OUT VOID *NewHmacSha384Context=0D + )=0D +{=0D + return CALL_BASECRYPTLIB (HmacSha384.Services.Duplicate, HmacSha256Dupli= cate, (HmacSha384Context, NewHmacSha384Context), 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 +CryptoServiceHmacSha384Update (=0D + IN OUT VOID *HmacSha384Context,=0D + IN CONST VOID *Data,=0D + IN UINTN DataSize=0D + )=0D +{=0D + return CALL_BASECRYPTLIB (HmacSha384.Services.Update, HmacSha384Update, = (HmacSha384Context, Data, DataSize), 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 +CryptoServiceHmacSha384Final (=0D + IN OUT VOID *HmacSha384Context,=0D + OUT UINT8 *HmacValue=0D + )=0D +{=0D + return CALL_BASECRYPTLIB (HmacSha384.Services.Final, HmacSha384Final, (H= macSha384Context, HmacValue), 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 +CryptoServiceHmacSha384All (=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 CALL_BASECRYPTLIB (HmacSha384.Services.All, HmacSha384All, (Data,= DataSize, Key, KeySize, HmacValue), FALSE);=0D +}=0D +=0D // =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=0D // Symmetric Cryptography Primitive=0D // =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=0D @@ -4606,6 +4818,15 @@ const EDKII_CRYPTO_PROTOCOL mEdkiiCrypto =3D { CryptoServiceHmacSha256Duplicate,=0D CryptoServiceHmacSha256Update,=0D CryptoServiceHmacSha256Final,=0D + CryptoServiceHmacSha256All,=0D + /// HMAC SHA384=0D + CryptoServiceHmacSha384New,=0D + CryptoServiceHmacSha384Free,=0D + CryptoServiceHmacSha384SetKey,=0D + CryptoServiceHmacSha384Duplicate,=0D + CryptoServiceHmacSha384Update,=0D + CryptoServiceHmacSha384Final,=0D + CryptoServiceHmacSha384All,=0D /// Md4 - deprecated and unsupported=0D DeprecatedCryptoServiceMd4GetContextSize,=0D DeprecatedCryptoServiceMd4Init,=0D diff --git a/CryptoPkg/Include/Library/BaseCryptLib.h b/CryptoPkg/Include/L= ibrary/BaseCryptLib.h index 7d1499350a..3a42e3494f 100644 --- a/CryptoPkg/Include/Library/BaseCryptLib.h +++ b/CryptoPkg/Include/Library/BaseCryptLib.h @@ -1045,6 +1045,194 @@ HmacSha256Final ( OUT UINT8 *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] HashValue 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 +/**=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 +/**=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 +/**=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 +/**=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 +/**=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 +/**=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 +/**=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] HashValue 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 // =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=0D // Symmetric Cryptography Primitive=0D // =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=0D diff --git a/CryptoPkg/Include/Pcd/PcdCryptoServiceFamilyEnable.h b/CryptoP= kg/Include/Pcd/PcdCryptoServiceFamilyEnable.h index 3d53c2f105..e646d8ac05 100644 --- a/CryptoPkg/Include/Pcd/PcdCryptoServiceFamilyEnable.h +++ b/CryptoPkg/Include/Pcd/PcdCryptoServiceFamilyEnable.h @@ -53,9 +53,22 @@ typedef struct { UINT8 Duplicate : 1;=0D UINT8 Update : 1;=0D UINT8 Final : 1;=0D + UINT8 All : 1;=0D } Services;=0D UINT32 Family;=0D } HmacSha256;=0D + union {=0D + struct {=0D + UINT8 New : 1;=0D + UINT8 Free : 1;=0D + UINT8 SetKey : 1;=0D + UINT8 Duplicate : 1;=0D + UINT8 Update : 1;=0D + UINT8 Final : 1;=0D + UINT8 All : 1;=0D + } Services;=0D + UINT32 Family;=0D + } HmacSha384;=0D union {=0D struct {=0D UINT8 GetContextSize : 1;=0D diff --git a/CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf b/CryptoPkg/Li= brary/BaseCryptLib/BaseCryptLib.inf index 3d7b917103..2a9664ad3e 100644 --- a/CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf +++ b/CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf @@ -35,7 +35,7 @@ Hash/CryptSha512.c=0D Hash/CryptSm3.c=0D Hash/CryptParallelHashNull.c=0D - Hmac/CryptHmacSha256.c=0D + Hmac/CryptHmac.c=0D Kdf/CryptHkdf.c=0D Cipher/CryptAes.c=0D Pk/CryptRsaBasic.c=0D 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/BaseCryptLib/PeiCryptLib.inf b/CryptoPkg/Lib= rary/BaseCryptLib/PeiCryptLib.inf index 01de27e037..f88f8312f6 100644 --- a/CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf +++ b/CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf @@ -41,7 +41,7 @@ Hash/CryptSm3.c=0D Hash/CryptSha512.c=0D Hash/CryptParallelHashNull.c=0D - Hmac/CryptHmacSha256.c=0D + Hmac/CryptHmac.c=0D Kdf/CryptHkdf.c=0D Cipher/CryptAesNull.c=0D Pk/CryptRsaBasic.c=0D diff --git a/CryptoPkg/Library/BaseCryptLib/RuntimeCryptLib.inf b/CryptoPkg= /Library/BaseCryptLib/RuntimeCryptLib.inf index d28fb98b66..9213952701 100644 --- a/CryptoPkg/Library/BaseCryptLib/RuntimeCryptLib.inf +++ b/CryptoPkg/Library/BaseCryptLib/RuntimeCryptLib.inf @@ -41,7 +41,7 @@ Hash/CryptSm3.c=0D Hash/CryptSha512.c=0D Hash/CryptParallelHashNull.c=0D - Hmac/CryptHmacSha256.c=0D + Hmac/CryptHmac.c=0D Kdf/CryptHkdf.c=0D Cipher/CryptAes.c=0D Pk/CryptRsaBasic.c=0D diff --git a/CryptoPkg/Library/BaseCryptLib/SecCryptLib.inf b/CryptoPkg/Lib= rary/BaseCryptLib/SecCryptLib.inf index 070b44447e..0b1dd31c41 100644 --- a/CryptoPkg/Library/BaseCryptLib/SecCryptLib.inf +++ b/CryptoPkg/Library/BaseCryptLib/SecCryptLib.inf @@ -34,7 +34,7 @@ Hash/CryptSha256Null.c=0D Hash/CryptSm3Null.c=0D Hash/CryptParallelHashNull.c=0D - Hmac/CryptHmacSha256Null.c=0D + Hmac/CryptHmacNull.c=0D Kdf/CryptHkdfNull.c=0D Cipher/CryptAesNull.c=0D Pk/CryptRsaBasicNull.c=0D diff --git a/CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf b/CryptoPkg/Lib= rary/BaseCryptLib/SmmCryptLib.inf index 91a1715095..ed76520fcc 100644 --- a/CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf +++ b/CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf @@ -42,7 +42,7 @@ Hash/CryptXkcp.c=0D Hash/CryptCShake256.c=0D Hash/CryptParallelHash.c=0D - Hmac/CryptHmacSha256.c=0D + Hmac/CryptHmac.c=0D Kdf/CryptHkdfNull.c=0D Cipher/CryptAes.c=0D Pk/CryptRsaBasic.c=0D diff --git a/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf b/= CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf index 11ff1c6931..63282dc5ab 100644 --- a/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf +++ b/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf @@ -28,7 +28,7 @@ Hash/CryptSha256.c=0D Hash/CryptSha512.c=0D Hash/CryptSm3.c=0D - Hmac/CryptHmacSha256.c=0D + Hmac/CryptHmac.c=0D Kdf/CryptHkdf.c=0D Cipher/CryptAes.c=0D Pk/CryptRsaBasic.c=0D diff --git a/CryptoPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf b/Cryp= toPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf index 63d1d82d19..728e0793ac 100644 --- a/CryptoPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf +++ b/CryptoPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf @@ -35,7 +35,7 @@ Hash/CryptSha512Null.c=0D Hash/CryptSm3Null.c=0D Hash/CryptParallelHashNull.c=0D - Hmac/CryptHmacSha256Null.c=0D + Hmac/CryptHmacNull.c=0D Kdf/CryptHkdfNull.c=0D Cipher/CryptAesNull.c=0D Pk/CryptRsaBasicNull.c=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 diff --git a/CryptoPkg/Library/BaseCryptLibOnProtocolPpi/CryptLib.c b/Crypt= oPkg/Library/BaseCryptLibOnProtocolPpi/CryptLib.c index 8ee1b53cf9..0218e9b594 100644 --- a/CryptoPkg/Library/BaseCryptLibOnProtocolPpi/CryptLib.c +++ b/CryptoPkg/Library/BaseCryptLibOnProtocolPpi/CryptLib.c @@ -1201,6 +1201,218 @@ HmacSha256Final ( CALL_CRYPTO_SERVICE (HmacSha256Final, (HmacSha256Context, HmacValue), FA= LSE);=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 + CALL_CRYPTO_SERVICE (HmacSha256All, (Data, DataSize, Key, KeySize, HmacV= alue), 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 + CALL_CRYPTO_SERVICE (HmacSha384New, (), 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 + CALL_VOID_CRYPTO_SERVICE (HmacSha384Free, (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 + CALL_CRYPTO_SERVICE (HmacSha384SetKey, (HmacSha384Context, Key, KeySize)= , 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 + CALL_CRYPTO_SERVICE (HmacSha384Duplicate, (HmacSha384Context, NewHmacSha= 384Context), 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 + CALL_CRYPTO_SERVICE (HmacSha384Update, (HmacSha384Context, Data, DataSiz= e), 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 + CALL_CRYPTO_SERVICE (HmacSha384Final, (HmacSha384Context, HmacValue), FA= LSE);=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 + CALL_CRYPTO_SERVICE (HmacSha384All, (Data, DataSize, Key, KeySize, HmacV= alue), FALSE);=0D +}=0D +=0D // =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=0D // Symmetric Cryptography Primitive=0D // =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=0D diff --git a/CryptoPkg/Private/Protocol/Crypto.h b/CryptoPkg/Private/Protoc= ol/Crypto.h index c417568e96..6c14cdedca 100644 --- a/CryptoPkg/Private/Protocol/Crypto.h +++ b/CryptoPkg/Private/Protocol/Crypto.h @@ -266,6 +266,194 @@ BOOLEAN OUT UINT8 *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 +typedef=0D +BOOLEAN=0D +(EFIAPI *EDKII_CRYPTO_HMAC_SHA256_ALL)(=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 +/**=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 +typedef=0D +VOID *=0D +(EFIAPI *EDKII_CRYPTO_HMAC_SHA384_NEW)(=0D + VOID=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 +typedef=0D +VOID=0D +(EFIAPI *EDKII_CRYPTO_HMAC_SHA384_FREE)(=0D + IN VOID *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 +typedef=0D +BOOLEAN=0D +(EFIAPI *EDKII_CRYPTO_HMAC_SHA384_SET_KEY)(=0D + OUT VOID *HmacSha384Context,=0D + IN CONST UINT8 *Key,=0D + IN UINTN 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 +typedef=0D +BOOLEAN=0D +(EFIAPI *EDKII_CRYPTO_HMAC_SHA384_DUPLICATE)(=0D + IN CONST VOID *HmacSha384Context,=0D + OUT VOID *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 +typedef=0D +BOOLEAN=0D +(EFIAPI *EDKII_CRYPTO_HMAC_SHA384_UPDATE)(=0D + IN OUT VOID *HmacSha384Context,=0D + IN CONST VOID *Data,=0D + IN UINTN 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 +typedef=0D +BOOLEAN=0D +(EFIAPI *EDKII_CRYPTO_HMAC_SHA384_FINAL)(=0D + IN OUT VOID *HmacSha384Context,=0D + OUT UINT8 *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 +typedef=0D +BOOLEAN=0D +(EFIAPI *EDKII_CRYPTO_HMAC_SHA384_ALL)(=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 // =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=0D // One-Way Cryptographic Hash Primitives=0D // =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=0D @@ -3513,6 +3701,15 @@ struct _EDKII_CRYPTO_PROTOCOL { EDKII_CRYPTO_HMAC_SHA256_DUPLICATE HmacSha256Duplicate;= =0D EDKII_CRYPTO_HMAC_SHA256_UPDATE HmacSha256Update;=0D EDKII_CRYPTO_HMAC_SHA256_FINAL HmacSha256Final;=0D + EDKII_CRYPTO_HMAC_SHA256_ALL HmacSha256All;=0D + /// HMAC SHA384=0D + EDKII_CRYPTO_HMAC_SHA384_NEW HmacSha384New;=0D + EDKII_CRYPTO_HMAC_SHA384_FREE HmacSha384Free;=0D + EDKII_CRYPTO_HMAC_SHA384_SET_KEY HmacSha384SetKey;=0D + EDKII_CRYPTO_HMAC_SHA384_DUPLICATE HmacSha384Duplicate;= =0D + EDKII_CRYPTO_HMAC_SHA384_UPDATE HmacSha384Update;=0D + EDKII_CRYPTO_HMAC_SHA384_FINAL HmacSha384Final;=0D + EDKII_CRYPTO_HMAC_SHA384_ALL HmacSha384All;=0D /// Md4 - deprecated and unsupported=0D DEPRECATED_EDKII_CRYPTO_MD4_GET_CONTEXT_SIZE DeprecatedMd4GetConte= xtSize;=0D DEPRECATED_EDKII_CRYPTO_MD4_INIT DeprecatedMd4Init;=0D diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c b/Cry= ptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c index 595729424b..9c5b39410d 100644 --- a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c @@ -64,6 +64,23 @@ GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha256Dig= est[] =3D { 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, 0x37, 0x6c, = 0x2e, 0x32, 0xcf, 0xf7=0D };=0D =0D +//=0D +// Key value for HMAC-SHA-384 validation. (From "4. Test Vectors" of IETF = RFC4231)=0D +//=0D +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha384Key[20] =3D {=0D + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, = 0x0b, 0x0b, 0x0b, 0x0b,=0D + 0x0b, 0x0b, 0x0b, 0x0b=0D +};=0D +=0D +//=0D +// Result for HMAC-SHA-384 ("Hi There"). (From "4. Test Vectors" of IETF R= FC4231)=0D +//=0D +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha384Digest[] =3D {=0D + 0xaf, 0xd0, 0x39, 0x44, 0xd8, 0x48, 0x95, 0x62, 0x6b, 0x08, 0x25, 0xf4, = 0xab, 0x46, 0x90, 0x7f,=0D + 0x15, 0xf9, 0xda, 0xdb, 0xe4, 0x10, 0x1e, 0xc6, 0x82, 0xaa, 0x03, 0x4c, = 0x7c, 0xeb, 0xc5, 0x9c,=0D + 0xfa, 0xea, 0x9e, 0xa9, 0x07, 0x6e, 0xde, 0x7f, 0x4a, 0xf1, 0x52, 0xe8, = 0xb2, 0xfa, 0x9c, 0xb6=0D +};=0D +=0D typedef=0D VOID *=0D (EFIAPI *EFI_HMAC_NEW)(=0D @@ -109,6 +126,7 @@ typedef struct { // HMAC_TEST_CONTEXT mHmacMd5TestCtx =3D {MD5_DIGEST_SIZE, Hma= cMd5New, HmacMd5SetKey, HmacMd5Update, HmacMd5Final, HmacMd5Key= , sizeof(HmacMd5Key), HmacMd5Digest};=0D // HMAC_TEST_CONTEXT mHmacSha1TestCtx =3D {SHA1_DIGEST_SIZE, Hma= cSha1New, HmacSha1SetKey, HmacSha1Update, HmacSha1Final, HmacSha1Ke= y, sizeof(HmacSha1Key), HmacSha1Digest};=0D HMAC_TEST_CONTEXT mHmacSha256TestCtx =3D { SHA256_DIGEST_SIZE, HmacSha256= New, HmacSha256SetKey, HmacSha256Update, HmacSha256Final, HmacSha256Key, si= zeof (HmacSha256Key), HmacSha256Digest };=0D +HMAC_TEST_CONTEXT mHmacSha384TestCtx =3D { SHA384_DIGEST_SIZE, HmacSha384= New, HmacSha384SetKey, HmacSha384Update, HmacSha384Final, HmacSha384Key, si= zeof (HmacSha384Key), HmacSha384Digest };=0D =0D UNIT_TEST_STATUS=0D EFIAPI=0D @@ -174,6 +192,7 @@ TEST_DESC mHmacTest[] =3D { // -----Description---------------------Class---------------------Functi= on---------------Pre------------------Post------------Context=0D //=0D { "TestVerifyHmacSha256()", "CryptoPkg.BaseCryptLib.Hmac", TestVerifyHma= c, TestVerifyHmacPreReq, TestVerifyHmacCleanUp, &mHmacSha256TestCtx },=0D + { "TestVerifyHmacSha384()", "CryptoPkg.BaseCryptLib.Hmac", TestVerifyHma= c, TestVerifyHmacPreReq, TestVerifyHmacCleanUp, &mHmacSha384TestCtx },=0D // These functions have been deprecated but they've been left commented = out for future reference=0D // {"TestVerifyHmacMd5()", "CryptoPkg.BaseCryptLib.Hmac", TestVerif= yHmac, TestVerifyHmacPreReq, TestVerifyHmacCleanUp, &mHmacMd5TestCtx},=0D // {"TestVerifyHmacSha1()", "CryptoPkg.BaseCryptLib.Hmac", TestVerif= yHmac, TestVerifyHmacPreReq, TestVerifyHmacCleanUp, &mHmacSha1TestCtx},=0D --=20 2.26.2.windows.1