Skip to content

Commit 43422aa

Browse files
danielinuxtmael
authored andcommitted
[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 543e5ab commit 43422aa

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
@@ -5207,11 +5207,16 @@ static void AesSetKey_C(Aes* aes, const byte* key, word32 keySz, int dir)
52075207
}
52085208
#endif
52095209
#if defined(WOLFSSL_MICROCHIP_TA100) && defined(WOLFSSL_MICROCHIP_AESGCM)
5210-
ret = wc_Microchip_aes_set_key(aes, userKey, keylen, iv, dir);
5211-
if (ret == 0) {
5210+
if (keylen == TA_KEY_TYPE_AES128_SIZE) {
5211+
ret = wc_Microchip_aes_set_key(aes, userKey, keylen, iv, dir);
5212+
if (ret != 0) {
5213+
return ret;
5214+
}
52125215
ret = wc_AesSetIV(aes, iv);
5216+
if (ret != 0) {
5217+
return ret;
5218+
}
52135219
}
5214-
return ret;
52155220
#endif
52165221
XMEMCPY(aes->key, userKey, keylen);
52175222

@@ -10043,11 +10048,20 @@ int wc_AesGcmEncrypt(Aes* aes, byte* out, const byte* in, word32 sz,
1004310048
authIn, authInSz);
1004410049
#endif
1004510050
#if defined(WOLFSSL_MICROCHIP_TA100) && defined(WOLFSSL_MICROCHIP_AESGCM)
10046-
return wc_Microchip_AesGcmEncrypt(
10047-
aes, out, in, sz,
10048-
iv, ivSz,
10049-
authTag, authTagSz,
10050-
authIn, authInSz);
10051+
#ifndef TA_AES_GCM_MAX_DATA_SIZE
10052+
#define TA_AES_GCM_MAX_DATA_SIZE 996u
10053+
#endif
10054+
if (aes != NULL &&
10055+
aes->keylen == TA_KEY_TYPE_AES128_SIZE &&
10056+
ivSz == TA_AES_GCM_IV_LENGTH &&
10057+
authTagSz == TA_AES_GCM_TAG_LENGTH &&
10058+
(authInSz + sz) <= TA_AES_GCM_MAX_DATA_SIZE) {
10059+
return wc_Microchip_AesGcmEncrypt(
10060+
aes, out, in, sz,
10061+
iv, ivSz,
10062+
authTag, authTagSz,
10063+
authIn, authInSz);
10064+
}
1005110065
#endif
1005210066
#ifdef STM32_CRYPTO_AES_GCM
1005310067
return wc_AesGcmEncrypt_STM32(
@@ -10774,9 +10788,18 @@ int wc_AesGcmDecrypt(Aes* aes, byte* out, const byte* in, word32 sz,
1077410788

1077510789
#endif
1077610790
#if defined(WOLFSSL_MICROCHIP_TA100) && defined(WOLFSSL_MICROCHIP_AESGCM)
10777-
return wc_Microchip_AesGcmDecrypt(
10778-
aes, out, in, sz, iv, ivSz,
10779-
authTag, authTagSz, authIn, authInSz);
10791+
#ifndef TA_AES_GCM_MAX_DATA_SIZE
10792+
#define TA_AES_GCM_MAX_DATA_SIZE 996u
10793+
#endif
10794+
if (aes != NULL &&
10795+
aes->keylen == TA_KEY_TYPE_AES128_SIZE &&
10796+
ivSz == TA_AES_GCM_IV_LENGTH &&
10797+
authTagSz == TA_AES_GCM_TAG_LENGTH &&
10798+
(authInSz + sz) <= TA_AES_GCM_MAX_DATA_SIZE) {
10799+
return wc_Microchip_AesGcmDecrypt(
10800+
aes, out, in, sz, iv, ivSz,
10801+
authTag, authTagSz, authIn, authInSz);
10802+
}
1078010803
#endif
1078110804

1078210805
#ifdef STM32_CRYPTO_AES_GCM

0 commit comments

Comments
 (0)