SHA256 安全散列算法加速器实验

1、SHA256 介绍

SHA256 加速器是用来计算 SHA-256 的计算单元, SHA256 SHA-2 下细分出的一种算法。
SHA-2 名称来自于安全散列算法 2 (英语: Secure Hash Algorithm 2 )的缩写,一种密码散列函
数算法标准,由美国国家安全局研发,由美国国家标准与技术研究院( NIST )在 2001 年发布。
属于 SHA 算法之一,是 SHA-1 的后继者。其下又可再分为六个不同的算法标准,包括了:
SHA-224 SHA-256 SHA-384 SHA-512 SHA-512/224 SHA-512/256 。这些变体除了生成摘要的长度、循环运行的次数等一些细微差异之外,基本结构是一致的。
简单来说,对于任何长度的消息, SHA256 都会产生一个 256bit 长的哈希值
Kendryte K210 内置 SHA256 (安全散列算法加速器)功能包括:
1. 支持 SHA-256 的计算
2. 支持输入数据的 DMA 传输
Kendryte K210 官方 SDK 提供了 3 个操作 PWM 的函数,这些函数介绍如下:
sha256_init 函数:
该函数主要用于初始化 SHA256 加速器外设,该函数原型及参数描述如下所示:
void sha256_init(sha256_context_t *context, size_t input_len);
typedef struct _sha256_context
{size_t total_len;size_t buffer_len;union{uint32_t words[16];uint8_t bytes[64];} buffer;
} sha256_context_t;
sha256_update 函数:
该函数用于传入一个数据块参与 SHA256 Hash 计算,如下代码所示:
void sha256_update(sha256_context_t *context, const void *input, size_t
input_len);
该函数有三个参数,第一个参数为输入 SHA256 上下文对象,第二个参数为待加入计算的
SHA256 计算的数据块,第三个参数为对应数据块的长度。
sha256_final 函数:
该函数用于结束对数据的 SHA256 Hash 计算,如下代码所示:
void sha256_final(sha256_context_t *context, uint8_t *output);
函数共有两个参数,第一个参数为输入 SHA256 上下文对象,第二个参数为存放 SHA256 计算的结果的 buffer ,需保证传入这个 buffer 的大小为 32Bytes 以上。
sha256_hard_calculate 函数:
该函数用于一次性对连续的数据计算它的 SHA256 Hash ,如下代码所示:
void sha256_hard_calculate(const uint8_t *input, size_t input_len, uint8_t
*output);
该函数有三个参数,第一、第二参数用于输入待 SHA256 计算的数据和数据的长度,第三
个参数为存放 SHA256 计算的结果的 buffer ,需保证传入这个 buffer 的大小为 32Bytes 以上。

2、源码案例

main.c 如下所示:
uint8_t hash[SHA256_HASH_LEN];
uint8_t compare1[] = {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41,
0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10,
0xff, 0x61, 0xf2, 0x00, 0x15, 0xad};
uint8_t compare2[] = {0x58, 0xbe, 0xb6, 0xbb, 0x9b, 0x80, 0xb2, 0x12, 0xc3, 0xdb,
0xc1, 0xc1, 0x02, 0x0c, 0x69, 0x6f,0xbf, 0xa3, 0xaa, 0xd8, 0xe8, 0xa4, 0xef, 0x4d, 0x38, 0x5e,
0x9b, 0x07, 0x32, 0xfc, 0x5d, 0x98};
uint8_t compare3[] = {0x6e, 0x65, 0xda, 0xd1, 0x7a, 0xa2, 0x3e, 0x72, 0x79, 0x8d,
0x50, 0x33, 0xa1, 0xae, 0xe5, 0x9e,0xe3, 0x35, 0x2d, 0x3c, 0x49, 0x6c, 0x18, 0xfb, 0x71, 0xe3,
0xa5, 0x37, 0x22, 0x11, 0xfc, 0x6c};
uint8_t compare4[] = {0xcd, 0xc7, 0x6e, 0x5c, 0x99, 0x14, 0xfb, 0x92, 0x81, 0xa1,
0xc7, 0xe2, 0x84, 0xd7, 0x3e, 0x67,0xf1, 0x80, 0x9a, 0x48, 0xa4, 0x97, 0x20, 0x0e, 0x04, 0x6d,
0x39, 0xcc, 0xc7, 0x11, 0x2c, 0xd0};
uint8_t data_buf[1000*1000];
int main(void)
{uint64_t cycle;uint8_t total_check_tag = 0;uint32_t i;printf("\n");cycle = read_cycle();sha256_hard_calculate((uint8_t *)"abc", 3, hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare1[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");sha256_hard_calculate((uint8_t
*)"abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij", 60, hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare2[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");sha256_hard_calculate((uint8_t
*)"abcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabcdefgha", 65, hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare3[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");memset(data_buf, 'a', sizeof(data_buf));sha256_hard_calculate(data_buf, sizeof(data_buf), hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare4[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");sha256_context_t context;sha256_init(&context, sizeof(data_buf));sha256_update(&context, data_buf, 1111);sha256_update(&context, data_buf + 1111, sizeof(data_buf) - 1111);sha256_final(&context, hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare4[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");cycle = read_cycle() - cycle;if (total_check_tag == 1)printf("\nSHA256_TEST _TEST_FAIL_\n");elseprintf("\nSHA256_TEST _TEST_PASS_\n");printf("\nsha256 test time = %ld ms\n",
cycle/(sysctl_clock_get_freq(SYSCTL_CLOCK_CPU)/1000));while(1);return 0;
}
        可以看到,mian 函数首先计算‘ abc ’的哈希值,并将计算的值通过串口打印输出,接着
计算字符串“ abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij ”的哈希值,然后同样
将计算的值打印出来,然后计算字符串“ abcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabc
defghabcdefgha ”的哈希值并打印输出,接着计算多个字符‘ a ’和分块计算多个字符‘ a ’的哈
希值,然后通过串口打印输出。
        至此,该函数总共输出 5 个不同的消息经过 SHA256 算法计算后得到的、各为 32 字节长度
的哈希值。

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

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

相关文章

Python-日志模块

目录 一、日志级别 二、日志配置 1、日志基本配置 2、日志配置字典&#xff08;知道咋么改就可以&#xff09; 3、日志的使用 一、日志级别 import logginglogging.debug(调试日志) logging.info(消息日志) logging.warning(警告日志) logging.error(错误日志) logging.cr…

Linux驱动开发笔记(十三)Sysfs文件系统

文章目录 前言一、Sysfs1.1 Sysfs的引入1.2 Sysfs的目录结构1.2 Sysfs的目录详解1.2.1 devices1.2.2 bus1.2.3 class1.2.4 devices、bus、class目录之间的关系1.2.5 其他子目录 二、Sysfs使用2.1 核心数据结构2.2 相关函数2.2.1 kobject_create_and_add2.2.2 kobject_put()2.2.…

大模型自然语言生成自动驾驶可编辑仿真场景(其一 共十篇)

第一篇&#xff1a;LLM greater scene summarize 第二篇&#xff1a;LLM simulation Test effect 第三篇&#xff1a;LLM simulation driving scenario flow work 第四篇&#xff1a;LLM Algorithm flow description 第五篇&#xff1a;Configure the environment and back…

一键转换PDL至HTML,轻松驾驭文档格式,高效办公新纪元从此开启!

在信息爆炸的时代&#xff0c;文档格式繁多&#xff0c;如何高效处理这些文档成为了每个职场人士关注的焦点。现在&#xff0c;我们为您带来一款革命性的工具——一键转换PDL至HTML&#xff0c;让您轻松驾驭文档格式&#xff0c;开启高效办公新纪元&#xff01; 首先&#xff0…

Electron快速入门(三):在(二)的基础上修改了一个文件夹做了个备忘录

Lingering Memories 诗绪萦怀 修改index.html <!--index.html--> <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --><meta http…

opencv-python(十一)

图像加法 import numpy as np import cv2 img cv2.imread(jk.jpg) res cv2.add(img, img) cv2.imshow(Mypicture1,img) cv2.imshow(MyPicture2,res)cv2.waitKey(0) cv2.destroyAllWindows() res cv2.add(src1, src2, dstNone, maskNone, dtypeNone) src1&#xff1a;第一幅…

作为一名程序员,怎么才能写出简洁实用还漂亮的代码楼呢?这25个超惊艳的Python代码写法,你一定要学会!

前言 Python可以用于复杂的数据分析和Web开发项目&#xff0c;还能以极少的代码行数完成令人惊叹的任务。本文将分享25个简短的Python代码示例&#xff0c;用来展示Python编程语言的魅力和效率。 1.列表推导式 Python的列表推导式提供了一种优雅的方法来创建列表。 # 将一个…

以太坊==MetaMask获取测试币最新网址

估算分数https://community.infura.io/t/unable-to-receive-sepolia-eth-from-faucet/7715 Gitcoin Passport 水龙头地址&#xff0c;填入自己的测试地址 水龙头项目地址 GitHub - pk910/PoWFaucet: Modularized faucet for EVM chains with different protection methods (…

2023年JCR影响因子正式发布,点击查看能源与燃料领域期刊变化【持续更新02】

2024年6月20日&#xff0c;科睿唯安发布了2024年度《期刊引证报告》(Journal Citation Reports&#xff0c;JCR)&#xff0c;报告覆盖全面的高质量期刊资源&#xff0c;提供了丰富的数据、指标和分析。今年JCR的最大变化为&#xff1a;把属于不同数据库&#xff0c;但属于同一学…

储能电池竞争出海分析

锂电池的激烈竞争进一步蔓延到储能行业。为保市场份额和现金流稳定&#xff0c;不少储能电池企业都开始大幅度降低报价只求中标储能项目。 随着6月的储能电芯的最高限价和系统报价都已经贴近成本价&#xff0c;一二三线的储能电池厂商将要如何应对&#xff1f; 1、储能规模快速…

Centos Stream9 和Centos Stream10的下载网址

Index of /https://mirror.stream.centos.org/

“迷你剧场新体验:探索短剧小程序系统的魅力!“

在移动互联网的时代背景下&#xff0c;短视频和短剧已经成为人们娱乐消费的新宠。短剧小程序系统&#xff0c;以其独特的互动形式、便捷的观看体验和丰富的内容生态&#xff0c;为迷你剧场带来了全新的体验。接下来将探讨这个系统的魅力所在&#xff0c;以及它如何改变着人们的…

二维码美化,修改二维码颜色样式,添加logo,文字描述

在如今的社会&#xff0c;二维码已成为我们日常生活中不可或缺的一部分&#xff0c;无论是支付、访问网站、社交媒体互动&#xff0c;还是分享信息&#xff0c;二维码都扮演着重要角色。然而&#xff0c;标准的黑白二维码有时可能显得过于单调&#xff0c;缺乏吸引力。为了提升…

EasyRecovery数据恢复软件2024免费版下载

EasyRecovery数据恢复软件&#xff0c;是我在电脑使用过程中遇到的神器&#xff01;它不仅功能强大&#xff0c;操作简便&#xff0c;还帮我找回了丢失的重要文件。今天&#xff0c;我就来给大家分享一下我的使用体验和心得。 让我来介绍一下EasyRecovery的功能。这款软件可以恢…

你只是重新发现了一些东西

指北君关于另外一条思维路径的发现。 "自以为是"的顿悟时刻 有很多时候&#xff0c;我会"自以为是"的发现/发明一些东西。这种"自以为是"的时刻通常还带有一些骄傲自豪的情绪。这种感觉特别像古希腊博学家阿基米德 在苦思冥想如何测量不规则物体…

数据库管理-第210期 HaloDB-Oracle兼容性测试02(20240622)

数据库管理209期 2024-06-22 数据库管理-第210期 HaloDB-Oracle兼容性测试02&#xff08;20240622&#xff09;1 表增加列2 约束3 自增列4 虚拟列5 表注释6 truncat表总结 数据库管理-第210期 HaloDB-Oracle兼容性测试02&#xff08;20240622&#xff09; 作者&#xff1a;胖头…

一种简单的图像分析

简介 一种简单的边界分析&#xff0c;通过相邻的像素的灰度进行判断&#xff0c;计算出边界。 测试1 原图 结果 测试2 原图 结果 代码说明 主要的技术在makeTable过程中&#xff0c;这个过程主要执行了以下几步 计算每个像素的灰度计算相邻多个像素的最大灰度差统计灰度差…

每日一题——冒泡排序

C语言——冒泡排序 冒泡排序练习 前言&#xff1a;CSDN的小伙伴们&#xff0c;大家好&#xff01;今天我来给大家分享一种解题思想——冒泡排序。 冒泡排序 冒泡法的核心思想&#xff1a;两两相邻的元素进行比较 2.冒泡排序的算法描述如下。 (1)比较相邻的元素。如果第一 个比…

展讯-源码编译

1.硬件要求 编译主机要求&#xff0c;注意尽量不要使用虚拟机 CPU&#xff1a;Intel(R) Core(TM) i7-4790 CPU 3.60 GHz 内存&#xff1a;8G 硬盘&#xff1a;500G SSD Ubuntu 版本&#xff1a;Ubuntu 64-bit 14.04.5 LTS 这是最低版本要求&#xff0c;实际性能越高越好 2…

【机器学习 复习】 第1章 概述

一、概念 1.机器学习是一种通过先验信息来提升模型能力的方式。 即从数据中产生“模型”( model )的算法&#xff0c;然后对新的数据集进行预测。 2.数据集&#xff08;Dataset&#xff09;&#xff1a;所有数据的集合称为数据集。 训练集&#xff1a;用来训练出一个适合模…