]> git.proxmox.com Git - mirror_edk2.git/blobdiff - CryptoPkg/Include/Library/BaseCryptLib.h
CryptoPkg: Apply uncrustify changes
[mirror_edk2.git] / CryptoPkg / Include / Library / BaseCryptLib.h
index da32bb2444fd6e2cc49680da87092576edf00088..f4bc7c0d73d9d570f6be408bf0aaee1f27d0b5af 100644 (file)
@@ -4,7 +4,7 @@
   primitives (Hash Serials, HMAC, RSA, Diffie-Hellman, etc) for UEFI security\r
   functionality enabling.\r
 \r
   primitives (Hash Serials, HMAC, RSA, Diffie-Hellman, etc) for UEFI security\r
   functionality enabling.\r
 \r
-Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2009 - 2020, Intel Corporation. All rights reserved.<BR>\r
 SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
@@ -14,20 +14,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 \r
 #include <Uefi/UefiBaseType.h>\r
 \r
 \r
 #include <Uefi/UefiBaseType.h>\r
 \r
-///\r
-/// MD4 digest size in bytes\r
-///\r
-#define MD4_DIGEST_SIZE     16\r
-\r
 ///\r
 /// MD5 digest size in bytes\r
 ///\r
 ///\r
 /// MD5 digest size in bytes\r
 ///\r
-#define MD5_DIGEST_SIZE     16\r
+#define MD5_DIGEST_SIZE  16\r
 \r
 ///\r
 /// SHA-1 digest size in bytes.\r
 ///\r
 \r
 ///\r
 /// SHA-1 digest size in bytes.\r
 ///\r
-#define SHA1_DIGEST_SIZE    20\r
+#define SHA1_DIGEST_SIZE  20\r
 \r
 ///\r
 /// SHA-256 digest size in bytes\r
 \r
 ///\r
 /// SHA-256 digest size in bytes\r
@@ -47,17 +42,17 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 ///\r
 /// SM3 digest size in bytes\r
 ///\r
 ///\r
 /// SM3 digest size in bytes\r
 ///\r
-#define SM3_256_DIGEST_SIZE 32\r
+#define SM3_256_DIGEST_SIZE  32\r
 \r
 ///\r
 /// TDES block size in bytes\r
 ///\r
 \r
 ///\r
 /// TDES block size in bytes\r
 ///\r
-#define TDES_BLOCK_SIZE     8\r
+#define TDES_BLOCK_SIZE  8\r
 \r
 ///\r
 /// AES block size in bytes\r
 ///\r
 \r
 ///\r
 /// AES block size in bytes\r
 ///\r
-#define AES_BLOCK_SIZE      16\r
+#define AES_BLOCK_SIZE  16\r
 \r
 ///\r
 /// RSA Key Tags Definition used in RsaSetKey() function for key component identification.\r
 \r
 ///\r
 /// RSA Key Tags Definition used in RsaSetKey() function for key component identification.\r
@@ -73,149 +68,11 @@ typedef enum {
   RsaKeyQInv    ///< The CRT coefficient (== 1/q mod p)\r
 } RSA_KEY_TAG;\r
 \r
   RsaKeyQInv    ///< The CRT coefficient (== 1/q mod p)\r
 } RSA_KEY_TAG;\r
 \r
-//=====================================================================================\r
+// =====================================================================================\r
 //    One-Way Cryptographic Hash Primitives\r
 //    One-Way Cryptographic Hash Primitives\r
-//=====================================================================================\r
-\r
-/**\r
-  Retrieves the size, in bytes, of the context buffer required for MD4 hash operations.\r
-\r
-  If this interface is not supported, then return zero.\r
-\r
-  @return  The size, in bytes, of the context buffer required for MD4 hash operations.\r
-  @retval  0   This interface is not supported.\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-Md4GetContextSize (\r
-  VOID\r
-  );\r
-\r
-/**\r
-  Initializes user-supplied memory pointed by Md4Context as MD4 hash context for\r
-  subsequent use.\r
-\r
-  If Md4Context is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[out]  Md4Context  Pointer to MD4 context being initialized.\r
-\r
-  @retval TRUE   MD4 context initialization succeeded.\r
-  @retval FALSE  MD4 context initialization failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-Md4Init (\r
-  OUT  VOID  *Md4Context\r
-  );\r
-\r
-/**\r
-  Makes a copy of an existing MD4 context.\r
-\r
-  If Md4Context is NULL, then return FALSE.\r
-  If NewMd4Context is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in]  Md4Context     Pointer to MD4 context being copied.\r
-  @param[out] NewMd4Context  Pointer to new MD4 context.\r
-\r
-  @retval TRUE   MD4 context copy succeeded.\r
-  @retval FALSE  MD4 context copy failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-Md4Duplicate (\r
-  IN   CONST VOID  *Md4Context,\r
-  OUT  VOID        *NewMd4Context\r
-  );\r
-\r
-/**\r
-  Digests the input data and updates MD4 context.\r
-\r
-  This function performs MD4 digest on a data buffer of the specified size.\r
-  It can be called multiple times to compute the digest of long or discontinuous data streams.\r
-  MD4 context should be already correctly initialized by Md4Init(), and should not be finalized\r
-  by Md4Final(). Behavior with invalid context is undefined.\r
-\r
-  If Md4Context is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in, out]  Md4Context  Pointer to the MD4 context.\r
-  @param[in]       Data        Pointer to the buffer containing the data to be hashed.\r
-  @param[in]       DataSize    Size of Data buffer in bytes.\r
-\r
-  @retval TRUE   MD4 data digest succeeded.\r
-  @retval FALSE  MD4 data digest failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-Md4Update (\r
-  IN OUT  VOID        *Md4Context,\r
-  IN      CONST VOID  *Data,\r
-  IN      UINTN       DataSize\r
-  );\r
-\r
-/**\r
-  Completes computation of the MD4 digest value.\r
-\r
-  This function completes MD4 hash computation and retrieves the digest value into\r
-  the specified memory. After this function has been called, the MD4 context cannot\r
-  be used again.\r
-  MD4 context should be already correctly initialized by Md4Init(), and should not be\r
-  finalized by Md4Final(). Behavior with invalid MD4 context is undefined.\r
-\r
-  If Md4Context is NULL, then return FALSE.\r
-  If HashValue is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in, out]  Md4Context  Pointer to the MD4 context.\r
-  @param[out]      HashValue   Pointer to a buffer that receives the MD4 digest\r
-                               value (16 bytes).\r
-\r
-  @retval TRUE   MD4 digest computation succeeded.\r
-  @retval FALSE  MD4 digest computation failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-Md4Final (\r
-  IN OUT  VOID   *Md4Context,\r
-  OUT     UINT8  *HashValue\r
-  );\r
-\r
-/**\r
-  Computes the MD4 message digest of a input data buffer.\r
-\r
-  This function performs the MD4 message digest of a given data buffer, and places\r
-  the digest value into the specified memory.\r
-\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in]   Data        Pointer to the buffer containing the data to be hashed.\r
-  @param[in]   DataSize    Size of Data buffer in bytes.\r
-  @param[out]  HashValue   Pointer to a buffer that receives the MD4 digest\r
-                           value (16 bytes).\r
-\r
-  @retval TRUE   MD4 digest computation succeeded.\r
-  @retval FALSE  MD4 digest computation failed.\r
-  @retval FALSE  This interface is not supported.\r
+// =====================================================================================\r
 \r
 \r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-Md4HashAll (\r
-  IN   CONST VOID  *Data,\r
-  IN   UINTN       DataSize,\r
-  OUT  UINT8       *HashValue\r
-  );\r
+#ifdef ENABLE_MD5_DEPRECATED_INTERFACES\r
 \r
 /**\r
   Retrieves the size, in bytes, of the context buffer required for MD5 hash operations.\r
 \r
 /**\r
   Retrieves the size, in bytes, of the context buffer required for MD5 hash operations.\r
@@ -357,6 +214,10 @@ Md5HashAll (
   OUT  UINT8       *HashValue\r
   );\r
 \r
   OUT  UINT8       *HashValue\r
   );\r
 \r
+#endif\r
+\r
+#ifndef DISABLE_SHA1_DEPRECATED_INTERFACES\r
+\r
 /**\r
   Retrieves the size, in bytes, of the context buffer required for SHA-1 hash operations.\r
 \r
 /**\r
   Retrieves the size, in bytes, of the context buffer required for SHA-1 hash operations.\r
 \r
@@ -497,6 +358,8 @@ Sha1HashAll (
   OUT  UINT8       *HashValue\r
   );\r
 \r
   OUT  UINT8       *HashValue\r
   );\r
 \r
+#endif\r
+\r
 /**\r
   Retrieves the size, in bytes, of the context buffer required for SHA-256 hash operations.\r
 \r
 /**\r
   Retrieves the size, in bytes, of the context buffer required for SHA-256 hash operations.\r
 \r
@@ -1021,983 +884,268 @@ Sm3HashAll (
   OUT  UINT8       *HashValue\r
   );\r
 \r
   OUT  UINT8       *HashValue\r
   );\r
 \r
-//=====================================================================================\r
+// =====================================================================================\r
 //    MAC (Message Authentication Code) Primitive\r
 //    MAC (Message Authentication Code) Primitive\r
-//=====================================================================================\r
-\r
-/**\r
-  Retrieves the size, in bytes, of the context buffer required for HMAC-MD5 operations.\r
-  (NOTE: This API is deprecated.\r
-         Use HmacMd5New() / HmacMd5Free() for HMAC-MD5 Context operations.)\r
-\r
-  If this interface is not supported, then return zero.\r
-\r
-  @return  The size, in bytes, of the context buffer required for HMAC-MD5 operations.\r
-  @retval  0   This interface is not supported.\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-HmacMd5GetContextSize (\r
-  VOID\r
-  );\r
+// =====================================================================================\r
 \r
 /**\r
 \r
 /**\r
-  Allocates and initializes one HMAC_CTX context for subsequent HMAC-MD5 use.\r
-\r
-  If this interface is not supported, then return NULL.\r
+  Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA256 use.\r
 \r
   @return  Pointer to the HMAC_CTX context that has been initialized.\r
 \r
   @return  Pointer to the HMAC_CTX context that has been initialized.\r
-           If the allocations fails, HmacMd5New() returns NULL.\r
-  @retval  NULL  This interface is not supported.\r
+           If the allocations fails, HmacSha256New() returns NULL.\r
 \r
 **/\r
 VOID *\r
 EFIAPI\r
 \r
 **/\r
 VOID *\r
 EFIAPI\r
-HmacMd5New (\r
+HmacSha256New (\r
   VOID\r
   );\r
 \r
 /**\r
   Release the specified HMAC_CTX context.\r
 \r
   VOID\r
   );\r
 \r
 /**\r
   Release the specified HMAC_CTX context.\r
 \r
-  If this interface is not supported, then do nothing.\r
-\r
-  @param[in]  HmacMd5Ctx  Pointer to the HMAC_CTX context to be released.\r
+  @param[in]  HmacSha256Ctx  Pointer to the HMAC_CTX context to be released.\r
 \r
 **/\r
 VOID\r
 EFIAPI\r
 \r
 **/\r
 VOID\r
 EFIAPI\r
-HmacMd5Free (\r
-  IN  VOID  *HmacMd5Ctx\r
+HmacSha256Free (\r
+  IN  VOID  *HmacSha256Ctx\r
   );\r
 \r
 /**\r
   );\r
 \r
 /**\r
-  Initializes user-supplied memory pointed by HmacMd5Context as HMAC-MD5 context for\r
-  subsequent use.\r
+  Set user-supplied key for subsequent use. It must be done before any\r
+  calling to HmacSha256Update().\r
 \r
 \r
-  If HmacMd5Context is NULL, then return FALSE.\r
+  If HmacSha256Context is NULL, then return FALSE.\r
   If this interface is not supported, then return FALSE.\r
 \r
   If this interface is not supported, then return FALSE.\r
 \r
-  @param[out]  HmacMd5Context  Pointer to HMAC-MD5 context being initialized.\r
-  @param[in]   Key             Pointer to the user-supplied key.\r
-  @param[in]   KeySize         Key size in bytes.\r
+  @param[out]  HmacSha256Context  Pointer to HMAC-SHA256 context.\r
+  @param[in]   Key                Pointer to the user-supplied key.\r
+  @param[in]   KeySize            Key size in bytes.\r
 \r
 \r
-  @retval TRUE   HMAC-MD5 context initialization succeeded.\r
-  @retval FALSE  HMAC-MD5 context initialization failed.\r
+  @retval TRUE   The Key is set successfully.\r
+  @retval FALSE  The Key is set unsuccessfully.\r
   @retval FALSE  This interface is not supported.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
   @retval FALSE  This interface is not supported.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
-HmacMd5Init (\r
-  OUT  VOID         *HmacMd5Context,\r
+HmacSha256SetKey (\r
+  OUT  VOID         *HmacSha256Context,\r
   IN   CONST UINT8  *Key,\r
   IN   UINTN        KeySize\r
   );\r
 \r
 /**\r
   IN   CONST UINT8  *Key,\r
   IN   UINTN        KeySize\r
   );\r
 \r
 /**\r
-  Makes a copy of an existing HMAC-MD5 context.\r
+  Makes a copy of an existing HMAC-SHA256 context.\r
 \r
 \r
-  If HmacMd5Context is NULL, then return FALSE.\r
-  If NewHmacMd5Context is NULL, then return FALSE.\r
+  If HmacSha256Context is NULL, then return FALSE.\r
+  If NewHmacSha256Context is NULL, then return FALSE.\r
   If this interface is not supported, then return FALSE.\r
 \r
   If this interface is not supported, then return FALSE.\r
 \r
-  @param[in]  HmacMd5Context     Pointer to HMAC-MD5 context being copied.\r
-  @param[out] NewHmacMd5Context  Pointer to new HMAC-MD5 context.\r
+  @param[in]  HmacSha256Context     Pointer to HMAC-SHA256 context being copied.\r
+  @param[out] NewHmacSha256Context  Pointer to new HMAC-SHA256 context.\r
 \r
 \r
-  @retval TRUE   HMAC-MD5 context copy succeeded.\r
-  @retval FALSE  HMAC-MD5 context copy failed.\r
+  @retval TRUE   HMAC-SHA256 context copy succeeded.\r
+  @retval FALSE  HMAC-SHA256 context copy failed.\r
   @retval FALSE  This interface is not supported.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
   @retval FALSE  This interface is not supported.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
-HmacMd5Duplicate (\r
-  IN   CONST VOID  *HmacMd5Context,\r
-  OUT  VOID        *NewHmacMd5Context\r
+HmacSha256Duplicate (\r
+  IN   CONST VOID  *HmacSha256Context,\r
+  OUT  VOID        *NewHmacSha256Context\r
   );\r
 \r
 /**\r
   );\r
 \r
 /**\r
-  Digests the input data and updates HMAC-MD5 context.\r
+  Digests the input data and updates HMAC-SHA256 context.\r
 \r
 \r
-  This function performs HMAC-MD5 digest on a data buffer of the specified size.\r
+  This function performs HMAC-SHA256 digest on a data buffer of the specified size.\r
   It can be called multiple times to compute the digest of long or discontinuous data streams.\r
   It can be called multiple times to compute the digest of long or discontinuous data streams.\r
-  HMAC-MD5 context should be already correctly initialized by HmacMd5Init(), and should not be\r
-  finalized by HmacMd5Final(). Behavior with invalid context is undefined.\r
+  HMAC-SHA256 context should be initialized by HmacSha256New(), and should not be finalized\r
+  by HmacSha256Final(). Behavior with invalid context is undefined.\r
 \r
 \r
-  If HmacMd5Context is NULL, then return FALSE.\r
+  If HmacSha256Context is NULL, then return FALSE.\r
   If this interface is not supported, then return FALSE.\r
 \r
   If this interface is not supported, then return FALSE.\r
 \r
-  @param[in, out]  HmacMd5Context  Pointer to the HMAC-MD5 context.\r
-  @param[in]       Data            Pointer to the buffer containing the data to be digested.\r
-  @param[in]       DataSize        Size of Data buffer in bytes.\r
+  @param[in, out]  HmacSha256Context Pointer to the HMAC-SHA256 context.\r
+  @param[in]       Data              Pointer to the buffer containing the data to be digested.\r
+  @param[in]       DataSize          Size of Data buffer in bytes.\r
 \r
 \r
-  @retval TRUE   HMAC-MD5 data digest succeeded.\r
-  @retval FALSE  HMAC-MD5 data digest failed.\r
+  @retval TRUE   HMAC-SHA256 data digest succeeded.\r
+  @retval FALSE  HMAC-SHA256 data digest failed.\r
   @retval FALSE  This interface is not supported.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
   @retval FALSE  This interface is not supported.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
-HmacMd5Update (\r
-  IN OUT  VOID        *HmacMd5Context,\r
+HmacSha256Update (\r
+  IN OUT  VOID        *HmacSha256Context,\r
   IN      CONST VOID  *Data,\r
   IN      UINTN       DataSize\r
   );\r
 \r
 /**\r
   IN      CONST VOID  *Data,\r
   IN      UINTN       DataSize\r
   );\r
 \r
 /**\r
-  Completes computation of the HMAC-MD5 digest value.\r
+  Completes computation of the HMAC-SHA256 digest value.\r
 \r
 \r
-  This function completes HMAC-MD5 hash computation and retrieves the digest value into\r
-  the specified memory. After this function has been called, the HMAC-MD5 context cannot\r
+  This function completes HMAC-SHA256 hash computation and retrieves the digest value into\r
+  the specified memory. After this function has been called, the HMAC-SHA256 context cannot\r
   be used again.\r
   be used again.\r
-  HMAC-MD5 context should be already correctly initialized by HmacMd5Init(), and should not be\r
-  finalized by HmacMd5Final(). Behavior with invalid HMAC-MD5 context is undefined.\r
+  HMAC-SHA256 context should be initialized by HmacSha256New(), and should not be finalized\r
+  by HmacSha256Final(). Behavior with invalid HMAC-SHA256 context is undefined.\r
 \r
 \r
-  If HmacMd5Context is NULL, then return FALSE.\r
+  If HmacSha256Context is NULL, then return FALSE.\r
   If HmacValue is NULL, then return FALSE.\r
   If this interface is not supported, then return FALSE.\r
 \r
   If HmacValue is NULL, then return FALSE.\r
   If this interface is not supported, then return FALSE.\r
 \r
-  @param[in, out]  HmacMd5Context  Pointer to the HMAC-MD5 context.\r
-  @param[out]      HmacValue       Pointer to a buffer that receives the HMAC-MD5 digest\r
-                                   value (16 bytes).\r
+  @param[in, out]  HmacSha256Context  Pointer to the HMAC-SHA256 context.\r
+  @param[out]      HmacValue          Pointer to a buffer that receives the HMAC-SHA256 digest\r
+                                      value (32 bytes).\r
 \r
 \r
-  @retval TRUE   HMAC-MD5 digest computation succeeded.\r
-  @retval FALSE  HMAC-MD5 digest computation failed.\r
+  @retval TRUE   HMAC-SHA256 digest computation succeeded.\r
+  @retval FALSE  HMAC-SHA256 digest computation failed.\r
   @retval FALSE  This interface is not supported.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
   @retval FALSE  This interface is not supported.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
-HmacMd5Final (\r
-  IN OUT  VOID   *HmacMd5Context,\r
+HmacSha256Final (\r
+  IN OUT  VOID   *HmacSha256Context,\r
   OUT     UINT8  *HmacValue\r
   );\r
 \r
   OUT     UINT8  *HmacValue\r
   );\r
 \r
+// =====================================================================================\r
+//    Symmetric Cryptography Primitive\r
+// =====================================================================================\r
+\r
 /**\r
 /**\r
-  Retrieves the size, in bytes, of the context buffer required for HMAC-SHA1 operations.\r
-  (NOTE: This API is deprecated.\r
-         Use HmacSha1New() / HmacSha1Free() for HMAC-SHA1 Context operations.)\r
+  Retrieves the size, in bytes, of the context buffer required for AES operations.\r
 \r
   If this interface is not supported, then return zero.\r
 \r
 \r
   If this interface is not supported, then return zero.\r
 \r
-  @return  The size, in bytes, of the context buffer required for HMAC-SHA1 operations.\r
+  @return  The size, in bytes, of the context buffer required for AES operations.\r
   @retval  0   This interface is not supported.\r
 \r
 **/\r
 UINTN\r
 EFIAPI\r
   @retval  0   This interface is not supported.\r
 \r
 **/\r
 UINTN\r
 EFIAPI\r
-HmacSha1GetContextSize (\r
-  VOID\r
-  );\r
-\r
-/**\r
-  Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA1 use.\r
-\r
-  If this interface is not supported, then return NULL.\r
-\r
-  @return  Pointer to the HMAC_CTX context that has been initialized.\r
-           If the allocations fails, HmacSha1New() returns NULL.\r
-  @return  NULL   This interface is not supported.\r
-\r
-**/\r
-VOID *\r
-EFIAPI\r
-HmacSha1New (\r
+AesGetContextSize (\r
   VOID\r
   );\r
 \r
 /**\r
   VOID\r
   );\r
 \r
 /**\r
-  Release the specified HMAC_CTX context.\r
-\r
-  If this interface is not supported, then do nothing.\r
-\r
-  @param[in]  HmacSha1Ctx  Pointer to the HMAC_CTX context to be released.\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-HmacSha1Free (\r
-  IN  VOID  *HmacSha1Ctx\r
-  );\r
+  Initializes user-supplied memory as AES context for subsequent use.\r
 \r
 \r
-/**\r
-  Initializes user-supplied memory pointed by HmacSha1Context as HMAC-SHA1 context for\r
-  subsequent use.\r
+  This function initializes user-supplied memory pointed by AesContext as AES context.\r
+  In addition, it sets up all AES key materials for subsequent encryption and decryption\r
+  operations.\r
+  There are 3 options for key length, 128 bits, 192 bits, and 256 bits.\r
 \r
 \r
-  If HmacSha1Context is NULL, then return FALSE.\r
+  If AesContext is NULL, then return FALSE.\r
+  If Key is NULL, then return FALSE.\r
+  If KeyLength is not valid, then return FALSE.\r
   If this interface is not supported, then return FALSE.\r
 \r
   If this interface is not supported, then return FALSE.\r
 \r
-  @param[out]  HmacSha1Context  Pointer to HMAC-SHA1 context being initialized.\r
-  @param[in]   Key              Pointer to the user-supplied key.\r
-  @param[in]   KeySize          Key size in bytes.\r
+  @param[out]  AesContext  Pointer to AES context being initialized.\r
+  @param[in]   Key         Pointer to the user-supplied AES key.\r
+  @param[in]   KeyLength   Length of AES key in bits.\r
 \r
 \r
-  @retval TRUE   HMAC-SHA1 context initialization succeeded.\r
-  @retval FALSE  HMAC-SHA1 context initialization failed.\r
+  @retval TRUE   AES context initialization succeeded.\r
+  @retval FALSE  AES context initialization failed.\r
   @retval FALSE  This interface is not supported.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
   @retval FALSE  This interface is not supported.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
-HmacSha1Init (\r
-  OUT  VOID         *HmacSha1Context,\r
+AesInit (\r
+  OUT  VOID         *AesContext,\r
   IN   CONST UINT8  *Key,\r
   IN   CONST UINT8  *Key,\r
-  IN   UINTN        KeySize\r
+  IN   UINTN        KeyLength\r
   );\r
 \r
 /**\r
   );\r
 \r
 /**\r
-  Makes a copy of an existing HMAC-SHA1 context.\r
+  Performs AES encryption on a data buffer of the specified size in CBC mode.\r
+\r
+  This function performs AES encryption on data buffer pointed by Input, of specified\r
+  size of InputSize, in CBC mode.\r
+  InputSize must be multiple of block size (16 bytes). This function does not perform\r
+  padding. Caller must perform padding, if necessary, to ensure valid input data size.\r
+  Initialization vector should be one block size (16 bytes).\r
+  AesContext should be already correctly initialized by AesInit(). Behavior with\r
+  invalid AES context is undefined.\r
 \r
 \r
-  If HmacSha1Context is NULL, then return FALSE.\r
-  If NewHmacSha1Context is NULL, then return FALSE.\r
+  If AesContext is NULL, then return FALSE.\r
+  If Input is NULL, then return FALSE.\r
+  If InputSize is not multiple of block size (16 bytes), then return FALSE.\r
+  If Ivec is NULL, then return FALSE.\r
+  If Output is NULL, then return FALSE.\r
   If this interface is not supported, then return FALSE.\r
 \r
   If this interface is not supported, then return FALSE.\r
 \r
-  @param[in]  HmacSha1Context     Pointer to HMAC-SHA1 context being copied.\r
-  @param[out] NewHmacSha1Context  Pointer to new HMAC-SHA1 context.\r
+  @param[in]   AesContext  Pointer to the AES context.\r
+  @param[in]   Input       Pointer to the buffer containing the data to be encrypted.\r
+  @param[in]   InputSize   Size of the Input buffer in bytes.\r
+  @param[in]   Ivec        Pointer to initialization vector.\r
+  @param[out]  Output      Pointer to a buffer that receives the AES encryption output.\r
 \r
 \r
-  @retval TRUE   HMAC-SHA1 context copy succeeded.\r
-  @retval FALSE  HMAC-SHA1 context copy failed.\r
+  @retval TRUE   AES encryption succeeded.\r
+  @retval FALSE  AES encryption failed.\r
   @retval FALSE  This interface is not supported.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
   @retval FALSE  This interface is not supported.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
-HmacSha1Duplicate (\r
-  IN   CONST VOID  *HmacSha1Context,\r
-  OUT  VOID        *NewHmacSha1Context\r
+AesCbcEncrypt (\r
+  IN   VOID         *AesContext,\r
+  IN   CONST UINT8  *Input,\r
+  IN   UINTN        InputSize,\r
+  IN   CONST UINT8  *Ivec,\r
+  OUT  UINT8        *Output\r
   );\r
 \r
 /**\r
   );\r
 \r
 /**\r
-  Digests the input data and updates HMAC-SHA1 context.\r
+  Performs AES decryption on a data buffer of the specified size in CBC mode.\r
 \r
 \r
-  This function performs HMAC-SHA1 digest on a data buffer of the specified size.\r
-  It can be called multiple times to compute the digest of long or discontinuous data streams.\r
-  HMAC-SHA1 context should be already correctly initialized by HmacSha1Init(), and should not\r
-  be finalized by HmacSha1Final(). Behavior with invalid context is undefined.\r
+  This function performs AES decryption on data buffer pointed by Input, of specified\r
+  size of InputSize, in CBC mode.\r
+  InputSize must be multiple of block size (16 bytes). This function does not perform\r
+  padding. Caller must perform padding, if necessary, to ensure valid input data size.\r
+  Initialization vector should be one block size (16 bytes).\r
+  AesContext should be already correctly initialized by AesInit(). Behavior with\r
+  invalid AES context is undefined.\r
 \r
 \r
-  If HmacSha1Context is NULL, then return FALSE.\r
+  If AesContext is NULL, then return FALSE.\r
+  If Input is NULL, then return FALSE.\r
+  If InputSize is not multiple of block size (16 bytes), then return FALSE.\r
+  If Ivec is NULL, then return FALSE.\r
+  If Output is NULL, then return FALSE.\r
   If this interface is not supported, then return FALSE.\r
 \r
   If this interface is not supported, then return FALSE.\r
 \r
-  @param[in, out]  HmacSha1Context Pointer to the HMAC-SHA1 context.\r
-  @param[in]       Data            Pointer to the buffer containing the data to be digested.\r
-  @param[in]       DataSize        Size of Data buffer in bytes.\r
+  @param[in]   AesContext  Pointer to the AES context.\r
+  @param[in]   Input       Pointer to the buffer containing the data to be encrypted.\r
+  @param[in]   InputSize   Size of the Input buffer in bytes.\r
+  @param[in]   Ivec        Pointer to initialization vector.\r
+  @param[out]  Output      Pointer to a buffer that receives the AES encryption output.\r
 \r
 \r
-  @retval TRUE   HMAC-SHA1 data digest succeeded.\r
-  @retval FALSE  HMAC-SHA1 data digest failed.\r
+  @retval TRUE   AES decryption succeeded.\r
+  @retval FALSE  AES decryption failed.\r
   @retval FALSE  This interface is not supported.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
   @retval FALSE  This interface is not supported.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
-HmacSha1Update (\r
-  IN OUT  VOID        *HmacSha1Context,\r
-  IN      CONST VOID  *Data,\r
-  IN      UINTN       DataSize\r
+AesCbcDecrypt (\r
+  IN   VOID         *AesContext,\r
+  IN   CONST UINT8  *Input,\r
+  IN   UINTN        InputSize,\r
+  IN   CONST UINT8  *Ivec,\r
+  OUT  UINT8        *Output\r
   );\r
 \r
   );\r
 \r
-/**\r
-  Completes computation of the HMAC-SHA1 digest value.\r
-\r
-  This function completes HMAC-SHA1 hash computation and retrieves the digest value into\r
-  the specified memory. After this function has been called, the HMAC-SHA1 context cannot\r
-  be used again.\r
-  HMAC-SHA1 context should be already correctly initialized by HmacSha1Init(), and should\r
-  not be finalized by HmacSha1Final(). Behavior with invalid HMAC-SHA1 context is undefined.\r
-\r
-  If HmacSha1Context is NULL, then return FALSE.\r
-  If HmacValue is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in, out]  HmacSha1Context  Pointer to the HMAC-SHA1 context.\r
-  @param[out]      HmacValue        Pointer to a buffer that receives the HMAC-SHA1 digest\r
-                                    value (20 bytes).\r
-\r
-  @retval TRUE   HMAC-SHA1 digest computation succeeded.\r
-  @retval FALSE  HMAC-SHA1 digest computation failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-HmacSha1Final (\r
-  IN OUT  VOID   *HmacSha1Context,\r
-  OUT     UINT8  *HmacValue\r
-  );\r
-\r
-/**\r
-  Retrieves the size, in bytes, of the context buffer required for HMAC-SHA256 operations.\r
-  (NOTE: This API is deprecated.\r
-         Use HmacSha256New() / HmacSha256Free() for HMAC-SHA256 Context operations.)\r
-\r
-  If this interface is not supported, then return zero.\r
-\r
-  @return  The size, in bytes, of the context buffer required for HMAC-SHA256 operations.\r
-  @retval  0   This interface is not supported.\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-HmacSha256GetContextSize (\r
-  VOID\r
-  );\r
-\r
-/**\r
-  Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA256 use.\r
-\r
-  @return  Pointer to the HMAC_CTX context that has been initialized.\r
-           If the allocations fails, HmacSha256New() returns NULL.\r
-\r
-**/\r
-VOID *\r
-EFIAPI\r
-HmacSha256New (\r
-  VOID\r
-  );\r
-\r
-/**\r
-  Release the specified HMAC_CTX context.\r
-\r
-  @param[in]  HmacSha256Ctx  Pointer to the HMAC_CTX context to be released.\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-HmacSha256Free (\r
-  IN  VOID  *HmacSha256Ctx\r
-  );\r
-\r
-/**\r
-  Initializes user-supplied memory pointed by HmacSha256Context as HMAC-SHA256 context for\r
-  subsequent use.\r
-\r
-  If HmacSha256Context is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[out]  HmacSha256Context  Pointer to HMAC-SHA256 context being initialized.\r
-  @param[in]   Key                Pointer to the user-supplied key.\r
-  @param[in]   KeySize            Key size in bytes.\r
-\r
-  @retval TRUE   HMAC-SHA256 context initialization succeeded.\r
-  @retval FALSE  HMAC-SHA256 context initialization failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-HmacSha256Init (\r
-  OUT  VOID         *HmacSha256Context,\r
-  IN   CONST UINT8  *Key,\r
-  IN   UINTN        KeySize\r
-  );\r
-\r
-/**\r
-  Makes a copy of an existing HMAC-SHA256 context.\r
-\r
-  If HmacSha256Context is NULL, then return FALSE.\r
-  If NewHmacSha256Context is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in]  HmacSha256Context     Pointer to HMAC-SHA256 context being copied.\r
-  @param[out] NewHmacSha256Context  Pointer to new HMAC-SHA256 context.\r
-\r
-  @retval TRUE   HMAC-SHA256 context copy succeeded.\r
-  @retval FALSE  HMAC-SHA256 context copy failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-HmacSha256Duplicate (\r
-  IN   CONST VOID  *HmacSha256Context,\r
-  OUT  VOID        *NewHmacSha256Context\r
-  );\r
-\r
-/**\r
-  Digests the input data and updates HMAC-SHA256 context.\r
-\r
-  This function performs HMAC-SHA256 digest on a data buffer of the specified size.\r
-  It can be called multiple times to compute the digest of long or discontinuous data streams.\r
-  HMAC-SHA256 context should be already correctly initialized by HmacSha256Init(), and should not\r
-  be finalized by HmacSha256Final(). Behavior with invalid context is undefined.\r
-\r
-  If HmacSha256Context is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in, out]  HmacSha256Context Pointer to the HMAC-SHA256 context.\r
-  @param[in]       Data              Pointer to the buffer containing the data to be digested.\r
-  @param[in]       DataSize          Size of Data buffer in bytes.\r
-\r
-  @retval TRUE   HMAC-SHA256 data digest succeeded.\r
-  @retval FALSE  HMAC-SHA256 data digest failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-HmacSha256Update (\r
-  IN OUT  VOID        *HmacSha256Context,\r
-  IN      CONST VOID  *Data,\r
-  IN      UINTN       DataSize\r
-  );\r
-\r
-/**\r
-  Completes computation of the HMAC-SHA256 digest value.\r
-\r
-  This function completes HMAC-SHA256 hash computation and retrieves the digest value into\r
-  the specified memory. After this function has been called, the HMAC-SHA256 context cannot\r
-  be used again.\r
-  HMAC-SHA256 context should be already correctly initialized by HmacSha256Init(), and should\r
-  not be finalized by HmacSha256Final(). Behavior with invalid HMAC-SHA256 context is undefined.\r
-\r
-  If HmacSha256Context is NULL, then return FALSE.\r
-  If HmacValue is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in, out]  HmacSha256Context  Pointer to the HMAC-SHA256 context.\r
-  @param[out]      HmacValue          Pointer to a buffer that receives the HMAC-SHA256 digest\r
-                                      value (32 bytes).\r
-\r
-  @retval TRUE   HMAC-SHA256 digest computation succeeded.\r
-  @retval FALSE  HMAC-SHA256 digest computation failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-HmacSha256Final (\r
-  IN OUT  VOID   *HmacSha256Context,\r
-  OUT     UINT8  *HmacValue\r
-  );\r
-\r
-//=====================================================================================\r
-//    Symmetric Cryptography Primitive\r
-//=====================================================================================\r
-\r
-/**\r
-  Retrieves the size, in bytes, of the context buffer required for TDES operations.\r
-\r
-  If this interface is not supported, then return zero.\r
-\r
-  @return  The size, in bytes, of the context buffer required for TDES operations.\r
-  @retval  0   This interface is not supported.\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-TdesGetContextSize (\r
-  VOID\r
-  );\r
-\r
-/**\r
-  Initializes user-supplied memory as TDES context for subsequent use.\r
-\r
-  This function initializes user-supplied memory pointed by TdesContext as TDES context.\r
-  In addition, it sets up all TDES key materials for subsequent encryption and decryption\r
-  operations.\r
-  There are 3 key options as follows:\r
-  KeyLength = 64,  Keying option 1: K1 == K2 == K3 (Backward compatibility with DES)\r
-  KeyLength = 128, Keying option 2: K1 != K2 and K3 = K1 (Less Security)\r
-  KeyLength = 192  Keying option 3: K1 != K2 != K3 (Strongest)\r
-\r
-  If TdesContext is NULL, then return FALSE.\r
-  If Key is NULL, then return FALSE.\r
-  If KeyLength is not valid, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[out]  TdesContext  Pointer to TDES context being initialized.\r
-  @param[in]   Key          Pointer to the user-supplied TDES key.\r
-  @param[in]   KeyLength    Length of TDES key in bits.\r
-\r
-  @retval TRUE   TDES context initialization succeeded.\r
-  @retval FALSE  TDES context initialization failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-TdesInit (\r
-  OUT  VOID         *TdesContext,\r
-  IN   CONST UINT8  *Key,\r
-  IN   UINTN        KeyLength\r
-  );\r
-\r
-/**\r
-  Performs TDES encryption on a data buffer of the specified size in ECB mode.\r
-\r
-  This function performs TDES encryption on data buffer pointed by Input, of specified\r
-  size of InputSize, in ECB mode.\r
-  InputSize must be multiple of block size (8 bytes). This function does not perform\r
-  padding. Caller must perform padding, if necessary, to ensure valid input data size.\r
-  TdesContext should be already correctly initialized by TdesInit(). Behavior with\r
-  invalid TDES context is undefined.\r
-\r
-  If TdesContext is NULL, then return FALSE.\r
-  If Input is NULL, then return FALSE.\r
-  If InputSize is not multiple of block size (8 bytes), then return FALSE.\r
-  If Output is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in]   TdesContext  Pointer to the TDES context.\r
-  @param[in]   Input        Pointer to the buffer containing the data to be encrypted.\r
-  @param[in]   InputSize    Size of the Input buffer in bytes.\r
-  @param[out]  Output       Pointer to a buffer that receives the TDES encryption output.\r
-\r
-  @retval TRUE   TDES encryption succeeded.\r
-  @retval FALSE  TDES encryption failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-TdesEcbEncrypt (\r
-  IN   VOID         *TdesContext,\r
-  IN   CONST UINT8  *Input,\r
-  IN   UINTN        InputSize,\r
-  OUT  UINT8        *Output\r
-  );\r
-\r
-/**\r
-  Performs TDES decryption on a data buffer of the specified size in ECB mode.\r
-\r
-  This function performs TDES decryption on data buffer pointed by Input, of specified\r
-  size of InputSize, in ECB mode.\r
-  InputSize must be multiple of block size (8 bytes). This function does not perform\r
-  padding. Caller must perform padding, if necessary, to ensure valid input data size.\r
-  TdesContext should be already correctly initialized by TdesInit(). Behavior with\r
-  invalid TDES context is undefined.\r
-\r
-  If TdesContext is NULL, then return FALSE.\r
-  If Input is NULL, then return FALSE.\r
-  If InputSize is not multiple of block size (8 bytes), then return FALSE.\r
-  If Output is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in]   TdesContext  Pointer to the TDES context.\r
-  @param[in]   Input        Pointer to the buffer containing the data to be decrypted.\r
-  @param[in]   InputSize    Size of the Input buffer in bytes.\r
-  @param[out]  Output       Pointer to a buffer that receives the TDES decryption output.\r
-\r
-  @retval TRUE   TDES decryption succeeded.\r
-  @retval FALSE  TDES decryption failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-TdesEcbDecrypt (\r
-  IN   VOID         *TdesContext,\r
-  IN   CONST UINT8  *Input,\r
-  IN   UINTN        InputSize,\r
-  OUT  UINT8        *Output\r
-  );\r
-\r
-/**\r
-  Performs TDES encryption on a data buffer of the specified size in CBC mode.\r
-\r
-  This function performs TDES encryption on data buffer pointed by Input, of specified\r
-  size of InputSize, in CBC mode.\r
-  InputSize must be multiple of block size (8 bytes). This function does not perform\r
-  padding. Caller must perform padding, if necessary, to ensure valid input data size.\r
-  Initialization vector should be one block size (8 bytes).\r
-  TdesContext should be already correctly initialized by TdesInit(). Behavior with\r
-  invalid TDES context is undefined.\r
-\r
-  If TdesContext is NULL, then return FALSE.\r
-  If Input is NULL, then return FALSE.\r
-  If InputSize is not multiple of block size (8 bytes), then return FALSE.\r
-  If Ivec is NULL, then return FALSE.\r
-  If Output is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in]   TdesContext  Pointer to the TDES context.\r
-  @param[in]   Input        Pointer to the buffer containing the data to be encrypted.\r
-  @param[in]   InputSize    Size of the Input buffer in bytes.\r
-  @param[in]   Ivec         Pointer to initialization vector.\r
-  @param[out]  Output       Pointer to a buffer that receives the TDES encryption output.\r
-\r
-  @retval TRUE   TDES encryption succeeded.\r
-  @retval FALSE  TDES encryption failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-TdesCbcEncrypt (\r
-  IN   VOID         *TdesContext,\r
-  IN   CONST UINT8  *Input,\r
-  IN   UINTN        InputSize,\r
-  IN   CONST UINT8  *Ivec,\r
-  OUT  UINT8        *Output\r
-  );\r
-\r
-/**\r
-  Performs TDES decryption on a data buffer of the specified size in CBC mode.\r
-\r
-  This function performs TDES decryption on data buffer pointed by Input, of specified\r
-  size of InputSize, in CBC mode.\r
-  InputSize must be multiple of block size (8 bytes). This function does not perform\r
-  padding. Caller must perform padding, if necessary, to ensure valid input data size.\r
-  Initialization vector should be one block size (8 bytes).\r
-  TdesContext should be already correctly initialized by TdesInit(). Behavior with\r
-  invalid TDES context is undefined.\r
-\r
-  If TdesContext is NULL, then return FALSE.\r
-  If Input is NULL, then return FALSE.\r
-  If InputSize is not multiple of block size (8 bytes), then return FALSE.\r
-  If Ivec is NULL, then return FALSE.\r
-  If Output is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in]   TdesContext  Pointer to the TDES context.\r
-  @param[in]   Input        Pointer to the buffer containing the data to be encrypted.\r
-  @param[in]   InputSize    Size of the Input buffer in bytes.\r
-  @param[in]   Ivec         Pointer to initialization vector.\r
-  @param[out]  Output       Pointer to a buffer that receives the TDES encryption output.\r
-\r
-  @retval TRUE   TDES decryption succeeded.\r
-  @retval FALSE  TDES decryption failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-TdesCbcDecrypt (\r
-  IN   VOID         *TdesContext,\r
-  IN   CONST UINT8  *Input,\r
-  IN   UINTN        InputSize,\r
-  IN   CONST UINT8  *Ivec,\r
-  OUT  UINT8        *Output\r
-  );\r
-\r
-/**\r
-  Retrieves the size, in bytes, of the context buffer required for AES operations.\r
-\r
-  If this interface is not supported, then return zero.\r
-\r
-  @return  The size, in bytes, of the context buffer required for AES operations.\r
-  @retval  0   This interface is not supported.\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-AesGetContextSize (\r
-  VOID\r
-  );\r
-\r
-/**\r
-  Initializes user-supplied memory as AES context for subsequent use.\r
-\r
-  This function initializes user-supplied memory pointed by AesContext as AES context.\r
-  In addition, it sets up all AES key materials for subsequent encryption and decryption\r
-  operations.\r
-  There are 3 options for key length, 128 bits, 192 bits, and 256 bits.\r
-\r
-  If AesContext is NULL, then return FALSE.\r
-  If Key is NULL, then return FALSE.\r
-  If KeyLength is not valid, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[out]  AesContext  Pointer to AES context being initialized.\r
-  @param[in]   Key         Pointer to the user-supplied AES key.\r
-  @param[in]   KeyLength   Length of AES key in bits.\r
-\r
-  @retval TRUE   AES context initialization succeeded.\r
-  @retval FALSE  AES context initialization failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-AesInit (\r
-  OUT  VOID         *AesContext,\r
-  IN   CONST UINT8  *Key,\r
-  IN   UINTN        KeyLength\r
-  );\r
-\r
-/**\r
-  Performs AES encryption on a data buffer of the specified size in ECB mode.\r
-\r
-  This function performs AES encryption on data buffer pointed by Input, of specified\r
-  size of InputSize, in ECB mode.\r
-  InputSize must be multiple of block size (16 bytes). This function does not perform\r
-  padding. Caller must perform padding, if necessary, to ensure valid input data size.\r
-  AesContext should be already correctly initialized by AesInit(). Behavior with\r
-  invalid AES context is undefined.\r
-\r
-  If AesContext is NULL, then return FALSE.\r
-  If Input is NULL, then return FALSE.\r
-  If InputSize is not multiple of block size (16 bytes), then return FALSE.\r
-  If Output is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in]   AesContext  Pointer to the AES context.\r
-  @param[in]   Input       Pointer to the buffer containing the data to be encrypted.\r
-  @param[in]   InputSize   Size of the Input buffer in bytes.\r
-  @param[out]  Output      Pointer to a buffer that receives the AES encryption output.\r
-\r
-  @retval TRUE   AES encryption succeeded.\r
-  @retval FALSE  AES encryption failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-AesEcbEncrypt (\r
-  IN   VOID         *AesContext,\r
-  IN   CONST UINT8  *Input,\r
-  IN   UINTN        InputSize,\r
-  OUT  UINT8        *Output\r
-  );\r
-\r
-/**\r
-  Performs AES decryption on a data buffer of the specified size in ECB mode.\r
-\r
-  This function performs AES decryption on data buffer pointed by Input, of specified\r
-  size of InputSize, in ECB mode.\r
-  InputSize must be multiple of block size (16 bytes). This function does not perform\r
-  padding. Caller must perform padding, if necessary, to ensure valid input data size.\r
-  AesContext should be already correctly initialized by AesInit(). Behavior with\r
-  invalid AES context is undefined.\r
-\r
-  If AesContext is NULL, then return FALSE.\r
-  If Input is NULL, then return FALSE.\r
-  If InputSize is not multiple of block size (16 bytes), then return FALSE.\r
-  If Output is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in]   AesContext  Pointer to the AES context.\r
-  @param[in]   Input       Pointer to the buffer containing the data to be decrypted.\r
-  @param[in]   InputSize   Size of the Input buffer in bytes.\r
-  @param[out]  Output      Pointer to a buffer that receives the AES decryption output.\r
-\r
-  @retval TRUE   AES decryption succeeded.\r
-  @retval FALSE  AES decryption failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-AesEcbDecrypt (\r
-  IN   VOID         *AesContext,\r
-  IN   CONST UINT8  *Input,\r
-  IN   UINTN        InputSize,\r
-  OUT  UINT8        *Output\r
-  );\r
-\r
-/**\r
-  Performs AES encryption on a data buffer of the specified size in CBC mode.\r
-\r
-  This function performs AES encryption on data buffer pointed by Input, of specified\r
-  size of InputSize, in CBC mode.\r
-  InputSize must be multiple of block size (16 bytes). This function does not perform\r
-  padding. Caller must perform padding, if necessary, to ensure valid input data size.\r
-  Initialization vector should be one block size (16 bytes).\r
-  AesContext should be already correctly initialized by AesInit(). Behavior with\r
-  invalid AES context is undefined.\r
-\r
-  If AesContext is NULL, then return FALSE.\r
-  If Input is NULL, then return FALSE.\r
-  If InputSize is not multiple of block size (16 bytes), then return FALSE.\r
-  If Ivec is NULL, then return FALSE.\r
-  If Output is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in]   AesContext  Pointer to the AES context.\r
-  @param[in]   Input       Pointer to the buffer containing the data to be encrypted.\r
-  @param[in]   InputSize   Size of the Input buffer in bytes.\r
-  @param[in]   Ivec        Pointer to initialization vector.\r
-  @param[out]  Output      Pointer to a buffer that receives the AES encryption output.\r
-\r
-  @retval TRUE   AES encryption succeeded.\r
-  @retval FALSE  AES encryption failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-AesCbcEncrypt (\r
-  IN   VOID         *AesContext,\r
-  IN   CONST UINT8  *Input,\r
-  IN   UINTN        InputSize,\r
-  IN   CONST UINT8  *Ivec,\r
-  OUT  UINT8        *Output\r
-  );\r
-\r
-/**\r
-  Performs AES decryption on a data buffer of the specified size in CBC mode.\r
-\r
-  This function performs AES decryption on data buffer pointed by Input, of specified\r
-  size of InputSize, in CBC mode.\r
-  InputSize must be multiple of block size (16 bytes). This function does not perform\r
-  padding. Caller must perform padding, if necessary, to ensure valid input data size.\r
-  Initialization vector should be one block size (16 bytes).\r
-  AesContext should be already correctly initialized by AesInit(). Behavior with\r
-  invalid AES context is undefined.\r
-\r
-  If AesContext is NULL, then return FALSE.\r
-  If Input is NULL, then return FALSE.\r
-  If InputSize is not multiple of block size (16 bytes), then return FALSE.\r
-  If Ivec is NULL, then return FALSE.\r
-  If Output is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in]   AesContext  Pointer to the AES context.\r
-  @param[in]   Input       Pointer to the buffer containing the data to be encrypted.\r
-  @param[in]   InputSize   Size of the Input buffer in bytes.\r
-  @param[in]   Ivec        Pointer to initialization vector.\r
-  @param[out]  Output      Pointer to a buffer that receives the AES encryption output.\r
-\r
-  @retval TRUE   AES decryption succeeded.\r
-  @retval FALSE  AES decryption failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-AesCbcDecrypt (\r
-  IN   VOID         *AesContext,\r
-  IN   CONST UINT8  *Input,\r
-  IN   UINTN        InputSize,\r
-  IN   CONST UINT8  *Ivec,\r
-  OUT  UINT8        *Output\r
-  );\r
-\r
-/**\r
-  Retrieves the size, in bytes, of the context buffer required for ARC4 operations.\r
-\r
-  If this interface is not supported, then return zero.\r
-\r
-  @return  The size, in bytes, of the context buffer required for ARC4 operations.\r
-  @retval  0   This interface is not supported.\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-Arc4GetContextSize (\r
-  VOID\r
-  );\r
-\r
-/**\r
-  Initializes user-supplied memory as ARC4 context for subsequent use.\r
-\r
-  This function initializes user-supplied memory pointed by Arc4Context as ARC4 context.\r
-  In addition, it sets up all ARC4 key materials for subsequent encryption and decryption\r
-  operations.\r
-\r
-  If Arc4Context is NULL, then return FALSE.\r
-  If Key is NULL, then return FALSE.\r
-  If KeySize does not in the range of [5, 256] bytes, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[out]  Arc4Context  Pointer to ARC4 context being initialized.\r
-  @param[in]   Key          Pointer to the user-supplied ARC4 key.\r
-  @param[in]   KeySize      Size of ARC4 key in bytes.\r
-\r
-  @retval TRUE   ARC4 context initialization succeeded.\r
-  @retval FALSE  ARC4 context initialization failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-Arc4Init (\r
-  OUT  VOID         *Arc4Context,\r
-  IN   CONST UINT8  *Key,\r
-  IN   UINTN        KeySize\r
-  );\r
-\r
-/**\r
-  Performs ARC4 encryption on a data buffer of the specified size.\r
-\r
-  This function performs ARC4 encryption on data buffer pointed by Input, of specified\r
-  size of InputSize.\r
-  Arc4Context should be already correctly initialized by Arc4Init(). Behavior with\r
-  invalid ARC4 context is undefined.\r
-\r
-  If Arc4Context is NULL, then return FALSE.\r
-  If Input is NULL, then return FALSE.\r
-  If Output is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in, out]  Arc4Context  Pointer to the ARC4 context.\r
-  @param[in]       Input        Pointer to the buffer containing the data to be encrypted.\r
-  @param[in]       InputSize    Size of the Input buffer in bytes.\r
-  @param[out]      Output       Pointer to a buffer that receives the ARC4 encryption output.\r
-\r
-  @retval TRUE   ARC4 encryption succeeded.\r
-  @retval FALSE  ARC4 encryption failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-Arc4Encrypt (\r
-  IN OUT  VOID         *Arc4Context,\r
-  IN      CONST UINT8  *Input,\r
-  IN      UINTN        InputSize,\r
-  OUT     UINT8        *Output\r
-  );\r
-\r
-/**\r
-  Performs ARC4 decryption on a data buffer of the specified size.\r
-\r
-  This function performs ARC4 decryption on data buffer pointed by Input, of specified\r
-  size of InputSize.\r
-  Arc4Context should be already correctly initialized by Arc4Init(). Behavior with\r
-  invalid ARC4 context is undefined.\r
-\r
-  If Arc4Context is NULL, then return FALSE.\r
-  If Input is NULL, then return FALSE.\r
-  If Output is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in, out]  Arc4Context  Pointer to the ARC4 context.\r
-  @param[in]       Input        Pointer to the buffer containing the data to be decrypted.\r
-  @param[in]       InputSize    Size of the Input buffer in bytes.\r
-  @param[out]      Output       Pointer to a buffer that receives the ARC4 decryption output.\r
-\r
-  @retval TRUE   ARC4 decryption succeeded.\r
-  @retval FALSE  ARC4 decryption failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-Arc4Decrypt (\r
-  IN OUT  VOID   *Arc4Context,\r
-  IN      UINT8  *Input,\r
-  IN      UINTN  InputSize,\r
-  OUT     UINT8  *Output\r
-  );\r
-\r
-/**\r
-  Resets the ARC4 context to the initial state.\r
-\r
-  The function resets the ARC4 context to the state it had immediately after the\r
-  ARC4Init() function call.\r
-  Contrary to ARC4Init(), Arc4Reset() requires no secret key as input, but ARC4 context\r
-  should be already correctly initialized by ARC4Init().\r
-\r
-  If Arc4Context is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in, out]  Arc4Context  Pointer to the ARC4 context.\r
-\r
-  @retval TRUE   ARC4 reset succeeded.\r
-  @retval FALSE  ARC4 reset failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-Arc4Reset (\r
-  IN OUT  VOID  *Arc4Context\r
-  );\r
-\r
-//=====================================================================================\r
-//    Asymmetric Cryptography Primitive\r
-//=====================================================================================\r
+// =====================================================================================\r
+//    Asymmetric Cryptography Primitive\r
+// =====================================================================================\r
 \r
 /**\r
   Allocates and initializes one RSA context for subsequent use.\r
 \r
 /**\r
   Allocates and initializes one RSA context for subsequent use.\r
@@ -2219,6 +1367,80 @@ RsaPkcs1Verify (
   IN  UINTN        SigSize\r
   );\r
 \r
   IN  UINTN        SigSize\r
   );\r
 \r
+/**\r
+  Carries out the RSA-SSA signature generation with EMSA-PSS encoding scheme.\r
+\r
+  This function carries out the RSA-SSA signature generation with EMSA-PSS encoding scheme defined in\r
+  RFC 8017.\r
+  Mask generation function is the same as the message digest algorithm.\r
+  If the Signature buffer is too small to hold the contents of signature, FALSE\r
+  is returned and SigSize is set to the required buffer size to obtain the signature.\r
+\r
+  If RsaContext is NULL, then return FALSE.\r
+  If Message is NULL, then return FALSE.\r
+  If MsgSize is zero or > INT_MAX, then return FALSE.\r
+  If DigestLen is NOT 32, 48 or 64, return FALSE.\r
+  If SaltLen is not equal to DigestLen, then return FALSE.\r
+  If SigSize is large enough but Signature is NULL, then return FALSE.\r
+  If this interface is not supported, then return FALSE.\r
+\r
+  @param[in]      RsaContext   Pointer to RSA context for signature generation.\r
+  @param[in]      Message      Pointer to octet message to be signed.\r
+  @param[in]      MsgSize      Size of the message in bytes.\r
+  @param[in]      DigestLen    Length of the digest in bytes to be used for RSA signature operation.\r
+  @param[in]      SaltLen      Length of the salt in bytes to be used for PSS encoding.\r
+  @param[out]     Signature    Pointer to buffer to receive RSA PSS signature.\r
+  @param[in, out] SigSize      On input, the size of Signature buffer in bytes.\r
+                               On output, the size of data returned in Signature buffer in bytes.\r
+\r
+  @retval  TRUE   Signature successfully generated in RSASSA-PSS.\r
+  @retval  FALSE  Signature generation failed.\r
+  @retval  FALSE  SigSize is too small.\r
+  @retval  FALSE  This interface is not supported.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+RsaPssSign (\r
+  IN      VOID         *RsaContext,\r
+  IN      CONST UINT8  *Message,\r
+  IN      UINTN        MsgSize,\r
+  IN      UINT16       DigestLen,\r
+  IN      UINT16       SaltLen,\r
+  OUT     UINT8        *Signature,\r
+  IN OUT  UINTN        *SigSize\r
+  );\r
+\r
+/**\r
+  Verifies the RSA signature with RSASSA-PSS signature scheme defined in RFC 8017.\r
+  Implementation determines salt length automatically from the signature encoding.\r
+  Mask generation function is the same as the message digest algorithm.\r
+  Salt length should be equal to digest length.\r
+\r
+  @param[in]  RsaContext      Pointer to RSA context for signature verification.\r
+  @param[in]  Message         Pointer to octet message to be verified.\r
+  @param[in]  MsgSize         Size of the message in bytes.\r
+  @param[in]  Signature       Pointer to RSASSA-PSS signature to be verified.\r
+  @param[in]  SigSize         Size of signature in bytes.\r
+  @param[in]  DigestLen       Length of digest for RSA operation.\r
+  @param[in]  SaltLen         Salt length for PSS encoding.\r
+\r
+  @retval  TRUE   Valid signature encoded in RSASSA-PSS.\r
+  @retval  FALSE  Invalid signature or invalid RSA context.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+RsaPssVerify (\r
+  IN  VOID         *RsaContext,\r
+  IN  CONST UINT8  *Message,\r
+  IN  UINTN        MsgSize,\r
+  IN  CONST UINT8  *Signature,\r
+  IN  UINTN        SigSize,\r
+  IN  UINT16       DigestLen,\r
+  IN  UINT16       SaltLen\r
+  );\r
+\r
 /**\r
   Retrieve the RSA Private Key from the password-protected PEM key data.\r
 \r
 /**\r
   Retrieve the RSA Private Key from the password-protected PEM key data.\r
 \r
@@ -2332,7 +1554,7 @@ EFIAPI
 X509GetCommonName (\r
   IN      CONST UINT8  *Cert,\r
   IN      UINTN        CertSize,\r
 X509GetCommonName (\r
   IN      CONST UINT8  *Cert,\r
   IN      UINTN        CertSize,\r
-  OUT     CHAR8        *CommonName,  OPTIONAL\r
+  OUT     CHAR8        *CommonName   OPTIONAL,\r
   IN OUT  UINTN        *CommonNameSize\r
   );\r
 \r
   IN OUT  UINTN        *CommonNameSize\r
   );\r
 \r
@@ -2365,10 +1587,10 @@ X509GetCommonName (
 RETURN_STATUS\r
 EFIAPI\r
 X509GetOrganizationName (\r
 RETURN_STATUS\r
 EFIAPI\r
 X509GetOrganizationName (\r
-  IN      CONST UINT8   *Cert,\r
-  IN      UINTN         CertSize,\r
-  OUT     CHAR8         *NameBuffer,  OPTIONAL\r
-  IN OUT  UINTN         *NameBufferSize\r
+  IN      CONST UINT8  *Cert,\r
+  IN      UINTN        CertSize,\r
+  OUT     CHAR8        *NameBuffer   OPTIONAL,\r
+  IN OUT  UINTN        *NameBufferSize\r
   );\r
 \r
 /**\r
   );\r
 \r
 /**\r
@@ -2422,6 +1644,32 @@ X509ConstructCertificate (
   OUT  UINT8        **SingleX509Cert\r
   );\r
 \r
   OUT  UINT8        **SingleX509Cert\r
   );\r
 \r
+/**\r
+  Construct a X509 stack object from a list of DER-encoded certificate data.\r
+\r
+  If X509Stack is NULL, then return FALSE.\r
+  If this interface is not supported, then return FALSE.\r
+\r
+  @param[in, out]  X509Stack  On input, pointer to an existing or NULL X509 stack object.\r
+                              On output, pointer to the X509 stack object with new\r
+                              inserted X509 certificate.\r
+  @param[in]       Args       VA_LIST marker for the variable argument list.\r
+                              A list of DER-encoded single certificate data followed\r
+                              by certificate size. A NULL terminates the list. The\r
+                              pairs are the arguments to X509ConstructCertificate().\r
+\r
+  @retval     TRUE            The X509 stack construction succeeded.\r
+  @retval     FALSE           The construction operation failed.\r
+  @retval     FALSE           This interface is not supported.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+X509ConstructCertificateStackV (\r
+  IN OUT  UINT8    **X509Stack,\r
+  IN      VA_LIST  Args\r
+  );\r
+\r
 /**\r
   Construct a X509 stack object from a list of DER-encoded certificate data.\r
 \r
 /**\r
   Construct a X509 stack object from a list of DER-encoded certificate data.\r
 \r
@@ -2577,8 +1825,8 @@ Pkcs1v2Encrypt (
   IN   UINTN        PublicKeySize,\r
   IN   UINT8        *InData,\r
   IN   UINTN        InDataSize,\r
   IN   UINTN        PublicKeySize,\r
   IN   UINT8        *InData,\r
   IN   UINTN        InDataSize,\r
-  IN   CONST UINT8  *PrngSeed,  OPTIONAL\r
-  IN   UINTN        PrngSeedSize,  OPTIONAL\r
+  IN   CONST UINT8  *PrngSeed   OPTIONAL,\r
+  IN   UINTN        PrngSeedSize   OPTIONAL,\r
   OUT  UINT8        **EncryptedData,\r
   OUT  UINTN        *EncryptedDataSize\r
   );\r
   OUT  UINT8        **EncryptedData,\r
   OUT  UINTN        *EncryptedDataSize\r
   );\r
@@ -2607,8 +1855,8 @@ typedef struct {
 } EFI_CERT_DATA;\r
 \r
 typedef struct {\r
 } EFI_CERT_DATA;\r
 \r
 typedef struct {\r
-  UINT8             CertNumber;   // Number of X.509 certificate.\r
-  //EFI_CERT_DATA   CertArray[];  // An array of X.509 certificate.\r
+  UINT8    CertNumber;            // Number of X.509 certificate.\r
+  // EFI_CERT_DATA   CertArray[];  // An array of X.509 certificate.\r
 } EFI_CERT_STACK;\r
 \r
 #pragma pack()\r
 } EFI_CERT_STACK;\r
 \r
 #pragma pack()\r
@@ -2661,7 +1909,7 @@ Pkcs7GetSigners (
 VOID\r
 EFIAPI\r
 Pkcs7FreeSigners (\r
 VOID\r
 EFIAPI\r
 Pkcs7FreeSigners (\r
-  IN  UINT8        *Certs\r
+  IN  UINT8  *Certs\r
   );\r
 \r
 /**\r
   );\r
 \r
 /**\r
@@ -2907,9 +2155,9 @@ ImageTimestampVerify (
   OUT EFI_TIME     *SigningTime\r
   );\r
 \r
   OUT EFI_TIME     *SigningTime\r
   );\r
 \r
-//=====================================================================================\r
+// =====================================================================================\r
 //    DH Key Exchange Primitive\r
 //    DH Key Exchange Primitive\r
-//=====================================================================================\r
+// =====================================================================================\r
 \r
 /**\r
   Allocates and Initializes one Diffie-Hellman Context for subsequent use.\r
 \r
 /**\r
   Allocates and Initializes one Diffie-Hellman Context for subsequent use.\r
@@ -3072,9 +2320,9 @@ DhComputeKey (
   IN OUT  UINTN        *KeySize\r
   );\r
 \r
   IN OUT  UINTN        *KeySize\r
   );\r
 \r
-//=====================================================================================\r
+// =====================================================================================\r
 //    Pseudo-Random Generation Primitive\r
 //    Pseudo-Random Generation Primitive\r
-//=====================================================================================\r
+// =====================================================================================\r
 \r
 /**\r
   Sets up the seed value for the pseudorandom number generator.\r
 \r
 /**\r
   Sets up the seed value for the pseudorandom number generator.\r
@@ -3122,9 +2370,9 @@ RandomBytes (
   IN   UINTN  Size\r
   );\r
 \r
   IN   UINTN  Size\r
   );\r
 \r
-//=====================================================================================\r
+// =====================================================================================\r
 //    Key Derivation Function Primitive\r
 //    Key Derivation Function Primitive\r
-//=====================================================================================\r
+// =====================================================================================\r
 \r
 /**\r
   Derive key data using HMAC-SHA256 based KDF.\r
 \r
 /**\r
   Derive key data using HMAC-SHA256 based KDF.\r
@@ -3135,7 +2383,7 @@ RandomBytes (
   @param[in]   SaltSize         Salt size in bytes.\r
   @param[in]   Info             Pointer to the application specific info.\r
   @param[in]   InfoSize         Info size in bytes.\r
   @param[in]   SaltSize         Salt size in bytes.\r
   @param[in]   Info             Pointer to the application specific info.\r
   @param[in]   InfoSize         Info size in bytes.\r
-  @param[Out]  Out              Pointer to buffer to receive hkdf value.\r
+  @param[out]  Out              Pointer to buffer to receive hkdf value.\r
   @param[in]   OutSize          Size of hkdf bytes to generate.\r
 \r
   @retval TRUE   Hkdf generated successfully.\r
   @param[in]   OutSize          Size of hkdf bytes to generate.\r
 \r
   @retval TRUE   Hkdf generated successfully.\r