AES 高级加密加速器实验

1、AES介绍

Kendryte K210 内置 AES(高级加密加速器),相对于软件可以极⼤的提高 AES 运算速度。 AES 加速器支持多种加密/解密模式(ECB,CBC,GCM),多种⻓度的 KEY(ECB,CBC,GCM)的运算。

AES 加速器是用来加密和解密的模块,具体性能如下:
1. 支持 ECB CBC GCM 三种加密方式
2. 支持 128 位, 192 位, 256 位三种长度的 KEY
3. KEY 可以通过软件配置,受到硬件电路保护
4. 支持 DMA 传输
        Kendryte K210 提供了非常多操作 AES API 函数,我们这里就不一一详细讲解,大家可
以自行参考官方库文件 aes.c aes.h ,本章以 AES256 实验为例,以表格的形式讲述部分用到的
函数,这些函数介绍如下:
上表介绍了 AES256 操作所用到的所有 API 函数。

2、源码案例

计算并打印输出 AES ECB 模式、 CBC 模式和 GCM 模式对数据加密处理的时间(包软件和硬件的对比时间,CPU DMA 使用的是硬件的 AES
main.c代码:
int main(void)
{aes_cipher_mode_t cipher;printf("begin test %d\n", get_time_flag);for (cipher = AES_ECB; cipher < AES_CIPHER_MAX; cipher++){printf("[%s] test all byte ... \n", cipher_name[cipher]);if (AES_CHECK_FAIL == aes_check_all_byte(cipher)){printf("aes %s check_all_byte fail\n", cipher_name[cipher]);return -1;}printf("[%s] test all key ... \n", cipher_name[cipher]);if (AES_CHECK_FAIL == aes_check_all_key(cipher)){        printf("aes %s check_all_key fail\n", cipher_name[cipher]);return -1;}printf("[%s] test all iv ... \n", cipher_name[cipher]);if (AES_CHECK_FAIL == aes_check_all_iv(cipher)){printf("aes %s check_all_iv fail\n", cipher_name[cipher]);return -1;}printf("[%s] [%ld bytes] cpu time = %ld us, dma time = %ld us, soft time = %ld us\n", cipher_name[cipher],    AES_TEST_DATA_LEN,cycle[cipher][AES_HARD][AES_CPU]/(sysctl_clock_get_freq(SYSCTL_CLOCK_CPU)/1000000),cycle[cipher][AES_HARD][AES_DMA]/(sysctl_clock_get_freq(SYSCTL_CLOCK_CPU)/1000000),cycle[cipher][AES_SOFT][AES_CPU]/(sysctl_clock_get_freq(SYSCTL_CLOCK_CPU)/1000000));}printf("aes-256 test pass\n");
while (1)
;return 0;
}
可 以 看 到 , mian 函 数 主 要 的 功 能 是 通过一个 for 循 环 , 把 AES 的 三 种 模 式
ECB/CBC/GCM )对应的时间打印出来。
check_result_t aes_check_all_byte(aes_cipher_mode_t cipher)
{uint32_t check_tag = 0;uint32_t index = 0;size_t data_len = 0;memset(aes_hard_in_data, 0, AES_TEST_PADDING_LEN);if (cipher == AES_GCM)iv_len = iv_gcm_len;for (index = 0; index < (AES_TEST_DATA_LEN < 256 ? AES_TEST_DATA_LEN : 256);index++){aes_hard_in_data[index] = index;data_len++;AES_DBG("[%s] test num: %ld \n", cipher_name[cipher], data_len);aes_hard_in_data, data_len) == AES_CHECK_FAIL)check_tag = 1;}memset(aes_hard_in_data, 0, AES_TEST_PADDING_LEN);get_time_flag = 1;data_len = AES_TEST_DATA_LEN;AES_DBG("[%s] test num: %ld \n", cipher_name[cipher], data_len);for (index = 0; index < data_len; index++)aes_hard_in_data[index] = index % 256;if (aes_check(aes_key, key_len, aes_iv, iv_len, aes_aad, aad_len, cipher,aes_hard_in_data, data_len) == AES_CHECK_FAIL)check_tag = 1;get_time_flag = 0;if(check_tag)return AES_CHECK_FAIL;elsereturn AES_CHECK_PASS;
}
AES 检测所有 byte
check_result_t aes_check_all_key(aes_cipher_mode_t cipher)
{size_t data_len = 0;uint32_t index = 0;uint32_t i = 0;uint32_t check_tag = 0;memset(aes_hard_in_data, 0, AES_TEST_PADDING_LEN);if (cipher == AES_GCM)iv_len = iv_gcm_len;data_len = AES_TEST_DATA_LEN;for (index = 0; index < data_len; index++)aes_hard_in_data[index] = index;for (i = 0; i < (256 / key_len); i++){for (index = i * key_len; index < (i * key_len) + key_len; index++)aes_key[index - (i * key_len)] = index;if (aes_check(aes_key, key_len, aes_iv, iv_len, aes_aad, aad_len, cipher,aes_hard_in_data, data_len) == AES_CHECK_FAIL)check_tag = 1;}if(check_tag)return AES_CHECK_FAIL;elsereturn AES_CHECK_PASS;
}
AES 检测所有 key
check_result_t aes_check_all_iv(aes_cipher_mode_t cipher)
{size_t data_len = 0;uint32_t index = 0;uint32_t i = 0;uint8_t check_tag = 0;memset(aes_hard_in_data, 0, AES_TEST_PADDING_LEN);if (cipher == AES_GCM)iv_len = iv_gcm_len;data_len = AES_TEST_DATA_LEN;for (index = 0; index < data_len; index++)aes_hard_in_data[index] = index;for (i = 0; i < (256 / iv_len); i++){for (index = i * iv_len; index < (i * iv_len) + iv_len; index++)aes_iv[index - (i * iv_len)] = index;if (aes_check(aes_key, key_len, aes_iv, iv_len, aes_aad, aad_len, cipher,aes_hard_in_data, data_len) == AES_CHECK_FAIL)check_tag = 1;}if(check_tag)return AES_CHECK_FAIL;elsereturn AES_CHECK_PASS;
}

可以观察如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/32412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux常用环境变量

Linux常用环境变量 一、常用的默认的shell环境变量二、环境变量 PATH三、持久化修改环境变量四、常用的环境变量 一、常用的默认的shell环境变量 1、当我们在shell命令行属于一个命令&#xff0c;shell解释器去解释这个命令的时候&#xff0c;需要先找到这个命令. 找到命令有两…

鸿蒙 HarmonyOS NEXT星河版APP应用开发—上篇

一、鸿蒙开发环境搭建 DevEco Studio安装 下载 访问官网&#xff1a;https://developer.huawei.com/consumer/cn/deveco-studio/选择操作系统版本后并注册登录华为账号既可下载安装包 安装 建议&#xff1a;软件和依赖安装目录不要使用中文字符软件安装包下载完成后&#xff0…

【Linux 基础】文件与目录管理

1. 文件和目录的基本概念 文件&#xff1a;是数据的集合&#xff0c;可以是文本、图像、视频等。 目录&#xff08;也称为文件夹&#xff09;&#xff1a;是文件和子目录的集合&#xff0c;用于组织文件。 2. 目录和路径 绝对路径&#xff1a;从根目录&#xff08;/&#x…

2021-03-29:加密与解密

前段时间导师分配的任务主要是看《加密与解密》这本书&#xff0c;“书本写的很详细&#xff0c;认真看会看懂的&#xff01;” 是的啊&#xff0c;书本写的很详细&#xff0c;可是作为一个没基础的小白看起来还是挺吃力的&#xff0c;概念一个接一个的出现&#xff0c;虽然看…

Android应用--简、美音乐播放器添加电话监听

3. 控制音量 4. 获取专辑图片 5. 在线下载歌词 6. 在线搜索音乐 7. 在线下载音乐 8. 实现有趣功能–甩歌 9. 界面美化–实现专辑倒影 10.实现左右界面切换 11.实现在通知栏显示播放状态 12.实现音乐播放的桌面小控件 暂时想到这些功能&#xff0c;如果朋友们有什么建…

Day7 —— 大数据技术之Hive

Hive快速入门系列 Hive的概述什么是Hive&#xff1f;使用Hive的原因 Hive架构Hive安装Hive配置文件修改启动Hive以命令行方式启动&#xff08;在$HIVE_HOME/bin目录下&#xff09;以JDBC连接启动&#xff08;beeline方式连接&#xff09; Hive基本操作Hive数据库操作Hive表操作…

css 动画

transform的3D动画 3D形变函数会创建一个合成层来启用GPU硬件加速 translate transform: translateY(100px);transform: translateX(100px);transform: translateZ(100px);transform: translate3d(100px,100px,100px); // x,y,z的简写rotate deg弧度 transform: rotateX(-40…

C语言学习记录20240622

这次需要用 C 语言库 Allegro 写爆破彗星游戏。项目有一些描述如需要绘制飞船、彗星、子弹&#xff0c;需要响应按键实现飞船加速、减速、转向、开火&#xff0c;需要绘制弹道&#xff0c;需要实现彗星旋转、缩放&#xff0c;需要碰撞检测&#xff0c;需要显示计分。 这些用 w…

Redis—SortedSet数据类型及其常用命令详解

文章目录 一、Redis概述SortedSet类型1 ZADD&#xff1a;向有序集合添加成员2 ZREM&#xff1a;从有序集合中移除一个或多个成员3 ZSCORE : 获取sorted set中的指定元素的score值4 ZRANK&#xff1a;获取sorted set 中的指定元素的排名5 ZCARD&#xff1a;获取sorted set中的元…

赵丽颖纯白茉莉绽放温柔之美

赵丽颖纯白茉莉&#xff0c;绽放温柔之美在这个繁忙喧嚣的娱乐圈&#xff0c;赵丽颖以其独特的魅力&#xff0c;成为了无数人心中的白月光。近日&#xff0c;赵丽颖工作室发布了一组live图&#xff0c;她身着一袭温柔白裙&#xff0c;宛如一朵盛开的纯白茉莉花&#xff0c;美得…

kali linux安装中文输入法

kali linux安装中文输入法&#xff1a;先进入root权限 第1步&#xff1a;安装fctix sudo apt-get install fcitx第2步&#xff1a;安装fcitx-pinyin输入法 apt-get install fcitx-pinyin第3步&#xff1a;配置输入法 打开 Fcitx配置 应用&#xff0c;点击 &#xff0c;去除勾…

音视频的Buffer处理

最近在做安卓下UVC的一个案子。正好之前搞过ST方案的开机广告&#xff0c;这个也是我少数最后没搞成功的项目。当时也有点客观原因&#xff0c;当时ST要退出机顶盒市场&#xff0c;所以一切的支持都停了&#xff0c;当时啃他家播放器几十万行的代码&#xff0c;而且几乎没有文档…

RIP动态路由配置

1、搭建网络 搭建拓扑、规划IP地址、划分网段、设置端口 2、配置交换机&#xff0c;路由器 三层交换机配置 Switch>enable Switch#conf t Enter configuration commands, one per line. End with CNTL/Z. Switch(config)#hostname S3560S3560(config)#vlan 10 S3560(con…

【Excel经验】字符串处理方法

概览-公式汇总 序号公式功能公式公式示例公式说明1把多列内容拼接在一起&#xff0c;作为新的一列的内容CONCATENATE (text1,text2,…)CONCATENATE(A2,“#”,B2,“”,C2)用于根据多个列的内容拼成我们指定格式的内容&#xff0c;拼接的内容通常来源于原始数据&#xff0c;同时…

深度学习论文: Depth Anything V2

深度学习论文: Depth Anything V2 Depth Anything V2 PDF: https://arxiv.org/pdf/2406.09414v1 代码:https://depth-anything-v2.github.io/ PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.com/shanglianlm0525/PyTorch-Networks …

51单片机定时器中断配置

测试环境 单片机型号&#xff1a;STC8G1K08-38I-TSSOP20&#xff0c;其他型号请自行测试&#xff1b; IDE&#xff1a;Keil C51&#xff1b; 定时器配置及主要代码 以定时器T0为例&#xff0c;查看手册&#xff0c;有4种工作模式&#xff1a;模式0&#xff08;16位自动重装载…

MSPM0G3507——GPIO例程讲解1——input_capture

函数&#xff1a; 参数&#xff1a; 返回值&#xff1a; 主函数代码&#xff1a; #include "ti_msp_dl_config.h"extern volatile uint32_t interruptVectors[];int main(void) {SYSCFG_DL_init(); //把所有的LED灯和按键初始化了一…

LangChain:如何高效管理 LLM 聊天历史记录?

LangChain 团队发布了一篇关于使用 Dragonfly DB 来有效管理 LangChain 应用程序聊天历史记录的教程。 该教程旨在解决用户在使用 LangChain 应用程序时普遍遇到的一个问题&#xff1a;如何高效地管理聊天历史记录。 LangChain 团队在推文中强调了 Dragonfly DB 在管理聊天历…

【vue3|第12期】Vue3的Props详解:组件通信

日期&#xff1a;2024年6月19日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

【Redis】黑马点评短信登录

https://blog.csdn.net/qq_33888850/article/details/129770077 https://blog.csdn.net/weixin_51515308/article/details/128010464 https://www.bilibili.com/video/BV1cr4y1671t?p24 导入数据库 https://github.com/MagicToDo/hm-dianping sql文件在 hm-dianping-init\src…