Skip to content

Commit 12a16e6

Browse files
committed
[TA-100] Fixed GMAC, AES-GCM, AES, ECC
- Using correct slot ID for AES keys - Adjust IV length - Fallback operations to software for unsupported ECC curves (all tests passing)
1 parent 1a14440 commit 12a16e6

4 files changed

Lines changed: 419 additions & 103 deletions

File tree

wolfcrypt/src/aes.c

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5060,11 +5060,16 @@ static void AesSetKey_C(Aes* aes, const byte* key, word32 keySz, int dir)
50605060
}
50615061
#endif
50625062
#if defined(WOLFSSL_MICROCHIP_TA100) && defined(WOLFSSL_MICROCHIP_AESGCM)
5063-
ret = wc_Microchip_aes_set_key(aes, userKey, keylen, iv, dir);
5064-
if (ret == 0) {
5063+
if (keylen == TA_KEY_TYPE_AES128_SIZE) {
5064+
ret = wc_Microchip_aes_set_key(aes, userKey, keylen, iv, dir);
5065+
if (ret != 0) {
5066+
return ret;
5067+
}
50655068
ret = wc_AesSetIV(aes, iv);
5069+
if (ret != 0) {
5070+
return ret;
5071+
}
50665072
}
5067-
return ret;
50685073
#endif
50695074
XMEMCPY(aes->key, userKey, keylen);
50705075

@@ -9833,11 +9838,20 @@ int wc_AesGcmEncrypt(Aes* aes, byte* out, const byte* in, word32 sz,
98339838
authIn, authInSz);
98349839
#endif
98359840
#if defined(WOLFSSL_MICROCHIP_TA100) && defined(WOLFSSL_MICROCHIP_AESGCM)
9836-
return wc_Microchip_AesGcmEncrypt(
9837-
aes, out, in, sz,
9838-
iv, ivSz,
9839-
authTag, authTagSz,
9840-
authIn, authInSz);
9841+
#ifndef TA_AES_GCM_MAX_DATA_SIZE
9842+
#define TA_AES_GCM_MAX_DATA_SIZE 996u
9843+
#endif
9844+
if (aes != NULL &&
9845+
aes->keylen == TA_KEY_TYPE_AES128_SIZE &&
9846+
ivSz == TA_AES_GCM_IV_LENGTH &&
9847+
authTagSz == TA_AES_GCM_TAG_LENGTH &&
9848+
(authInSz + sz) <= TA_AES_GCM_MAX_DATA_SIZE) {
9849+
return wc_Microchip_AesGcmEncrypt(
9850+
aes, out, in, sz,
9851+
iv, ivSz,
9852+
authTag, authTagSz,
9853+
authIn, authInSz);
9854+
}
98419855
#endif
98429856
#ifdef STM32_CRYPTO_AES_GCM
98439857
return wc_AesGcmEncrypt_STM32(
@@ -10563,9 +10577,18 @@ int wc_AesGcmDecrypt(Aes* aes, byte* out, const byte* in, word32 sz,
1056310577

1056410578
#endif
1056510579
#if defined(WOLFSSL_MICROCHIP_TA100) && defined(WOLFSSL_MICROCHIP_AESGCM)
10566-
return wc_Microchip_AesGcmDecrypt(
10567-
aes, out, in, sz, iv, ivSz,
10568-
authTag, authTagSz, authIn, authInSz);
10580+
#ifndef TA_AES_GCM_MAX_DATA_SIZE
10581+
#define TA_AES_GCM_MAX_DATA_SIZE 996u
10582+
#endif
10583+
if (aes != NULL &&
10584+
aes->keylen == TA_KEY_TYPE_AES128_SIZE &&
10585+
ivSz == TA_AES_GCM_IV_LENGTH &&
10586+
authTagSz == TA_AES_GCM_TAG_LENGTH &&
10587+
(authInSz + sz) <= TA_AES_GCM_MAX_DATA_SIZE) {
10588+
return wc_Microchip_AesGcmDecrypt(
10589+
aes, out, in, sz, iv, ivSz,
10590+
authTag, authTagSz, authIn, authInSz);
10591+
}
1056910592
#endif
1057010593

1057110594
#ifdef STM32_CRYPTO_AES_GCM

0 commit comments

Comments
 (0)