forked from wolfSSL/wolfssl
Fixes for newer STM CubeMX HAL for STM32F7.
This commit is contained in:
@@ -311,12 +311,17 @@
|
|||||||
hcryp.Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
|
hcryp.Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
|
||||||
hcryp.Init.ChainingMode = CRYP_CHAINMODE_AES_ECB;
|
hcryp.Init.ChainingMode = CRYP_CHAINMODE_AES_ECB;
|
||||||
hcryp.Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
|
hcryp.Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
|
||||||
|
#elif defined(STM32_HAL_V2)
|
||||||
|
hcryp.Init.Algorithm = CRYP_AES_ECB;
|
||||||
#endif
|
#endif
|
||||||
HAL_CRYP_Init(&hcryp);
|
HAL_CRYP_Init(&hcryp);
|
||||||
|
|
||||||
#ifdef STM32_CRYPTO_AES_ONLY
|
#ifdef STM32_CRYPTO_AES_ONLY
|
||||||
ret = HAL_CRYPEx_AES(&hcryp, (uint8_t*)inBlock, AES_BLOCK_SIZE,
|
ret = HAL_CRYPEx_AES(&hcryp, (uint8_t*)inBlock, AES_BLOCK_SIZE,
|
||||||
outBlock, STM32_HAL_TIMEOUT);
|
outBlock, STM32_HAL_TIMEOUT);
|
||||||
|
#elif defined(STM32_HAL_V2)
|
||||||
|
ret = HAL_CRYP_Encrypt(&hcryp, (uint32_t*)inBlock, AES_BLOCK_SIZE,
|
||||||
|
(uint32_t*)outBlock, STM32_HAL_TIMEOUT);
|
||||||
#else
|
#else
|
||||||
ret = HAL_CRYP_AESECB_Encrypt(&hcryp, (uint8_t*)inBlock, AES_BLOCK_SIZE,
|
ret = HAL_CRYP_AESECB_Encrypt(&hcryp, (uint8_t*)inBlock, AES_BLOCK_SIZE,
|
||||||
outBlock, STM32_HAL_TIMEOUT);
|
outBlock, STM32_HAL_TIMEOUT);
|
||||||
@@ -389,12 +394,17 @@
|
|||||||
hcryp.Init.OperatingMode = CRYP_ALGOMODE_DECRYPT;
|
hcryp.Init.OperatingMode = CRYP_ALGOMODE_DECRYPT;
|
||||||
hcryp.Init.ChainingMode = CRYP_CHAINMODE_AES_ECB;
|
hcryp.Init.ChainingMode = CRYP_CHAINMODE_AES_ECB;
|
||||||
hcryp.Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
|
hcryp.Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
|
||||||
|
#elif defined(STM32_HAL_V2)
|
||||||
|
hcryp.Init.Algorithm = CRYP_AES_ECB;
|
||||||
#endif
|
#endif
|
||||||
HAL_CRYP_Init(&hcryp);
|
HAL_CRYP_Init(&hcryp);
|
||||||
|
|
||||||
#ifdef STM32_CRYPTO_AES_ONLY
|
#ifdef STM32_CRYPTO_AES_ONLY
|
||||||
ret = HAL_CRYPEx_AES(&hcryp, (uint8_t*)inBlock, AES_BLOCK_SIZE,
|
ret = HAL_CRYPEx_AES(&hcryp, (uint8_t*)inBlock, AES_BLOCK_SIZE,
|
||||||
outBlock, STM32_HAL_TIMEOUT);
|
outBlock, STM32_HAL_TIMEOUT);
|
||||||
|
#elif defined(STM32_HAL_V2)
|
||||||
|
ret = HAL_CRYP_Decrypt(&hcryp, (uint32_t*)inBlock, AES_BLOCK_SIZE,
|
||||||
|
(uint32_t*)outBlock, STM32_HAL_TIMEOUT);
|
||||||
#else
|
#else
|
||||||
ret = HAL_CRYP_AESECB_Decrypt(&hcryp, (uint8_t*)inBlock, AES_BLOCK_SIZE,
|
ret = HAL_CRYP_AESECB_Decrypt(&hcryp, (uint8_t*)inBlock, AES_BLOCK_SIZE,
|
||||||
outBlock, STM32_HAL_TIMEOUT);
|
outBlock, STM32_HAL_TIMEOUT);
|
||||||
@@ -2455,14 +2465,19 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
|
|||||||
hcryp.Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
|
hcryp.Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
|
||||||
hcryp.Init.ChainingMode = CRYP_CHAINMODE_AES_CBC;
|
hcryp.Init.ChainingMode = CRYP_CHAINMODE_AES_CBC;
|
||||||
hcryp.Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
|
hcryp.Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
|
||||||
|
#elif defined(STM32_HAL_V2)
|
||||||
|
hcryp.Init.Algorithm = CRYP_AES_CBC;
|
||||||
#endif
|
#endif
|
||||||
hcryp.Init.pInitVect = (uint8_t*)aes->reg;
|
hcryp.Init.pInitVect = (STM_CRYPT_TYPE*)aes->reg;
|
||||||
HAL_CRYP_Init(&hcryp);
|
HAL_CRYP_Init(&hcryp);
|
||||||
|
|
||||||
while (blocks--) {
|
while (blocks--) {
|
||||||
#ifdef STM32_CRYPTO_AES_ONLY
|
#ifdef STM32_CRYPTO_AES_ONLY
|
||||||
ret = HAL_CRYPEx_AES(&hcryp, (uint8_t*)in, AES_BLOCK_SIZE,
|
ret = HAL_CRYPEx_AES(&hcryp, (uint8_t*)in, AES_BLOCK_SIZE,
|
||||||
out, STM32_HAL_TIMEOUT);
|
out, STM32_HAL_TIMEOUT);
|
||||||
|
#elif defined(STM32_HAL_V2)
|
||||||
|
ret = HAL_CRYP_Encrypt(&hcryp, (uint32_t*)in, AES_BLOCK_SIZE,
|
||||||
|
(uint32_t*)out, STM32_HAL_TIMEOUT);
|
||||||
#else
|
#else
|
||||||
ret = HAL_CRYP_AESCBC_Encrypt(&hcryp, (uint8_t*)in, AES_BLOCK_SIZE,
|
ret = HAL_CRYP_AESCBC_Encrypt(&hcryp, (uint8_t*)in, AES_BLOCK_SIZE,
|
||||||
out, STM32_HAL_TIMEOUT);
|
out, STM32_HAL_TIMEOUT);
|
||||||
@@ -2502,15 +2517,20 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
|
|||||||
hcryp.Init.OperatingMode = CRYP_ALGOMODE_KEYDERIVATION_DECRYPT;
|
hcryp.Init.OperatingMode = CRYP_ALGOMODE_KEYDERIVATION_DECRYPT;
|
||||||
hcryp.Init.ChainingMode = CRYP_CHAINMODE_AES_CBC;
|
hcryp.Init.ChainingMode = CRYP_CHAINMODE_AES_CBC;
|
||||||
hcryp.Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
|
hcryp.Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
|
||||||
|
#elif defined(STM32_HAL_V2)
|
||||||
|
hcryp.Init.Algorithm = CRYP_AES_CBC;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
hcryp.Init.pInitVect = (uint8_t*)aes->reg;
|
hcryp.Init.pInitVect = (STM_CRYPT_TYPE*)aes->reg;
|
||||||
HAL_CRYP_Init(&hcryp);
|
HAL_CRYP_Init(&hcryp);
|
||||||
|
|
||||||
while (blocks--) {
|
while (blocks--) {
|
||||||
#ifdef STM32_CRYPTO_AES_ONLY
|
#ifdef STM32_CRYPTO_AES_ONLY
|
||||||
ret = HAL_CRYPEx_AES(&hcryp, (uint8_t*)in, AES_BLOCK_SIZE,
|
ret = HAL_CRYPEx_AES(&hcryp, (uint8_t*)in, AES_BLOCK_SIZE,
|
||||||
out, STM32_HAL_TIMEOUT);
|
out, STM32_HAL_TIMEOUT);
|
||||||
|
#elif defined(STM32_HAL_V2)
|
||||||
|
ret = HAL_CRYP_Decrypt(&hcryp, (uint32_t*)in, AES_BLOCK_SIZE,
|
||||||
|
(uint32_t*)out, STM32_HAL_TIMEOUT);
|
||||||
#else
|
#else
|
||||||
ret = HAL_CRYP_AESCBC_Decrypt(&hcryp, (uint8_t*)in, AES_BLOCK_SIZE,
|
ret = HAL_CRYP_AESCBC_Decrypt(&hcryp, (uint8_t*)in, AES_BLOCK_SIZE,
|
||||||
out, STM32_HAL_TIMEOUT);
|
out, STM32_HAL_TIMEOUT);
|
||||||
@@ -3201,13 +3221,18 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
|
|||||||
hcryp.Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
|
hcryp.Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
|
||||||
hcryp.Init.ChainingMode = CRYP_CHAINMODE_AES_CTR;
|
hcryp.Init.ChainingMode = CRYP_CHAINMODE_AES_CTR;
|
||||||
hcryp.Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
|
hcryp.Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
|
||||||
|
#elif defined(STM32_HAL_V2)
|
||||||
|
hcryp.Init.Algorithm = CRYP_AES_CTR;
|
||||||
#endif
|
#endif
|
||||||
hcryp.Init.pInitVect = (uint8_t*)aes->reg;
|
hcryp.Init.pInitVect = (STM_CRYPT_TYPE*)aes->reg;
|
||||||
HAL_CRYP_Init(&hcryp);
|
HAL_CRYP_Init(&hcryp);
|
||||||
|
|
||||||
#ifdef STM32_CRYPTO_AES_ONLY
|
#ifdef STM32_CRYPTO_AES_ONLY
|
||||||
ret = HAL_CRYPEx_AES(&hcryp, (byte*)in, AES_BLOCK_SIZE,
|
ret = HAL_CRYPEx_AES(&hcryp, (byte*)in, AES_BLOCK_SIZE,
|
||||||
out, STM32_HAL_TIMEOUT);
|
out, STM32_HAL_TIMEOUT);
|
||||||
|
#elif defined(STM32_HAL_V2)
|
||||||
|
ret = HAL_CRYP_Encrypt(&hcryp, (uint32_t*)in, AES_BLOCK_SIZE,
|
||||||
|
(uint32_t*)out, STM32_HAL_TIMEOUT);
|
||||||
#else
|
#else
|
||||||
ret = HAL_CRYP_AESCTR_Encrypt(&hcryp, (byte*)in, AES_BLOCK_SIZE,
|
ret = HAL_CRYP_AESCTR_Encrypt(&hcryp, (byte*)in, AES_BLOCK_SIZE,
|
||||||
out, STM32_HAL_TIMEOUT);
|
out, STM32_HAL_TIMEOUT);
|
||||||
@@ -5370,8 +5395,8 @@ static int wc_AesGcmEncrypt_STM32(Aes* aes, byte* out, const byte* in, word32 sz
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WOLFSSL_STM32_CUBEMX
|
#ifdef WOLFSSL_STM32_CUBEMX
|
||||||
hcryp.Init.pInitVect = (uint8_t*)ctr;
|
hcryp.Init.pInitVect = (STM_CRYPT_TYPE*)ctr;
|
||||||
hcryp.Init.Header = authInPadded;
|
hcryp.Init.Header = (STM_CRYPT_TYPE*)authInPadded;
|
||||||
hcryp.Init.HeaderSize = authInSz;
|
hcryp.Init.HeaderSize = authInSz;
|
||||||
|
|
||||||
#ifdef STM32_CRYPTO_AES_ONLY
|
#ifdef STM32_CRYPTO_AES_ONLY
|
||||||
@@ -5409,6 +5434,26 @@ static int wc_AesGcmEncrypt_STM32(Aes* aes, byte* out, const byte* in, word32 sz
|
|||||||
hcryp.Init.GCMCMACPhase = CRYP_FINAL_PHASE;
|
hcryp.Init.GCMCMACPhase = CRYP_FINAL_PHASE;
|
||||||
status = HAL_CRYPEx_AES_Auth(&hcryp, NULL, sz, tag, STM32_HAL_TIMEOUT);
|
status = HAL_CRYPEx_AES_Auth(&hcryp, NULL, sz, tag, STM32_HAL_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
#elif defined(STM32_HAL_V2)
|
||||||
|
hcryp.Init.Algorithm = CRYP_AES_GCM;
|
||||||
|
HAL_CRYP_Init(&hcryp);
|
||||||
|
if (blocks) {
|
||||||
|
/* GCM payload phase - blocks */
|
||||||
|
status = HAL_CRYP_Encrypt(&hcryp, (uint32_t*)in, (blocks * AES_BLOCK_SIZE),
|
||||||
|
(uint32_t*)out, STM32_HAL_TIMEOUT);
|
||||||
|
}
|
||||||
|
if (status == HAL_OK && partial != 0) {
|
||||||
|
/* GCM payload phase - partial remainder */
|
||||||
|
XMEMSET(partialBlock, 0, sizeof(partialBlock));
|
||||||
|
XMEMCPY(partialBlock, in + (blocks * AES_BLOCK_SIZE), partial);
|
||||||
|
status = HAL_CRYP_Encrypt(&hcryp, (uint32_t*)partialBlock, partial, (uint32_t*)partialBlock,
|
||||||
|
STM32_HAL_TIMEOUT);
|
||||||
|
XMEMCPY(out + (blocks * AES_BLOCK_SIZE), partialBlock, partial);
|
||||||
|
}
|
||||||
|
if (status == HAL_OK) {
|
||||||
|
/* Compute the authTag */
|
||||||
|
status = HAL_CRYPEx_AESGCM_GenerateAuthTAG(&hcryp, (uint32_t*)tag, STM32_HAL_TIMEOUT);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
HAL_CRYP_Init(&hcryp);
|
HAL_CRYP_Init(&hcryp);
|
||||||
if (blocks) {
|
if (blocks) {
|
||||||
@@ -5769,8 +5814,8 @@ static int wc_AesGcmDecrypt_STM32(Aes* aes, byte* out,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WOLFSSL_STM32_CUBEMX
|
#ifdef WOLFSSL_STM32_CUBEMX
|
||||||
hcryp.Init.pInitVect = (uint8_t*)ctr;
|
hcryp.Init.pInitVect = (STM_CRYPT_TYPE*)ctr;
|
||||||
hcryp.Init.Header = authInPadded;
|
hcryp.Init.Header = (STM_CRYPT_TYPE*)authInPadded;
|
||||||
hcryp.Init.HeaderSize = authInSz;
|
hcryp.Init.HeaderSize = authInSz;
|
||||||
|
|
||||||
#ifdef STM32_CRYPTO_AES_ONLY
|
#ifdef STM32_CRYPTO_AES_ONLY
|
||||||
@@ -5808,6 +5853,26 @@ static int wc_AesGcmDecrypt_STM32(Aes* aes, byte* out,
|
|||||||
hcryp.Init.GCMCMACPhase = CRYP_FINAL_PHASE;
|
hcryp.Init.GCMCMACPhase = CRYP_FINAL_PHASE;
|
||||||
status = HAL_CRYPEx_AES_Auth(&hcryp, NULL, sz, tag, STM32_HAL_TIMEOUT);
|
status = HAL_CRYPEx_AES_Auth(&hcryp, NULL, sz, tag, STM32_HAL_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
#elif defined(STM32_HAL_V2)
|
||||||
|
hcryp.Init.Algorithm = CRYP_AES_GCM;
|
||||||
|
HAL_CRYP_Init(&hcryp);
|
||||||
|
if (blocks) {
|
||||||
|
/* GCM payload phase - blocks */
|
||||||
|
status = HAL_CRYP_Encrypt(&hcryp, (uint32_t*)in, (blocks * AES_BLOCK_SIZE),
|
||||||
|
(uint32_t*)out, STM32_HAL_TIMEOUT);
|
||||||
|
}
|
||||||
|
if (status == HAL_OK && partial != 0) {
|
||||||
|
/* GCM payload phase - partial remainder */
|
||||||
|
XMEMSET(partialBlock, 0, sizeof(partialBlock));
|
||||||
|
XMEMCPY(partialBlock, in + (blocks * AES_BLOCK_SIZE), partial);
|
||||||
|
status = HAL_CRYP_Decrypt(&hcryp, (uint32_t*)partialBlock, partial, (uint32_t*)partialBlock,
|
||||||
|
STM32_HAL_TIMEOUT);
|
||||||
|
XMEMCPY(out + (blocks * AES_BLOCK_SIZE), partialBlock, partial);
|
||||||
|
}
|
||||||
|
if (status == HAL_OK) {
|
||||||
|
/* Compute the authTag */
|
||||||
|
status = HAL_CRYPEx_AESGCM_GenerateAuthTAG(&hcryp, (uint32_t*)tag, STM32_HAL_TIMEOUT);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
HAL_CRYP_Init(&hcryp);
|
HAL_CRYP_Init(&hcryp);
|
||||||
if (blocks) {
|
if (blocks) {
|
||||||
|
@@ -292,7 +292,7 @@ int wc_Stm32_Aes_Init(Aes* aes, CRYP_HandleTypeDef* hcryp)
|
|||||||
}
|
}
|
||||||
hcryp->Instance = CRYP;
|
hcryp->Instance = CRYP;
|
||||||
hcryp->Init.DataType = CRYP_DATATYPE_8B;
|
hcryp->Init.DataType = CRYP_DATATYPE_8B;
|
||||||
hcryp->Init.pKey = (uint8_t*)aes->key;
|
hcryp->Init.pKey = (STM_CRYPT_TYPE*)aes->key;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -98,6 +98,19 @@ int wc_Stm32_Hash_Final(STM32_HASH_Context* stmCtx, word32 algo,
|
|||||||
#define CRYP AES
|
#define CRYP AES
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Detect newer CubeMX crypto HAL (HAL_CRYP_Encrypt / HAL_CRYP_Decrypt) */
|
||||||
|
#if !defined(STM32_HAL_V2) && \
|
||||||
|
defined(WOLFSSL_STM32F7) && defined(CRYP_AES_GCM)
|
||||||
|
#define STM32_HAL_V2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Thee datatype for STM32 CubeMX HAL Crypt calls */
|
||||||
|
#ifdef STM32_HAL_V2
|
||||||
|
#define STM_CRYPT_TYPE uint32_t
|
||||||
|
#else
|
||||||
|
#define STM_CRYPT_TYPE uint8_t
|
||||||
|
#endif
|
||||||
|
|
||||||
/* CRYPT_AES_GCM starts the IV with 2 */
|
/* CRYPT_AES_GCM starts the IV with 2 */
|
||||||
#define STM32_GCM_IV_START 2
|
#define STM32_GCM_IV_START 2
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user