- /*****************************************************************************
 
-  * [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);
 
mbedtls 加密并解密耗时789us,STM32硬件加密解密耗时81us,速度足足提高了10倍,相当给力。
需要注意的是,STM32的加密函数传入的数据长度是按字计算,mbedtls数据长度按字节计算,下面附上测试工程。
 SOFTWARE.rar
(8.82 MB, 下载次数: 7)
SOFTWARE.rar
(8.82 MB, 下载次数: 7)