gpt4 book ai didi

cryptography - STM32F437 硬件加密功能与 WolfSSL 的集成

转载 作者:行者123 更新时间:2023-12-04 04:08:51 26 4
gpt4 key购买 nike

我有一个项目使用 DTLS 过连接。目前我已成功运行 WolfSSL 在仅使用软件实现的 Controller 上,但设置初始连接所需的时间令人憎恶,我现在希望在 MCU 中利用硬件加密来提高性能。来自 STM32F2 WolfSSL 提供的实现,我只看到一些加密算法被重定向到硬件加密。在我的 DTLS 实现中,我使用了 WolfCrypt 提供的多种不同的算法。由于我对 SSL 库的非常低级的细节缺乏经验,因此我需要一些帮助来将 WolfSSL 中存在的几乎所有加密算法从软件实现重新定位到 STM32 加密硬件。

根据 ST 的 Cube HAL 框架,HW Encrytion 支持的算法有

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,请从这里的下载页面下载:https://wolfssl.com/wolfSSL/download/downloadForm.php或从 wolfSSL github 存储库获取:https://github.com/wolfSSL/wolfssl.git

在/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

此定义添加了对将 AES、DES3 和 RANDOM 操作卸载到硬件的支持。如果您希望移植其他算法,请使用/wolfcrypt/src/aes.c 中被 WOLFSSL_STM32_CUBEMX 定义包围的部分作为引用。这是在函数 wc_AesEncrypt 中添加 HAL API 的简短示例。源代码来自 https://github.com/wolfSSL/wolfssl/blob/master/wolfcrypt/src/aes.c#L208 :
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

关于cryptography - STM32F437 硬件加密功能与 WolfSSL 的集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41871031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com