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:
		| @@ -1552,6 +1552,99 @@ AesCbcDecrypt ( | ||||
|   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 | ||||
| // ===================================================================================== | ||||
|   | ||||
		Reference in New Issue
	
	Block a user