Fixes for STM32H7 hash and crypto.

This commit is contained in:
David Garske
2022-06-09 14:47:19 -07:00
committed by Daniele Lacamera
parent ad3f7e1de2
commit c52c2e5dfb
2 changed files with 49 additions and 11 deletions

View File

@ -156,7 +156,7 @@
(void)dir;
XMEMCPY(dkey, key, 8);
#ifndef WOLFSSL_STM32_CUBEMX
#if !defined(WOLFSSL_STM32_CUBEMX) || defined(STM32_HAL_V2)
ByteReverseWords(dkey, dkey, 8);
#endif
@ -173,7 +173,7 @@
(void)dir;
#ifndef WOLFSSL_STM32_CUBEMX
{
{
word32 *dkey1 = des->key[0];
word32 *dkey2 = des->key[1];
word32 *dkey3 = des->key[2];
@ -187,7 +187,11 @@
ByteReverseWords(dkey3, dkey3, 8);
}
#else
XMEMCPY(des->key[0], key, DES3_KEYLEN); /* CUBEMX wants keys in sequential memory */
/* CUBEMX wants keys in sequential memory */
XMEMCPY(des->key[0], key, DES3_KEYLEN);
#ifdef STM32_HAL_V2
ByteReverseWords((word32*)des->key, (word32*)des->key, DES3_KEYLEN);
#endif
#endif
return wc_Des3_SetIV(des, iv);
@ -216,15 +220,33 @@
hcryp.Instance = CRYP;
hcryp.Init.KeySize = CRYP_KEYSIZE_128B;
hcryp.Init.DataType = CRYP_DATATYPE_8B;
hcryp.Init.pKey = (uint8_t*)des->key;
hcryp.Init.pInitVect = (uint8_t*)des->reg;
hcryp.Init.pKey = (STM_CRYPT_TYPE*)des->key;
hcryp.Init.pInitVect = (STM_CRYPT_TYPE*)des->reg;
#ifdef STM32_HAL_V2
hcryp.Init.DataWidthUnit = CRYP_DATAWIDTHUNIT_BYTE;
ByteReverseWords(des->reg, des->reg, DES_BLOCK_SIZE);
if (mode == DES_CBC)
hcryp.Init.Algorithm = CRYP_DES_CBC;
else
hcryp.Init.Algorithm = CRYP_DES_ECB;
#endif
HAL_CRYP_Init(&hcryp);
#ifdef STM32_HAL_V2
if (dir == DES_ENCRYPTION) {
HAL_CRYP_Encrypt(&hcryp, (uint32_t*)in, sz, (uint32_t*)out,
STM32_HAL_TIMEOUT);
}
else {
HAL_CRYP_Decrypt(&hcryp, (uint32_t*)in, sz, (uint32_t*)out,
STM32_HAL_TIMEOUT);
}
#else
while (sz > 0) {
/* if input and output same will overwrite input iv */
XMEMCPY(des->tmp, in + sz - DES_BLOCK_SIZE, DES_BLOCK_SIZE);
if (mode == DES_CBC) {
if (dir == DES_ENCRYPTION) {
HAL_CRYP_DESCBC_Encrypt(&hcryp, (uint8_t*)in,
@ -253,6 +275,7 @@
in += DES_BLOCK_SIZE;
out += DES_BLOCK_SIZE;
}
#endif /* STM32_HAL_V2 */
HAL_CRYP_DeInit(&hcryp);
#else
@ -359,13 +382,27 @@
hcryp.Instance = CRYP;
hcryp.Init.KeySize = CRYP_KEYSIZE_128B;
hcryp.Init.DataType = CRYP_DATATYPE_8B;
hcryp.Init.pKey = (uint8_t*)des->key;
hcryp.Init.pInitVect = (uint8_t*)des->reg;
hcryp.Init.pKey = (STM_CRYPT_TYPE*)des->key;
hcryp.Init.pInitVect = (STM_CRYPT_TYPE*)des->reg;
#ifdef STM32_HAL_V2
hcryp.Init.DataWidthUnit = CRYP_DATAWIDTHUNIT_BYTE;
ByteReverseWords(des->reg, des->reg, DES_BLOCK_SIZE);
hcryp.Init.Algorithm = CRYP_TDES_CBC;
#endif
HAL_CRYP_Init(&hcryp);
while (sz > 0)
{
#ifdef STM32_HAL_V2
if (dir == DES_ENCRYPTION) {
HAL_CRYP_Encrypt(&hcryp, (uint32_t*)in, sz, (uint32_t*)out,
STM32_HAL_TIMEOUT);
}
else {
HAL_CRYP_Decrypt(&hcryp, (uint32_t*)in, sz, (uint32_t*)out,
STM32_HAL_TIMEOUT);
}
#else
while (sz > 0) {
if (dir == DES_ENCRYPTION) {
HAL_CRYP_TDESCBC_Encrypt(&hcryp, (byte*)in,
DES_BLOCK_SIZE, out, STM32_HAL_TIMEOUT);
@ -382,6 +419,7 @@
in += DES_BLOCK_SIZE;
out += DES_BLOCK_SIZE;
}
#endif /* STM32_HAL_V2 */
HAL_CRYP_DeInit(&hcryp);
}

View File

@ -60,7 +60,7 @@
/* STM32 register size in bytes */
#define STM32_HASH_REG_SIZE 4
#if defined(WOLFSSL_STM32U5)
#if defined(WOLFSSL_STM32U5) || defined(WOLFSSL_STM32H7)
#define STM32_HASH_FIFO_SIZE 16 /* FIFO is 16 deep 32-bits wide */
#else
#define STM32_HASH_FIFO_SIZE 1