From fb10c9093550b98743b9dd7acf13c205a74357ff Mon Sep 17 00:00:00 2001 From: David Garske Date: Fri, 10 Jun 2022 08:16:56 -0700 Subject: [PATCH] Fix for Cube HAL v2 back-to-back DES/DES3. Whitespace. Enable the new FIFO 16 block logic for all hardware that supports it. --- wolfcrypt/src/des3.c | 24 ++++++++++++++++++------ wolfssl/wolfcrypt/port/st/stm32.h | 5 ++++- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/wolfcrypt/src/des3.c b/wolfcrypt/src/des3.c index 75c5391ca..917b49f9d 100644 --- a/wolfcrypt/src/des3.c +++ b/wolfcrypt/src/des3.c @@ -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]; @@ -224,7 +224,6 @@ 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 @@ -242,11 +241,14 @@ HAL_CRYP_Decrypt(&hcryp, (uint32_t*)in, sz, (uint32_t*)out, STM32_HAL_TIMEOUT); } + /* save off IV */ + des->reg[0] = hcryp.Instance->IV0LR; + des->reg[1] = hcryp.Instance->IV0RR; #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, @@ -386,7 +388,6 @@ 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 @@ -401,6 +402,9 @@ HAL_CRYP_Decrypt(&hcryp, (uint32_t*)in, sz, (uint32_t*)out, STM32_HAL_TIMEOUT); } + /* save off IV */ + des->reg[0] = hcryp.Instance->IV0LR; + des->reg[1] = hcryp.Instance->IV0RR; #else while (sz > 0) { if (dir == DES_ENCRYPTION) { @@ -1818,8 +1822,12 @@ void wc_Des_SetIV(Des* des, const byte* iv) { - if (des && iv) + if (des && iv) { XMEMCPY(des->reg, iv, DES_BLOCK_SIZE); + #ifdef STM32_HAL_V2 + ByteReverseWords(des->reg, des->reg, DES_BLOCK_SIZE); + #endif + } else if (des) XMEMSET(des->reg, 0, DES_BLOCK_SIZE); } @@ -1829,8 +1837,12 @@ int wc_Des3_SetIV(Des3* des, const byte* iv) if (des == NULL) { return BAD_FUNC_ARG; } - if (iv) + if (iv) { XMEMCPY(des->reg, iv, DES_BLOCK_SIZE); + #ifdef STM32_HAL_V2 + ByteReverseWords(des->reg, des->reg, DES_BLOCK_SIZE); + #endif + } else XMEMSET(des->reg, 0, DES_BLOCK_SIZE); diff --git a/wolfssl/wolfcrypt/port/st/stm32.h b/wolfssl/wolfcrypt/port/st/stm32.h index e8d1e131b..5502a885c 100644 --- a/wolfssl/wolfcrypt/port/st/stm32.h +++ b/wolfssl/wolfcrypt/port/st/stm32.h @@ -60,7 +60,10 @@ /* STM32 register size in bytes */ #define STM32_HASH_REG_SIZE 4 -#if defined(WOLFSSL_STM32U5) || defined(WOLFSSL_STM32H7) +#if defined(WOLFSSL_STM32F4) || defined(WOLFSSL_STM32F7) || \ + defined(WOLFSSL_STM32L4) || defined(WOLFSSL_STM32L5) || \ + defined(WOLFSSL_STM32H7) || defined(WOLFSSL_STM32U5) || \ + defined(WOLFSSL_STM32WB) #define STM32_HASH_FIFO_SIZE 16 /* FIFO is 16 deep 32-bits wide */ #else #define STM32_HASH_FIFO_SIZE 1