diff --git a/wolfcrypt/src/aes.c b/wolfcrypt/src/aes.c index 7815efa32..d4b2b80d8 100644 --- a/wolfcrypt/src/aes.c +++ b/wolfcrypt/src/aes.c @@ -417,6 +417,7 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits CRYP_Cmd(DISABLE); #endif /* WOLFSSL_STM32_CUBEMX */ wolfSSL_CryptHwMutexUnLock(); + wc_Stm32_Aes_Cleanup(); return ret; } @@ -520,6 +521,7 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits CRYP_Cmd(DISABLE); #endif /* WOLFSSL_STM32_CUBEMX */ wolfSSL_CryptHwMutexUnLock(); + wc_Stm32_Aes_Cleanup(); return ret; } @@ -3562,6 +3564,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv) HAL_CRYP_DeInit(&hcryp); wolfSSL_CryptHwMutexUnLock(); + wc_Stm32_Aes_Cleanup(); return ret; } @@ -3624,6 +3627,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv) HAL_CRYP_DeInit(&hcryp); wolfSSL_CryptHwMutexUnLock(); + wc_Stm32_Aes_Cleanup(); return ret; } @@ -3708,6 +3712,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv) /* disable crypto processor */ CRYP_Cmd(DISABLE); wolfSSL_CryptHwMutexUnLock(); + wc_Stm32_Aes_Cleanup(); return ret; } @@ -3802,6 +3807,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv) /* disable crypto processor */ CRYP_Cmd(DISABLE); wolfSSL_CryptHwMutexUnLock(); + wc_Stm32_Aes_Cleanup(); return ret; } @@ -4562,6 +4568,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv) #endif /* WOLFSSL_STM32_CUBEMX */ wolfSSL_CryptHwMutexUnLock(); + wc_Stm32_Aes_Cleanup(); return ret; } @@ -6708,6 +6715,7 @@ static WARN_UNUSED_RESULT int wc_AesGcmEncrypt_STM32( ret = AES_GCM_AUTH_E; #endif /* WOLFSSL_STM32_CUBEMX */ wolfSSL_CryptHwMutexUnLock(); + wc_Stm32_Aes_Cleanup(); if (ret == 0) { /* return authTag */ @@ -7242,6 +7250,7 @@ static WARN_UNUSED_RESULT int wc_AesGcmDecrypt_STM32( XMEMCPY(tag, partialBlock, authTagSz); #endif /* WOLFSSL_STM32_CUBEMX */ wolfSSL_CryptHwMutexUnLock(); + wc_Stm32_Aes_Cleanup(); /* Check authentication tag */ if (ConstantCompare((const byte*)tagExpected, (byte*)tag, authTagSz) != 0) { diff --git a/wolfcrypt/src/port/st/stm32.c b/wolfcrypt/src/port/st/stm32.c index 34e732ae3..49ef3beed 100644 --- a/wolfcrypt/src/port/st/stm32.c +++ b/wolfcrypt/src/port/st/stm32.c @@ -394,6 +394,10 @@ int wc_Stm32_Aes_Init(Aes* aes, CRYP_HandleTypeDef* hcryp) { int ret; word32 keySize; +#ifdef STM32_HW_CLOCK_AUTO + /* enable the peripheral clock */ + __HAL_RCC_CRYP_CLK_ENABLE(); +#endif ret = wc_AesGetKeySize(aes, &keySize); if (ret != 0) @@ -428,6 +432,13 @@ int wc_Stm32_Aes_Init(Aes* aes, CRYP_HandleTypeDef* hcryp) return 0; } +void wc_Stm32_Aes_Cleanup(void) +{ +#ifdef STM32_HW_CLOCK_AUTO + /* disable the peripheral clock */ + __HAL_RCC_CRYP_CLK_DISABLE(); +#endif +} #else /* Standard Peripheral Library */ int wc_Stm32_Aes_Init(Aes* aes, CRYP_InitTypeDef* cryptInit, @@ -486,6 +497,10 @@ int wc_Stm32_Aes_Init(Aes* aes, CRYP_InitTypeDef* cryptInit, return 0; } + +void wc_Stm32_Aes_Cleanup(void) +{ +} #endif /* WOLFSSL_STM32_CUBEMX */ #endif /* !NO_AES */ #endif /* STM32_CRYPTO */ diff --git a/wolfssl/wolfcrypt/port/st/stm32.h b/wolfssl/wolfcrypt/port/st/stm32.h index 1bcb7749f..f272ba92c 100644 --- a/wolfssl/wolfcrypt/port/st/stm32.h +++ b/wolfssl/wolfcrypt/port/st/stm32.h @@ -168,9 +168,11 @@ int wc_Stm32_Hash_Final(STM32_HASH_Context* stmCtx, word32 algo, struct Aes; #ifdef WOLFSSL_STM32_CUBEMX int wc_Stm32_Aes_Init(struct Aes* aes, CRYP_HandleTypeDef* hcryp); + void wc_Stm32_Aes_Cleanup(void); #else /* Standard Peripheral Library */ int wc_Stm32_Aes_Init(struct Aes* aes, CRYP_InitTypeDef* cryptInit, CRYP_KeyInitTypeDef* keyInit); + void wc_Stm32_Aes_Cleanup(void); #endif /* WOLFSSL_STM32_CUBEMX */ #endif /* !NO_AES */