STM32H5]【STM32 Nucleo-64测评】AES加密测试

H533包含一个AES加密外设,可以加速加密应用的执行速度,这两天学习一下该模块用法并进行加密速度测试。
为测试性能,另外使用mbedtls的软件加密作为对比。

该测试使用 AES-ECB模式进行加密解密,KEY长度为128位,测试数据长度512字节。测试代码如下

复制


/*****************************************************************************

 * [url=home.php?mod=space&uid=247401]@brief[/url]   var

 *****************************************************************************/

extern CRYP_HandleTypeDef hcryp;



// 此数组为 key_code_sim 代码二进制值

// 作为固定键值,可以伪装为程序

const uint16_t ase_key_src[] = {

        0xf04f, 0x5000, 0x6801, 0x07ca,

        0xd500, 0xbf00, 0x6841, 0x078a,

        0xd500, 0xbf00, 0x6881, 0x074a,

        0xd500, 0xbf00, 0x68c0, 0x0701,

        0xd500, 0xbf00, 0x4770};



#define dat_buff_init()              \

        loop(1000) src[index] = index;   \

        memset(enc, 0, 1000);            \

        memset(dec, 0, 1000);





/*****************************************************************************

 * @brief   fun

 *****************************************************************************/



/*******************************************************************************

* @brief  des_demo.

* \param[in] none

* \retval: none

*******************************************************************************/

int aes_demo(int argc, char * argv[])

{

        uu32 clk_start;

        uu8 *src, *enc, *dec, *iv;

        mbedtls_aes_context *aes_enc, *aes_dec;

        size_t offset;



        // 内存请求

        src = calloc(1, 1024);

        enc = calloc(1, 1024);

        dec = calloc(1, 1024);

        iv = calloc(1, 80);

        aes_enc = malloc(sizeof(mbedtls_aes_context));

        aes_dec = malloc(sizeof(mbedtls_aes_context));



        dbg_puts("\n===========================================================\n");

        dbg_print("AES 128 encode test: <128 bits> \n");



        // 初始化

        dat_buff_init();



        // 初始化结构

        mbedtls_aes_init(aes_enc);

        mbedtls_aes_init(aes_dec);



        // 生成 KEY

        clk_start = bsp_cpu_clks_get();

        mbedtls_aes_setkey_enc(aes_enc, (void *)ase_key_src, 128);

        mbedtls_aes_setkey_dec(aes_dec, (void *)ase_key_src, 128);

        dbg_print("key make time: %d us\n", bsp_clks_to_us(bsp_cpu_clks_get() - clk_start));



        /*------------------------------------------------------------------------*/

        // 加密 + 解密         ECB                        电子密码本模式

        clk_start = bsp_cpu_clks_get();

        loop(32)

        {

                mbedtls_aes_crypt_ecb(aes_enc, MBEDTLS_AES_ENCRYPT, &src[16*index], &enc[16*index]);

                mbedtls_aes_crypt_ecb(aes_dec, MBEDTLS_AES_DECRYPT, &enc[16*index], &dec[16*index]);

        }

        dbg_print("MBEDTLS: AES ecb : enc + dec time: %d us\n", bsp_clks_to_us(bsp_cpu_clks_get() - clk_start));



        // 显示

        //dbg_u8_print("src: ", src, 16, 20);

        dbg_u8_print("enc: ", enc, 128, 16);

        dbg_u8_print("dec: ", dec, 128, 16);



        // 释放,用于清除内存中的密匙,属于安全性代码

        mbedtls_aes_free(aes_enc);

        mbedtls_aes_free(aes_dec);



        // 硬件加密解密

        dat_buff_init();

        clk_start = bsp_cpu_clks_get();

        HAL_CRYP_Encrypt(&hcryp, (uu32*)&src[0], 512/4, (uu32*)&enc[0], 100000);

        HAL_CRYP_Decrypt(&hcryp, (uu32*)&enc[0], 512/4, (uu32*)&dec[0], 100000);        

        dbg_print("STM32: AES ecb : enc + dec time: %d us\n", bsp_clks_to_us(bsp_cpu_clks_get() - clk_start));

        dbg_u8_print("enc: ", enc, 128, 16);

        dbg_u8_print("dec: ", dec, 128, 16);        

        

        // 释放内存

        free(src);

        free(enc);

        free(dec);

        free(iv);

        free(aes_enc);

        free(aes_dec);

        



        

        return 0;

}

DBG_FUN_EXPORT(aes_demo);

串口输入aes_demo执行测试程序。测试结果如下:
 


mbedtls 加密并解密耗时789us,STM32硬件加密解密耗时81us,速度足足提高了10倍,相当给力。

需要注意的是,STM32的加密函数传入的数据长度是按字计算,mbedtls数据长度按字节计算,下面附上测试工程。
 

 SOFTWARE.rar (8.82 MB)
---------------------
作者:aple0807
链接:https://bbs.21ic.com/icview-3395908-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值