首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM32F437硬件密码功能与WolfSSL的集成

STM32F437硬件密码功能与WolfSSL的集成
EN

Stack Overflow用户
提问于 2017-01-26 10:06:46
回答 1查看 1.7K关注 0票数 4

我有一个通过连接使用DTLS的项目。目前,我只使用软件实现就成功地在控制器上运行了WolfSSL,但是设置初始连接所需的时间令人厌恶,我现在希望利用MCU中的HW密码来提高性能。从STM32F2由WolfSSL提供的实现中,我只看到一些密码算法被重定向到硬件密码。在我的DTLS实现中,我使用了许多由WolfCrypt提供的不同的标志。由于我对SSL库的非常低级别的细节非常缺乏经验,我需要一些帮助来重定向WolfSSL中几乎所有的加密算法,从软件实现到STM32 Crypto硬件。

根据ST的Cube HAL框架,HW Encrytion支持的algos是

代码语言:javascript
复制
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论坛上问过这个问题。如果我发现有什么有趣的地方,我会更新这里为其他人的利益谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-26 19:42:18

您使用的是哪个版本的wolfSSL?wolfSSL最近增加了对CubeMX HAL的支持。如果您没有wolfSSLv3.10.0,请从以下下载页面下载:https://wolfssl.com/wolfSSL/download/downloadForm.php或从wolfSSL github存储库:https://github.com/wolfSSL/wolfssl.git下载

在/wolfssl/wolfcrypt/setings.h的STM32F2部分中有一个新的STM32F2定义。

代码语言:javascript
复制
#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和随机操作的支持。如果您希望移植其他算法,请使用/wolfcrypt/src/erc.c中被WOLFSSL_STM32_CUBEMX定义包围的部分作为引用。下面是在函数wc_AesEncrypt中添加HAL的一个简短示例。从https://github.com/wolfSSL/wolfssl/blob/master/wolfcrypt/src/aes.c#L208中提取源代码

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41871031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档