Merge pull request #3258 from dgarske/nxp_hw
Fixes for NXP MMCAU/LTC mutex locking and build
This commit is contained in:
commit
ab7408f7d6
@ -315,6 +315,10 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
#if defined(STM32_HAL_V2)
|
||||
hcryp.Init.Algorithm = CRYP_AES_ECB;
|
||||
#elif defined(STM32_CRYPTO_AES_ONLY)
|
||||
@ -344,6 +348,10 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
/* reset registers to their default values */
|
||||
CRYP_DeInit();
|
||||
|
||||
@ -377,6 +385,7 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
/* disable crypto processor */
|
||||
CRYP_Cmd(DISABLE);
|
||||
#endif /* WOLFSSL_STM32_CUBEMX */
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -399,6 +408,10 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
#if defined(STM32_HAL_V2)
|
||||
hcryp.Init.Algorithm = CRYP_AES_ECB;
|
||||
#elif defined(STM32_CRYPTO_AES_ONLY)
|
||||
@ -428,6 +441,10 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
/* reset registers to their default values */
|
||||
CRYP_DeInit();
|
||||
|
||||
@ -470,6 +487,7 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
/* disable crypto processor */
|
||||
CRYP_Cmd(DISABLE);
|
||||
#endif /* WOLFSSL_STM32_CUBEMX */
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -488,19 +506,38 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
#if defined(FREESCALE_LTC_AES_GCM)
|
||||
#undef NEED_AES_TABLES
|
||||
#undef GCM_TABLE
|
||||
#else
|
||||
#endif
|
||||
|
||||
/* if LTC doesn't have GCM, use software with LTC AES ECB mode */
|
||||
static int wc_AesEncrypt(Aes* aes, const byte* inBlock, byte* outBlock)
|
||||
{
|
||||
wc_AesEncryptDirect(aes, outBlock, inBlock);
|
||||
uint32_t keySize = 0;
|
||||
byte* key = (byte*)aes->key;
|
||||
wc_AesGetKeySize(aes, &keySize);
|
||||
|
||||
if (wolfSSL_CryptHwMutexLock() == 0) {
|
||||
LTC_AES_EncryptEcb(LTC_BASE, inBlock, outBlock, AES_BLOCK_SIZE,
|
||||
key, keySize);
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#ifdef HAVE_AES_DECRYPT
|
||||
static int wc_AesDecrypt(Aes* aes, const byte* inBlock, byte* outBlock)
|
||||
{
|
||||
wc_AesDecryptDirect(aes, outBlock, inBlock);
|
||||
uint32_t keySize = 0;
|
||||
byte* key = (byte*)aes->key;
|
||||
wc_AesGetKeySize(aes, &keySize);
|
||||
|
||||
if (wolfSSL_CryptHwMutexLock() == 0) {
|
||||
LTC_AES_DecryptEcb(LTC_BASE, inBlock, outBlock, AES_BLOCK_SIZE,
|
||||
key, keySize, kLTC_EncryptKey);
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#elif defined(FREESCALE_MMCAU)
|
||||
/* Freescale mmCAU hardware AES support for Direct, CBC, CCM, GCM modes
|
||||
* through the CAU/mmCAU library. Documentation located in
|
||||
@ -515,18 +552,12 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
|
||||
static int wc_AesEncrypt(Aes* aes, const byte* inBlock, byte* outBlock)
|
||||
{
|
||||
int ret;
|
||||
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
if ((wolfssl_word)outBlock % WOLFSSL_MMCAU_ALIGNMENT) {
|
||||
WOLFSSL_MSG("Bad cau_aes_encrypt alignment");
|
||||
return BAD_ALIGN_E;
|
||||
}
|
||||
#endif
|
||||
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if(ret == 0) {
|
||||
if (wolfSSL_CryptHwMutexLock() == 0) {
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
if ((wolfssl_word)outBlock % WOLFSSL_MMCAU_ALIGNMENT) {
|
||||
WOLFSSL_MSG("Bad cau_aes_encrypt alignment");
|
||||
return BAD_ALIGN_E;
|
||||
}
|
||||
cau_aes_encrypt(inBlock, (byte*)aes->key, aes->rounds, outBlock);
|
||||
#else
|
||||
MMCAU_AES_EncryptEcb(inBlock, (byte*)aes->key, aes->rounds,
|
||||
@ -534,23 +565,17 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
#ifdef HAVE_AES_DECRYPT
|
||||
static int wc_AesDecrypt(Aes* aes, const byte* inBlock, byte* outBlock)
|
||||
{
|
||||
int ret;
|
||||
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
if ((wolfssl_word)outBlock % WOLFSSL_MMCAU_ALIGNMENT) {
|
||||
WOLFSSL_MSG("Bad cau_aes_decrypt alignment");
|
||||
return BAD_ALIGN_E;
|
||||
}
|
||||
#endif
|
||||
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if(ret == 0) {
|
||||
if (wolfSSL_CryptHwMutexLock() == 0) {
|
||||
#ifdef FREESCALE_MMCAU_CLASSIC
|
||||
if ((wolfssl_word)outBlock % WOLFSSL_MMCAU_ALIGNMENT) {
|
||||
WOLFSSL_MSG("Bad cau_aes_decrypt alignment");
|
||||
return BAD_ALIGN_E;
|
||||
}
|
||||
cau_aes_decrypt(inBlock, (byte*)aes->key, aes->rounds, outBlock);
|
||||
#else
|
||||
MMCAU_AES_DecryptEcb(inBlock, (byte*)aes->key, aes->rounds,
|
||||
@ -558,7 +583,7 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
#endif
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
#endif /* HAVE_AES_DECRYPT */
|
||||
|
||||
@ -569,6 +594,7 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
#if defined(HAVE_AESGCM) || defined(WOLFSSL_AES_DIRECT)
|
||||
static int wc_AesEncrypt(Aes* aes, const byte* inBlock, byte* outBlock)
|
||||
{
|
||||
/* Thread mutex protection handled in Pic32Crypto */
|
||||
return wc_Pic32AesCrypt(aes->key, aes->keylen, NULL, 0,
|
||||
outBlock, inBlock, AES_BLOCK_SIZE,
|
||||
PIC32_ENCRYPTION, PIC32_ALGO_AES, PIC32_CRYPTOALGO_RECB);
|
||||
@ -578,6 +604,7 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
#if defined(HAVE_AES_DECRYPT) && defined(WOLFSSL_AES_DIRECT)
|
||||
static int wc_AesDecrypt(Aes* aes, const byte* inBlock, byte* outBlock)
|
||||
{
|
||||
/* Thread mutex protection handled in Pic32Crypto */
|
||||
return wc_Pic32AesCrypt(aes->key, aes->keylen, NULL, 0,
|
||||
outBlock, inBlock, AES_BLOCK_SIZE,
|
||||
PIC32_DECRYPTION, PIC32_ALGO_AES, PIC32_CRYPTOALGO_RECB);
|
||||
@ -590,7 +617,13 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
|
||||
static int wc_AesEncrypt(Aes* aes, const byte* inBlock, byte* outBlock)
|
||||
{
|
||||
return nrf51_aes_encrypt(inBlock, (byte*)aes->key, aes->rounds, outBlock);
|
||||
int ret;
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if (ret == 0) {
|
||||
ret = nrf51_aes_encrypt(inBlock, (byte*)aes->key, aes->rounds, outBlock);
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef HAVE_AES_DECRYPT
|
||||
@ -605,6 +638,7 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
#if defined(HAVE_AESGCM) || defined(WOLFSSL_AES_DIRECT)
|
||||
static int wc_AesEncrypt(Aes* aes, const byte* inBlock, byte* outBlock)
|
||||
{
|
||||
/* Thread mutex protection handled in esp_aes_hw_InUse */
|
||||
return wc_esp32AesEncrypt(aes, inBlock, outBlock);
|
||||
}
|
||||
#endif
|
||||
@ -612,6 +646,7 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
#if defined(HAVE_AES_DECRYPT) && defined(WOLFSSL_AES_DIRECT)
|
||||
static int wc_AesDecrypt(Aes* aes, const byte* inBlock, byte* outBlock)
|
||||
{
|
||||
/* Thread mutex protection handled in esp_aes_hw_InUse */
|
||||
return wc_esp32AesDecrypt(aes, inBlock, outBlock);
|
||||
}
|
||||
#endif
|
||||
@ -779,7 +814,10 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
}
|
||||
|
||||
#elif defined(WOLFSSL_AFALG)
|
||||
/* implemented in wolfcrypt/src/port/af_alg/afalg_aes.c */
|
||||
|
||||
#elif defined(WOLFSSL_DEVCRYPTO_AES)
|
||||
/* implemented in wolfcrypt/src/port/devcrypto/devcrypto_aes.c */
|
||||
|
||||
#elif defined(WOLFSSL_SCE) && !defined(WOLFSSL_SCE_NO_AES)
|
||||
#include "hal_data.h"
|
||||
@ -837,7 +875,7 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
}
|
||||
|
||||
if (ret != SSP_SUCCESS) {
|
||||
/* revert input */
|
||||
/* revert input */
|
||||
ByteReverseWords((word32*)inBlock, (word32*)inBlock, sz);
|
||||
return WC_HW_E;
|
||||
}
|
||||
@ -908,8 +946,7 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* HAVE_AES_DECRYPT */
|
||||
|
||||
#if defined(HAVE_AESGCM) || defined(WOLFSSL_AES_DIRECT)
|
||||
static int wc_AesEncrypt(Aes* aes, const byte* inBlock, byte* outBlock)
|
||||
@ -1478,7 +1515,7 @@ static const FLASH_QUALIFIER word32 Td[4][256] = {
|
||||
}
|
||||
};
|
||||
#endif /* HAVE_AES_DECRYPT */
|
||||
#endif
|
||||
#endif /* WOLFSSL_AES_SMALL_TABLES */
|
||||
|
||||
#ifdef HAVE_AES_DECRYPT
|
||||
#if (defined(HAVE_AES_CBC) && !defined(WOLFSSL_DEVCRYPTO_CBC)) \
|
||||
@ -2867,33 +2904,6 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
|
||||
#if defined(HAVE_COLDFIRE_SEC)
|
||||
#error "Coldfire SEC doesn't yet support AES direct"
|
||||
|
||||
#elif defined(FREESCALE_LTC)
|
||||
/* Allow direct access to one block encrypt */
|
||||
void wc_AesEncryptDirect(Aes* aes, byte* out, const byte* in)
|
||||
{
|
||||
byte *key;
|
||||
uint32_t keySize;
|
||||
|
||||
key = (byte*)aes->key;
|
||||
wc_AesGetKeySize(aes, &keySize);
|
||||
|
||||
LTC_AES_EncryptEcb(LTC_BASE, in, out, AES_BLOCK_SIZE,
|
||||
key, keySize);
|
||||
}
|
||||
|
||||
/* Allow direct access to one block decrypt */
|
||||
void wc_AesDecryptDirect(Aes* aes, byte* out, const byte* in)
|
||||
{
|
||||
byte *key;
|
||||
uint32_t keySize;
|
||||
|
||||
key = (byte*)aes->key;
|
||||
wc_AesGetKeySize(aes, &keySize);
|
||||
|
||||
LTC_AES_DecryptEcb(LTC_BASE, in, out, AES_BLOCK_SIZE,
|
||||
key, keySize, kLTC_EncryptKey);
|
||||
}
|
||||
|
||||
#elif defined(WOLFSSL_IMX6_CAAM) && !defined(NO_IMX6_CAAM_AES)
|
||||
/* implemented in wolfcrypt/src/port/caam/caam_aes.c */
|
||||
|
||||
@ -2903,41 +2913,6 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
|
||||
#elif defined(WOLFSSL_DEVCRYPTO_AES)
|
||||
/* implemented in wolfcrypt/src/port/devcrypt/devcrypto_aes.c */
|
||||
|
||||
#elif defined(STM32_CRYPTO)
|
||||
/* Allow direct access to one block encrypt */
|
||||
void wc_AesEncryptDirect(Aes* aes, byte* out, const byte* in)
|
||||
{
|
||||
if (wolfSSL_CryptHwMutexLock() == 0) {
|
||||
wc_AesEncrypt(aes, in, out);
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
}
|
||||
#ifdef HAVE_AES_DECRYPT
|
||||
/* Allow direct access to one block decrypt */
|
||||
void wc_AesDecryptDirect(Aes* aes, byte* out, const byte* in)
|
||||
{
|
||||
if (wolfSSL_CryptHwMutexLock() == 0) {
|
||||
wc_AesDecrypt(aes, in, out);
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_AES_DECRYPT */
|
||||
|
||||
#elif defined(WOLFSSL_ESP32WROOM32_CRYPT) && \
|
||||
!defined(NO_WOLFSSL_ESP32WROOM32_CRYPT_AES)
|
||||
|
||||
/* Allow direct access to one block encrypt */
|
||||
void wc_AesEncryptDirect(Aes* aes, byte* out, const byte* in)
|
||||
{
|
||||
wc_AesEncrypt(aes, in, out);
|
||||
}
|
||||
#ifdef HAVE_AES_DECRYPT
|
||||
/* Allow direct access to one block decrypt */
|
||||
void wc_AesDecryptDirect(Aes* aes, byte* out, const byte* in)
|
||||
{
|
||||
wc_AesDecrypt(aes, in, out);
|
||||
}
|
||||
#endif /* HAVE_AES_DECRYPT */
|
||||
#else
|
||||
/* Allow direct access to one block encrypt */
|
||||
void wc_AesEncryptDirect(Aes* aes, byte* out, const byte* in)
|
||||
@ -3349,8 +3324,12 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
|
||||
return status;
|
||||
}
|
||||
|
||||
status = wolfSSL_CryptHwMutexLock();
|
||||
if (status != 0)
|
||||
return status;
|
||||
status = LTC_AES_EncryptCbc(LTC_BASE, in, out, blocks * AES_BLOCK_SIZE,
|
||||
iv, enc_key, keySize);
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
/* store iv for next call */
|
||||
if (status == kStatus_Success) {
|
||||
@ -3380,8 +3359,12 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
|
||||
/* get IV for next call */
|
||||
XMEMCPY(temp_block, in + sz - AES_BLOCK_SIZE, AES_BLOCK_SIZE);
|
||||
|
||||
status = wolfSSL_CryptHwMutexLock();
|
||||
if (status != 0)
|
||||
return status;
|
||||
status = LTC_AES_DecryptCbc(LTC_BASE, in, out, blocks * AES_BLOCK_SIZE,
|
||||
iv, dec_key, keySize, kLTC_EncryptKey);
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
/* store IV for next call */
|
||||
if (status == kStatus_Success) {
|
||||
@ -3401,7 +3384,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
|
||||
byte *iv;
|
||||
byte temp_block[AES_BLOCK_SIZE];
|
||||
|
||||
iv = (byte*)aes->reg;
|
||||
iv = (byte*)aes->reg;
|
||||
|
||||
while (blocks--) {
|
||||
XMEMCPY(temp_block, in + offset, AES_BLOCK_SIZE);
|
||||
@ -3429,7 +3412,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
|
||||
byte* iv;
|
||||
byte temp_block[AES_BLOCK_SIZE];
|
||||
|
||||
iv = (byte*)aes->reg;
|
||||
iv = (byte*)aes->reg;
|
||||
|
||||
while (blocks--) {
|
||||
XMEMCPY(temp_block, in + offset, AES_BLOCK_SIZE);
|
||||
@ -3867,6 +3850,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
|
||||
#elif defined(FREESCALE_LTC)
|
||||
int wc_AesCtrEncrypt(Aes* aes, byte* out, const byte* in, word32 sz)
|
||||
{
|
||||
int ret = 0;
|
||||
uint32_t keySize;
|
||||
byte *iv, *enc_key;
|
||||
byte* tmp;
|
||||
@ -3889,12 +3873,16 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
|
||||
|
||||
wc_AesGetKeySize(aes, &keySize);
|
||||
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
LTC_AES_CryptCtr(LTC_BASE, in, out, sz,
|
||||
iv, enc_key, keySize, (byte*)aes->tmp,
|
||||
(uint32_t*)&aes->left);
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#elif defined(WOLFSSL_IMX6_CAAM) && !defined(NO_IMX6_CAAM_AES)
|
||||
@ -4151,11 +4139,7 @@ int wc_AesGcmSetKey(Aes* aes, const byte* key, word32 len)
|
||||
|
||||
#if !defined(FREESCALE_LTC_AES_GCM)
|
||||
if (ret == 0) {
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if (ret == 0) {
|
||||
wc_AesEncrypt(aes, iv, aes->H);
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
}
|
||||
wc_AesEncrypt(aes, iv, aes->H);
|
||||
#ifdef GCM_TABLE
|
||||
GenerateM0(aes);
|
||||
#endif /* GCM_TABLE */
|
||||
@ -5902,8 +5886,13 @@ int wc_AesGcmEncrypt(Aes* aes, byte* out, const byte* in, word32 sz,
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
status = wolfSSL_CryptHwMutexLock();
|
||||
if (status != 0)
|
||||
return status;
|
||||
|
||||
status = LTC_AES_EncryptTagGcm(LTC_BASE, in, out, sz, iv, ivSz,
|
||||
authIn, authInSz, (byte*)aes->key, keySize, authTag, authTagSz);
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
return (status == kStatus_Success) ? 0 : AES_GCM_AUTH_E;
|
||||
}
|
||||
@ -5950,11 +5939,6 @@ static int wc_AesGcmEncrypt_STM32(Aes* aes, byte* out, const byte* in, word32 sz
|
||||
return ret;
|
||||
#endif
|
||||
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
XMEMSET(ctr, 0, AES_BLOCK_SIZE);
|
||||
if (ivSz == GCM_NONCE_MID_SZ) {
|
||||
byte* pCtr = (byte*)ctr;
|
||||
@ -5992,6 +5976,10 @@ static int wc_AesGcmEncrypt_STM32(Aes* aes, byte* out, const byte* in, word32 sz
|
||||
/* Hardware requires counter + 1 */
|
||||
IncrementGcmCounter((byte*)ctr);
|
||||
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
#ifdef WOLFSSL_STM32_CUBEMX
|
||||
hcryp.Init.pInitVect = (STM_CRYPT_TYPE*)ctr;
|
||||
hcryp.Init.Header = (STM_CRYPT_TYPE*)authInPadded;
|
||||
@ -6085,6 +6073,7 @@ static int wc_AesGcmEncrypt_STM32(Aes* aes, byte* out, const byte* in, word32 sz
|
||||
if (status != SUCCESS)
|
||||
ret = AES_GCM_AUTH_E;
|
||||
#endif /* WOLFSSL_STM32_CUBEMX */
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
if (ret == 0) {
|
||||
/* return authTag */
|
||||
@ -6106,8 +6095,6 @@ static int wc_AesGcmEncrypt_STM32(Aes* aes, byte* out, const byte* in, word32 sz
|
||||
XFREE(authInPadded, aes->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
}
|
||||
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -6350,8 +6337,13 @@ int wc_AesGcmDecrypt(Aes* aes, byte* out, const byte* in, word32 sz,
|
||||
return ret;
|
||||
}
|
||||
|
||||
status = wolfSSL_CryptHwMutexLock();
|
||||
if (status != 0)
|
||||
return status;
|
||||
|
||||
status = LTC_AES_DecryptTagGcm(LTC_BASE, in, out, sz, iv, ivSz,
|
||||
authIn, authInSz, (byte*)aes->key, keySize, authTag, authTagSz);
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
return (status == kStatus_Success) ? 0 : AES_GCM_AUTH_E;
|
||||
}
|
||||
@ -6395,11 +6387,6 @@ static int wc_AesGcmDecrypt_STM32(Aes* aes, byte* out,
|
||||
return ret;
|
||||
#endif
|
||||
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
XMEMSET(ctr, 0, AES_BLOCK_SIZE);
|
||||
if (ivSz == GCM_NONCE_MID_SZ) {
|
||||
byte* pCtr = (byte*)ctr;
|
||||
@ -6437,6 +6424,10 @@ static int wc_AesGcmDecrypt_STM32(Aes* aes, byte* out,
|
||||
/* Hardware requires counter + 1 */
|
||||
IncrementGcmCounter((byte*)ctr);
|
||||
|
||||
ret = wolfSSL_CryptHwMutexLock();
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
#ifdef WOLFSSL_STM32_CUBEMX
|
||||
hcryp.Init.pInitVect = (STM_CRYPT_TYPE*)ctr;
|
||||
hcryp.Init.Header = (STM_CRYPT_TYPE*)authInPadded;
|
||||
@ -6535,6 +6526,7 @@ static int wc_AesGcmDecrypt_STM32(Aes* aes, byte* out,
|
||||
if (status != SUCCESS)
|
||||
ret = AES_GCM_AUTH_E;
|
||||
#endif /* WOLFSSL_STM32_CUBEMX */
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
/* For STM32 GCM fallback to software if partial AES block or IV != 12 */
|
||||
if (sz == 0 || partial != 0 || ivSz != GCM_NONCE_MID_SZ) {
|
||||
@ -6553,8 +6545,6 @@ static int wc_AesGcmDecrypt_STM32(Aes* aes, byte* out,
|
||||
XFREE(authInPadded, aes->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
}
|
||||
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -7030,8 +7020,9 @@ int wc_AesCcmEncrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
|
||||
|
||||
/* sanity check on arguments */
|
||||
if (aes == NULL || out == NULL || in == NULL || nonce == NULL
|
||||
|| authTag == NULL || nonceSz < 7 || nonceSz > 13)
|
||||
|| authTag == NULL || nonceSz < 7 || nonceSz > 13) {
|
||||
return BAD_FUNC_ARG;
|
||||
}
|
||||
|
||||
if (wc_AesCcmCheckTagSize(authTagSz) != 0) {
|
||||
return BAD_FUNC_ARG;
|
||||
@ -7044,8 +7035,13 @@ int wc_AesCcmEncrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
|
||||
return status;
|
||||
}
|
||||
|
||||
status = wolfSSL_CryptHwMutexLock();
|
||||
if (status != 0)
|
||||
return status;
|
||||
|
||||
status = LTC_AES_EncryptTagCcm(LTC_BASE, in, out, inSz,
|
||||
nonce, nonceSz, authIn, authInSz, key, keySize, authTag, authTagSz);
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
return (kStatus_Success == status) ? 0 : BAD_FUNC_ARG;
|
||||
}
|
||||
@ -7062,8 +7058,9 @@ int wc_AesCcmDecrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
|
||||
|
||||
/* sanity check on arguments */
|
||||
if (aes == NULL || out == NULL || in == NULL || nonce == NULL
|
||||
|| authTag == NULL || nonceSz < 7 || nonceSz > 13)
|
||||
|| authTag == NULL || nonceSz < 7 || nonceSz > 13) {
|
||||
return BAD_FUNC_ARG;
|
||||
}
|
||||
|
||||
key = (byte*)aes->key;
|
||||
|
||||
@ -7071,17 +7068,19 @@ int wc_AesCcmDecrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
|
||||
if (status != 0) {
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
status = wolfSSL_CryptHwMutexLock();
|
||||
if (status != 0)
|
||||
return status;
|
||||
status = LTC_AES_DecryptTagCcm(LTC_BASE, in, out, inSz,
|
||||
nonce, nonceSz, authIn, authInSz, key, keySize, authTag, authTagSz);
|
||||
wolfSSL_CryptHwMutexUnLock();
|
||||
|
||||
if (status == kStatus_Success) {
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
if (status != kStatus_Success) {
|
||||
XMEMSET(out, 0, inSz);
|
||||
return AES_CCM_AUTH_E;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif /* HAVE_AES_DECRYPT */
|
||||
|
||||
|
@ -768,6 +768,15 @@ int wc_ecc_mulmod_ex(mp_int *k, ecc_point *G, ecc_point *R, mp_int* a,
|
||||
return res;
|
||||
}
|
||||
|
||||
int wc_ecc_mulmod_ex2(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
|
||||
mp_int* modulus, mp_int* order, WC_RNG* rng, int map,
|
||||
void* heap)
|
||||
{
|
||||
(void)order;
|
||||
(void)rng;
|
||||
return wc_ecc_mulmod_ex(k, G, R, a, modulus, map, heap);
|
||||
}
|
||||
|
||||
int wc_ecc_point_add(ecc_point *mG, ecc_point *mQ, ecc_point *mR, mp_int *m)
|
||||
{
|
||||
int res;
|
||||
|
@ -725,6 +725,15 @@ int wc_ecc_mulmod_ex(mp_int *k, ecc_point *G, ecc_point *R, mp_int* a,
|
||||
return res;
|
||||
}
|
||||
|
||||
int wc_ecc_mulmod_ex2(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
|
||||
mp_int* modulus, mp_int* order, WC_RNG* rng, int map,
|
||||
void* heap)
|
||||
{
|
||||
(void)order;
|
||||
(void)rng;
|
||||
return wc_ecc_mulmod_ex(k, G, R, a, modulus, map, heap);
|
||||
}
|
||||
|
||||
int stm32_ecc_verify_hash_ex(mp_int *r, mp_int *s, const byte* hash,
|
||||
word32 hashlen, int* res, ecc_key* key)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user