mirror of https://github.com/acidanthera/audk.git
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:
parent
a23f76e184
commit
022787f806
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue