CryptoPkg: add AeadAesGcm to Crypto Service.
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4036 Signed-off-by: Qi Zhang <qi1.zhang@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Xiaoyu Lu <xiaoyu1.lu@intel.com> Cc: Guomin Jiang <guomin.jiang@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
		@@ -215,6 +215,8 @@
 | 
				
			|||||||
  gEfiCryptoPkgTokenSpaceGuid.PcdCryptoServiceFamilyEnable.Aes.Services.Init                        | TRUE
 | 
					  gEfiCryptoPkgTokenSpaceGuid.PcdCryptoServiceFamilyEnable.Aes.Services.Init                        | TRUE
 | 
				
			||||||
  gEfiCryptoPkgTokenSpaceGuid.PcdCryptoServiceFamilyEnable.Aes.Services.CbcEncrypt                  | TRUE
 | 
					  gEfiCryptoPkgTokenSpaceGuid.PcdCryptoServiceFamilyEnable.Aes.Services.CbcEncrypt                  | TRUE
 | 
				
			||||||
  gEfiCryptoPkgTokenSpaceGuid.PcdCryptoServiceFamilyEnable.Aes.Services.CbcDecrypt                  | TRUE
 | 
					  gEfiCryptoPkgTokenSpaceGuid.PcdCryptoServiceFamilyEnable.Aes.Services.CbcDecrypt                  | TRUE
 | 
				
			||||||
 | 
					  gEfiCryptoPkgTokenSpaceGuid.PcdCryptoServiceFamilyEnable.AeadAesGcm.Services.Encrypt              | TRUE
 | 
				
			||||||
 | 
					  gEfiCryptoPkgTokenSpaceGuid.PcdCryptoServiceFamilyEnable.AeadAesGcm.Services.Decrypt              | TRUE
 | 
				
			||||||
!endif
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
###################################################################################################
 | 
					###################################################################################################
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4938,6 +4938,95 @@ CryptoServiceParallelHash256HashAll (
 | 
				
			|||||||
  return CALL_BASECRYPTLIB (ParallelHash.Services.HashAll, ParallelHash256HashAll, (Input, InputByteLen, BlockSize, Output, OutputByteLen, Customization, CustomByteLen), FALSE);
 | 
					  return CALL_BASECRYPTLIB (ParallelHash.Services.HashAll, ParallelHash256HashAll, (Input, InputByteLen, BlockSize, Output, OutputByteLen, Customization, CustomByteLen), FALSE);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					  Performs AEAD AES-GCM authenticated encryption on a data buffer and additional authenticated data (AAD).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  IvSize must be 12, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  KeySize must be 16, 24 or 32, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  TagSize must be 12, 13, 14, 15, 16, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @param[in]   Key         Pointer to the encryption key.
 | 
				
			||||||
 | 
					  @param[in]   KeySize     Size of the encryption key in bytes.
 | 
				
			||||||
 | 
					  @param[in]   Iv          Pointer to the IV value.
 | 
				
			||||||
 | 
					  @param[in]   IvSize      Size of the IV value in bytes.
 | 
				
			||||||
 | 
					  @param[in]   AData       Pointer to the additional authenticated data (AAD).
 | 
				
			||||||
 | 
					  @param[in]   ADataSize   Size of the additional authenticated data (AAD) in bytes.
 | 
				
			||||||
 | 
					  @param[in]   DataIn      Pointer to the input data buffer to be encrypted.
 | 
				
			||||||
 | 
					  @param[in]   DataInSize  Size of the input data buffer in bytes.
 | 
				
			||||||
 | 
					  @param[out]  TagOut      Pointer to a buffer that receives the authentication tag output.
 | 
				
			||||||
 | 
					  @param[in]   TagSize     Size of the authentication tag in bytes.
 | 
				
			||||||
 | 
					  @param[out]  DataOut     Pointer to a buffer that receives the encryption output.
 | 
				
			||||||
 | 
					  @param[out]  DataOutSize Size of the output data buffer in bytes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @retval TRUE   AEAD AES-GCM authenticated encryption succeeded.
 | 
				
			||||||
 | 
					  @retval FALSE  AEAD AES-GCM authenticated encryption failed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**/
 | 
				
			||||||
 | 
					BOOLEAN
 | 
				
			||||||
 | 
					EFIAPI
 | 
				
			||||||
 | 
					CryptoServiceAeadAesGcmEncrypt (
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Key,
 | 
				
			||||||
 | 
					  IN   UINTN        KeySize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Iv,
 | 
				
			||||||
 | 
					  IN   UINTN        IvSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *AData,
 | 
				
			||||||
 | 
					  IN   UINTN        ADataSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *DataIn,
 | 
				
			||||||
 | 
					  IN   UINTN        DataInSize,
 | 
				
			||||||
 | 
					  OUT  UINT8        *TagOut,
 | 
				
			||||||
 | 
					  IN   UINTN        TagSize,
 | 
				
			||||||
 | 
					  OUT  UINT8        *DataOut,
 | 
				
			||||||
 | 
					  OUT  UINTN        *DataOutSize
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return CALL_BASECRYPTLIB (AeadAesGcm.Services.Encrypt, AeadAesGcmEncrypt, (Key, KeySize, Iv, IvSize, AData, ADataSize, DataIn, DataInSize, TagOut, TagSize, DataOut, DataOutSize), FALSE);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					  Performs AEAD AES-GCM authenticated decryption on a data buffer and additional authenticated data (AAD).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  IvSize must be 12, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  KeySize must be 16, 24 or 32, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  TagSize must be 12, 13, 14, 15, 16, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  If additional authenticated data verification fails, FALSE is returned.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @param[in]   Key         Pointer to the encryption key.
 | 
				
			||||||
 | 
					  @param[in]   KeySize     Size of the encryption key in bytes.
 | 
				
			||||||
 | 
					  @param[in]   Iv          Pointer to the IV value.
 | 
				
			||||||
 | 
					  @param[in]   IvSize      Size of the IV value in bytes.
 | 
				
			||||||
 | 
					  @param[in]   AData       Pointer to the additional authenticated data (AAD).
 | 
				
			||||||
 | 
					  @param[in]   ADataSize   Size of the additional authenticated data (AAD) in bytes.
 | 
				
			||||||
 | 
					  @param[in]   DataIn      Pointer to the input data buffer to be decrypted.
 | 
				
			||||||
 | 
					  @param[in]   DataInSize  Size of the input data buffer in bytes.
 | 
				
			||||||
 | 
					  @param[in]   Tag         Pointer to a buffer that contains the authentication tag.
 | 
				
			||||||
 | 
					  @param[in]   TagSize     Size of the authentication tag in bytes.
 | 
				
			||||||
 | 
					  @param[out]  DataOut     Pointer to a buffer that receives the decryption output.
 | 
				
			||||||
 | 
					  @param[out]  DataOutSize Size of the output data buffer in bytes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @retval TRUE   AEAD AES-GCM authenticated decryption succeeded.
 | 
				
			||||||
 | 
					  @retval FALSE  AEAD AES-GCM authenticated decryption failed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**/
 | 
				
			||||||
 | 
					BOOLEAN
 | 
				
			||||||
 | 
					EFIAPI
 | 
				
			||||||
 | 
					CryptoServiceAeadAesGcmDecrypt (
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Key,
 | 
				
			||||||
 | 
					  IN   UINTN        KeySize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Iv,
 | 
				
			||||||
 | 
					  IN   UINTN        IvSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *AData,
 | 
				
			||||||
 | 
					  IN   UINTN        ADataSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *DataIn,
 | 
				
			||||||
 | 
					  IN   UINTN        DataInSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Tag,
 | 
				
			||||||
 | 
					  IN   UINTN        TagSize,
 | 
				
			||||||
 | 
					  OUT  UINT8        *DataOut,
 | 
				
			||||||
 | 
					  OUT  UINTN        *DataOutSize
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return CALL_BASECRYPTLIB (AeadAesGcm.Services.Decrypt, AeadAesGcmDecrypt, (Key, KeySize, Iv, IvSize, AData, ADataSize, DataIn, DataInSize, Tag, TagSize, DataOut, DataOutSize), FALSE);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const EDKII_CRYPTO_PROTOCOL  mEdkiiCrypto = {
 | 
					const EDKII_CRYPTO_PROTOCOL  mEdkiiCrypto = {
 | 
				
			||||||
  /// Version
 | 
					  /// Version
 | 
				
			||||||
  CryptoServiceGetCryptoVersion,
 | 
					  CryptoServiceGetCryptoVersion,
 | 
				
			||||||
@@ -5159,5 +5248,8 @@ const EDKII_CRYPTO_PROTOCOL  mEdkiiCrypto = {
 | 
				
			|||||||
  CryptoServiceHkdfSha256Expand,
 | 
					  CryptoServiceHkdfSha256Expand,
 | 
				
			||||||
  CryptoServiceHkdfSha384ExtractAndExpand,
 | 
					  CryptoServiceHkdfSha384ExtractAndExpand,
 | 
				
			||||||
  CryptoServiceHkdfSha384Extract,
 | 
					  CryptoServiceHkdfSha384Extract,
 | 
				
			||||||
  CryptoServiceHkdfSha384Expand
 | 
					  CryptoServiceHkdfSha384Expand,
 | 
				
			||||||
 | 
					  /// Aead Aes GCM
 | 
				
			||||||
 | 
					  CryptoServiceAeadAesGcmEncrypt,
 | 
				
			||||||
 | 
					  CryptoServiceAeadAesGcmDecrypt
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -319,6 +319,13 @@ typedef struct {
 | 
				
			|||||||
    } Services;
 | 
					    } Services;
 | 
				
			||||||
    UINT32    Family;
 | 
					    UINT32    Family;
 | 
				
			||||||
  } ParallelHash;
 | 
					  } ParallelHash;
 | 
				
			||||||
 | 
					  union {
 | 
				
			||||||
 | 
					    struct {
 | 
				
			||||||
 | 
					      UINT8    Encrypt : 1;
 | 
				
			||||||
 | 
					      UINT8    Decrypt : 1;
 | 
				
			||||||
 | 
					    } Services;
 | 
				
			||||||
 | 
					    UINT32    Family;
 | 
				
			||||||
 | 
					  } AeadAesGcm;
 | 
				
			||||||
} PCD_CRYPTO_SERVICE_FAMILY_ENABLE;
 | 
					} PCD_CRYPTO_SERVICE_FAMILY_ENABLE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1552,6 +1552,99 @@ AesCbcDecrypt (
 | 
				
			|||||||
  CALL_CRYPTO_SERVICE (AesCbcDecrypt, (AesContext, Input, InputSize, Ivec, Output), FALSE);
 | 
					  CALL_CRYPTO_SERVICE (AesCbcDecrypt, (AesContext, Input, InputSize, Ivec, Output), FALSE);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// =====================================================================================
 | 
				
			||||||
 | 
					//    Authenticated Encryption with Associated Data (AEAD) Cryptography Primitive
 | 
				
			||||||
 | 
					// =====================================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					  Performs AEAD AES-GCM authenticated encryption on a data buffer and additional authenticated data (AAD).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  IvSize must be 12, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  KeySize must be 16, 24 or 32, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  TagSize must be 12, 13, 14, 15, 16, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @param[in]   Key         Pointer to the encryption key.
 | 
				
			||||||
 | 
					  @param[in]   KeySize     Size of the encryption key in bytes.
 | 
				
			||||||
 | 
					  @param[in]   Iv          Pointer to the IV value.
 | 
				
			||||||
 | 
					  @param[in]   IvSize      Size of the IV value in bytes.
 | 
				
			||||||
 | 
					  @param[in]   AData       Pointer to the additional authenticated data (AAD).
 | 
				
			||||||
 | 
					  @param[in]   ADataSize   Size of the additional authenticated data (AAD) in bytes.
 | 
				
			||||||
 | 
					  @param[in]   DataIn      Pointer to the input data buffer to be encrypted.
 | 
				
			||||||
 | 
					  @param[in]   DataInSize  Size of the input data buffer in bytes.
 | 
				
			||||||
 | 
					  @param[out]  TagOut      Pointer to a buffer that receives the authentication tag output.
 | 
				
			||||||
 | 
					  @param[in]   TagSize     Size of the authentication tag in bytes.
 | 
				
			||||||
 | 
					  @param[out]  DataOut     Pointer to a buffer that receives the encryption output.
 | 
				
			||||||
 | 
					  @param[out]  DataOutSize Size of the output data buffer in bytes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @retval TRUE   AEAD AES-GCM authenticated encryption succeeded.
 | 
				
			||||||
 | 
					  @retval FALSE  AEAD AES-GCM authenticated encryption failed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**/
 | 
				
			||||||
 | 
					BOOLEAN
 | 
				
			||||||
 | 
					EFIAPI
 | 
				
			||||||
 | 
					AeadAesGcmEncrypt (
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Key,
 | 
				
			||||||
 | 
					  IN   UINTN        KeySize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Iv,
 | 
				
			||||||
 | 
					  IN   UINTN        IvSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *AData,
 | 
				
			||||||
 | 
					  IN   UINTN        ADataSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *DataIn,
 | 
				
			||||||
 | 
					  IN   UINTN        DataInSize,
 | 
				
			||||||
 | 
					  OUT  UINT8        *TagOut,
 | 
				
			||||||
 | 
					  IN   UINTN        TagSize,
 | 
				
			||||||
 | 
					  OUT  UINT8        *DataOut,
 | 
				
			||||||
 | 
					  OUT  UINTN        *DataOutSize
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  CALL_CRYPTO_SERVICE (AeadAesGcmEncrypt, (Key, KeySize, Iv, IvSize, AData, ADataSize, DataIn, DataInSize, TagOut, TagSize, DataOut, DataOutSize), FALSE);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					  Performs AEAD AES-GCM authenticated decryption on a data buffer and additional authenticated data (AAD).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  IvSize must be 12, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  KeySize must be 16, 24 or 32, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  TagSize must be 12, 13, 14, 15, 16, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  If additional authenticated data verification fails, FALSE is returned.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @param[in]   Key         Pointer to the encryption key.
 | 
				
			||||||
 | 
					  @param[in]   KeySize     Size of the encryption key in bytes.
 | 
				
			||||||
 | 
					  @param[in]   Iv          Pointer to the IV value.
 | 
				
			||||||
 | 
					  @param[in]   IvSize      Size of the IV value in bytes.
 | 
				
			||||||
 | 
					  @param[in]   AData       Pointer to the additional authenticated data (AAD).
 | 
				
			||||||
 | 
					  @param[in]   ADataSize   Size of the additional authenticated data (AAD) in bytes.
 | 
				
			||||||
 | 
					  @param[in]   DataIn      Pointer to the input data buffer to be decrypted.
 | 
				
			||||||
 | 
					  @param[in]   DataInSize  Size of the input data buffer in bytes.
 | 
				
			||||||
 | 
					  @param[in]   Tag         Pointer to a buffer that contains the authentication tag.
 | 
				
			||||||
 | 
					  @param[in]   TagSize     Size of the authentication tag in bytes.
 | 
				
			||||||
 | 
					  @param[out]  DataOut     Pointer to a buffer that receives the decryption output.
 | 
				
			||||||
 | 
					  @param[out]  DataOutSize Size of the output data buffer in bytes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @retval TRUE   AEAD AES-GCM authenticated decryption succeeded.
 | 
				
			||||||
 | 
					  @retval FALSE  AEAD AES-GCM authenticated decryption failed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**/
 | 
				
			||||||
 | 
					BOOLEAN
 | 
				
			||||||
 | 
					EFIAPI
 | 
				
			||||||
 | 
					AeadAesGcmDecrypt (
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Key,
 | 
				
			||||||
 | 
					  IN   UINTN        KeySize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Iv,
 | 
				
			||||||
 | 
					  IN   UINTN        IvSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *AData,
 | 
				
			||||||
 | 
					  IN   UINTN        ADataSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *DataIn,
 | 
				
			||||||
 | 
					  IN   UINTN        DataInSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Tag,
 | 
				
			||||||
 | 
					  IN   UINTN        TagSize,
 | 
				
			||||||
 | 
					  OUT  UINT8        *DataOut,
 | 
				
			||||||
 | 
					  OUT  UINTN        *DataOutSize
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  CALL_CRYPTO_SERVICE (AeadAesGcmDecrypt, (Key, KeySize, Iv, IvSize, AData, ADataSize, DataIn, DataInSize, Tag, TagSize, DataOut, DataOutSize), FALSE);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// =====================================================================================
 | 
					// =====================================================================================
 | 
				
			||||||
//    Asymmetric Cryptography Primitive
 | 
					//    Asymmetric Cryptography Primitive
 | 
				
			||||||
// =====================================================================================
 | 
					// =====================================================================================
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@
 | 
				
			|||||||
/// the EDK II Crypto Protocol is extended, this version define must be
 | 
					/// the EDK II Crypto Protocol is extended, this version define must be
 | 
				
			||||||
/// increased.
 | 
					/// increased.
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
#define EDKII_CRYPTO_VERSION  10
 | 
					#define EDKII_CRYPTO_VERSION  11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
/// EDK II Crypto Protocol forward declaration
 | 
					/// EDK II Crypto Protocol forward declaration
 | 
				
			||||||
@@ -3805,6 +3805,89 @@ BOOLEAN
 | 
				
			|||||||
  IN       UINTN  CustomByteLen
 | 
					  IN       UINTN  CustomByteLen
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					  Performs AEAD AES-GCM authenticated encryption on a data buffer and additional authenticated data (AAD).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  IvSize must be 12, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  KeySize must be 16, 24 or 32, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  TagSize must be 12, 13, 14, 15, 16, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @param[in]   Key         Pointer to the encryption key.
 | 
				
			||||||
 | 
					  @param[in]   KeySize     Size of the encryption key in bytes.
 | 
				
			||||||
 | 
					  @param[in]   Iv          Pointer to the IV value.
 | 
				
			||||||
 | 
					  @param[in]   IvSize      Size of the IV value in bytes.
 | 
				
			||||||
 | 
					  @param[in]   AData       Pointer to the additional authenticated data (AAD).
 | 
				
			||||||
 | 
					  @param[in]   ADataSize   Size of the additional authenticated data (AAD) in bytes.
 | 
				
			||||||
 | 
					  @param[in]   DataIn      Pointer to the input data buffer to be encrypted.
 | 
				
			||||||
 | 
					  @param[in]   DataInSize  Size of the input data buffer in bytes.
 | 
				
			||||||
 | 
					  @param[out]  TagOut      Pointer to a buffer that receives the authentication tag output.
 | 
				
			||||||
 | 
					  @param[in]   TagSize     Size of the authentication tag in bytes.
 | 
				
			||||||
 | 
					  @param[out]  DataOut     Pointer to a buffer that receives the encryption output.
 | 
				
			||||||
 | 
					  @param[out]  DataOutSize Size of the output data buffer in bytes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @retval TRUE   AEAD AES-GCM authenticated encryption succeeded.
 | 
				
			||||||
 | 
					  @retval FALSE  AEAD AES-GCM authenticated encryption failed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**/
 | 
				
			||||||
 | 
					typedef
 | 
				
			||||||
 | 
					BOOLEAN
 | 
				
			||||||
 | 
					(EFIAPI *EDKII_AEAD_AES_GCM_ENCRYPT)(
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Key,
 | 
				
			||||||
 | 
					  IN   UINTN        KeySize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Iv,
 | 
				
			||||||
 | 
					  IN   UINTN        IvSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *AData,
 | 
				
			||||||
 | 
					  IN   UINTN        ADataSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *DataIn,
 | 
				
			||||||
 | 
					  IN   UINTN        DataInSize,
 | 
				
			||||||
 | 
					  OUT  UINT8        *TagOut,
 | 
				
			||||||
 | 
					  IN   UINTN        TagSize,
 | 
				
			||||||
 | 
					  OUT  UINT8        *DataOut,
 | 
				
			||||||
 | 
					  OUT  UINTN        *DataOutSize
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					  Performs AEAD AES-GCM authenticated decryption on a data buffer and additional authenticated data (AAD).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  IvSize must be 12, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  KeySize must be 16, 24 or 32, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  TagSize must be 12, 13, 14, 15, 16, otherwise FALSE is returned.
 | 
				
			||||||
 | 
					  If additional authenticated data verification fails, FALSE is returned.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @param[in]   Key         Pointer to the encryption key.
 | 
				
			||||||
 | 
					  @param[in]   KeySize     Size of the encryption key in bytes.
 | 
				
			||||||
 | 
					  @param[in]   Iv          Pointer to the IV value.
 | 
				
			||||||
 | 
					  @param[in]   IvSize      Size of the IV value in bytes.
 | 
				
			||||||
 | 
					  @param[in]   AData       Pointer to the additional authenticated data (AAD).
 | 
				
			||||||
 | 
					  @param[in]   ADataSize   Size of the additional authenticated data (AAD) in bytes.
 | 
				
			||||||
 | 
					  @param[in]   DataIn      Pointer to the input data buffer to be decrypted.
 | 
				
			||||||
 | 
					  @param[in]   DataInSize  Size of the input data buffer in bytes.
 | 
				
			||||||
 | 
					  @param[in]   Tag         Pointer to a buffer that contains the authentication tag.
 | 
				
			||||||
 | 
					  @param[in]   TagSize     Size of the authentication tag in bytes.
 | 
				
			||||||
 | 
					  @param[out]  DataOut     Pointer to a buffer that receives the decryption output.
 | 
				
			||||||
 | 
					  @param[out]  DataOutSize Size of the output data buffer in bytes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @retval TRUE   AEAD AES-GCM authenticated decryption succeeded.
 | 
				
			||||||
 | 
					  @retval FALSE  AEAD AES-GCM authenticated decryption failed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**/
 | 
				
			||||||
 | 
					typedef
 | 
				
			||||||
 | 
					BOOLEAN
 | 
				
			||||||
 | 
					(EFIAPI *EDKII_AEAD_AES_GCM_DECRYPT)(
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Key,
 | 
				
			||||||
 | 
					  IN   UINTN        KeySize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Iv,
 | 
				
			||||||
 | 
					  IN   UINTN        IvSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *AData,
 | 
				
			||||||
 | 
					  IN   UINTN        ADataSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *DataIn,
 | 
				
			||||||
 | 
					  IN   UINTN        DataInSize,
 | 
				
			||||||
 | 
					  IN   CONST UINT8  *Tag,
 | 
				
			||||||
 | 
					  IN   UINTN        TagSize,
 | 
				
			||||||
 | 
					  OUT  UINT8        *DataOut,
 | 
				
			||||||
 | 
					  OUT  UINTN        *DataOutSize
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
/// EDK II Crypto Protocol
 | 
					/// EDK II Crypto Protocol
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
@@ -4010,6 +4093,9 @@ struct _EDKII_CRYPTO_PROTOCOL {
 | 
				
			|||||||
  EDKII_CRYPTO_HKDF_SHA_384_EXTRACT_AND_EXPAND       HkdfSha384ExtractAndExpand;
 | 
					  EDKII_CRYPTO_HKDF_SHA_384_EXTRACT_AND_EXPAND       HkdfSha384ExtractAndExpand;
 | 
				
			||||||
  EDKII_CRYPTO_HKDF_SHA_384_EXTRACT                  HkdfSha384Extract;
 | 
					  EDKII_CRYPTO_HKDF_SHA_384_EXTRACT                  HkdfSha384Extract;
 | 
				
			||||||
  EDKII_CRYPTO_HKDF_SHA_384_EXPAND                   HkdfSha384Expand;
 | 
					  EDKII_CRYPTO_HKDF_SHA_384_EXPAND                   HkdfSha384Expand;
 | 
				
			||||||
 | 
					  /// AEAD AES-GCM
 | 
				
			||||||
 | 
					  EDKII_AEAD_AES_GCM_ENCRYPT                         AeadAesGcmEncrypt;
 | 
				
			||||||
 | 
					  EDKII_AEAD_AES_GCM_DECRYPT                         AeadAesGcmDecrypt;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern GUID  gEdkiiCryptoProtocolGuid;
 | 
					extern GUID  gEdkiiCryptoProtocolGuid;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user