Cryptography STM32F437硬件加密功能与WolfSSL集成
我有一个项目在连接上使用DTLS。目前,我仅使用软件实现成功地在控制器上运行了WolfSSL,但设置初始连接所需的时间令人讨厌,我现在希望在MCU中使用HW加密来加速性能。从WolfSSL提供的STM32F2实现来看,我只看到一些加密算法被重新定位到硬件加密。在我的DTLS实现中,我使用了WolfCrypt提供的许多不同的算法。由于我对SSL库的低级细节缺乏经验,我需要一些帮助来重新定位WolfSSL中几乎所有的加密算法,从软件实现到STM32加密硬件 根据ST的Cube HAL框架,HW Encrytion支持的算法如下Cryptography STM32F437硬件加密功能与WolfSSL集成,cryptography,stm32,hardware-acceleration,wolfssl,Cryptography,Stm32,Hardware Acceleration,Wolfssl,我有一个项目在连接上使用DTLS。目前,我仅使用软件实现成功地在控制器上运行了WolfSSL,但设置初始连接所需的时间令人讨厌,我现在希望在MCU中使用HW加密来加速性能。从WolfSSL提供的STM32F2实现来看,我只看到一些加密算法被重新定位到硬件加密。在我的DTLS实现中,我使用了WolfCrypt提供的许多不同的算法。由于我对SSL库的低级细节缺乏经验,我需要一些帮助来重新定位WolfSSL中几乎所有的加密算法,从软件实现到STM32加密硬件 根据ST的Cube HAL框架,HW En
STM32F437x/439x
– AES: CFB, OFB, XTS, CCM, GCM, CMAC, KeyWrap
Key size: 128, 192, 256 bit Crypto accelerator
– ECC: Key generation, Scalar multiplication, ECDSA Random number
generator (RNG) – RSA encryption/decryption functions with PKCS#1v1.5
因此,我需要帮助更改WolfSSL中的这些算法,以便它们使用STM32 HW Acc。如果有人能够提供此示例,将不胜感激
我也在WolfSSL论坛上问过这个问题。如果我发现有什么有趣的地方,我会在这里为其他人的利益更新
谢谢 您使用的是哪个版本的wolfSSL?wolfSSL最近增加了对CubeMX HAL的支持。如果您没有wolfSSLv3.10.0,请从以下下载页面下载:或从wolfSSL github存储库获取: 在/WOLFSSL/wolfcrypt/settings.h的STM32F2部分中有一个新的定义WOLFSSL_STM32_CUBEMX
#ifdef WOLFSSL_STM32F2
#define SIZEOF_LONG_LONG 8
#define NO_DEV_RANDOM
#define NO_WOLFSSL_DIR
#undef NO_RABBIT
#define NO_RABBIT
#undef NO_64BIT
#define NO_64BIT
#define STM32F2_RNG
#define STM32F2_CRYPTO
#if !defined(__GNUC__) && !defined(__ICCARM__)
#define KEIL_INTRINSICS
#endif
#define NO_OLD_RNGNAME
#ifdef WOLFSSL_STM32_CUBEMX // <--- New section for HAL support in version 3.10.0
#include "stm32f2xx_hal.h"
#ifndef STM32_HAL_TIMEOUT
#define STM32_HAL_TIMEOUT 0xFF
#endif
#else
#include "stm32f2xx.h"
#include "stm32f2xx_cryp.h"
#include "stm32f2xx_hash.h"
#endif /* WOLFSSL_STM32_CUBEMX */
#endif
非常感谢。我将查看库中的CubeMX定义
static int wc_AesEncrypt(Aes* aes, const byte* inBlock, byte* outBlock)
{
int ret = 0;
#ifdef WOLFSSL_STM32_CUBEMX
CRYP_HandleTypeDef hcryp;
/* load key into correct registers */
switch(aes->rounds) {
case 10: /* 128-bit key */
hcryp.Init.KeySize = CRYP_KEYSIZE_128B;
break;
case 12: /* 192-bit key */
hcryp.Init.KeySize = CRYP_KEYSIZE_192B;
break;
case 14: /* 256-bit key */
hcryp.Init.KeySize = CRYP_KEYSIZE_256B;
break;
default:
break;
}
XMEMSET(&hcryp, 0, sizeof(CRYP_HandleTypeDef));
hcryp.Instance = CRYP;
hcryp.Init.DataType = CRYP_DATATYPE_8B;
hcryp.Init.pKey = (uint8_t*)aes->key;
HAL_CRYP_Init(&hcryp);
if (HAL_CRYP_AESECB_Encrypt(&hcryp, (uint8_t*)inBlock, AES_BLOCK_SIZE,
outBlock, STM32_HAL_TIMEOUT) != HAL_OK) {
ret = WC_TIMEOUT_E;
}
HAL_CRYP_DeInit(&hcryp);
#else
... other non-cubemx support implementations below