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.tpcf.cn/web/32412.html

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

相关文章

Linux常用环境变量

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

C++模板类原理讲解

C模板类原理讲解 C模板是一种强大的编译期工具&#xff0c;它允许我们创建通用的、类型无关的类和函数。模板的主要目的是实现代码的重用和泛型编程。模板类的原理涉及以下几个方面&#xff1a; 模板的定义和实例化模板的类型参数模板特化模板的编译过程模板的优点和缺点 1.…

【人机交互 复习】第2章 Hadoop

一、概念 1.Hadoop 是一个能够对大量数据进行分布式处理的软件框架&#xff0c;并 且是以一种可靠、高效、可伸缩的方式进行处理的&#xff0c; 2.特点&#xff1a; 高可靠性&#xff0c;高效性&#xff0c;高可扩展性&#xff0c;高容错性 运行在Linux平台上&#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;虽然看…

【C/C++】常量定义

常量定义 在C中&#xff0c;#define和constexpr都用于定义常量&#xff0c;但它们之间存在显著的差异。以下是它们之间的主要区别&#xff1a; 类型安全&#xff1a; #define&#xff1a;#define是预处理器指令&#xff0c;它在编译之前对源代码进行文本替换。这意味着#define…

LTE和5G基站规划原则

LTE和5G基站规划原则 以下是一些常见的规划原则&#xff1a; 基站覆盖与容量规划 1. **覆盖需求评估**&#xff1a;确定目标区域需要的覆盖范围&#xff0c;包括地理特性和用户分布情况。 2. **容量需求评估**&#xff1a;估算区域内的用户数量及其数据传输需求&#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;而且几乎没有文档…

语音数据集2-VCTK多人音频

VCTK VCTK全称是Centre for Speech Technology Voice Cloning Toolkit (CSTR’s VCTK Corpus),即语音克隆工具包。 1. 简介 数据是109 位英语母语人士&#xff08;不同口音&#xff09;。每位朗读大约 400 句子 大部分句子都是从《先驱报》(格拉斯哥)选出&#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…

ComfyUI 和 WebUI

概述 ComfyUI&#xff1a;像拼积木一样&#xff0c;你可以用各种“模块”搭建出一个复杂的图像生成“机器”。适合那些喜欢自己动手折腾、希望精确控制每个步骤的人。WebUI&#xff1a;更像是一个智能“图像生成器”&#xff0c;你只需要输入文字描述&#xff0c;它就能生成图…

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

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