openssl3.2 - 官方demo学习 - mac - hmac-sha512.c
文章目录
- openssl3.2 - 官方demo学习 - mac - hmac-sha512.c
- 概述
- 笔记
- END
openssl3.2 - 官方demo学习 - mac - hmac-sha512.c
概述
MAC算法为HMAC, 设置参数(摘要算法为SHA3-512), 用key初始化, 对明文做MAC数据.
笔记
/*!
\file hmac-sha512.c
\note
openssl3.2 - 官方demo学习 - mac - hmac-sha512.c
MAC算法为HMAC, 设置参数(摘要算法为SHA3-512), 用key初始化, 对明文做MAC数据.
*//*-* Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved.** Licensed under the Apache License 2.0 (the "License"). You may not use* this file except in compliance with the License. You can obtain a copy* in the file LICENSE in the source distribution or at* https://www.openssl.org/source/license.html*//** Example of using EVP_MAC_ methods to calculate* a HMAC of static buffers*/#include <string.h>
#include <stdio.h>
#include <openssl/crypto.h>
#include <openssl/core_names.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#include <openssl/hmac.h>
#include <openssl/params.h>#include "my_openSSL_lib.h"/** Hard coding the key into an application is very bad.* It is done here solely for educational purposes.*/
static unsigned char key[] = {0x25, 0xfd, 0x12, 0x99, 0xdf, 0xad, 0x1a, 0x03,0x0a, 0x81, 0x3c, 0x2d, 0xcc, 0x05, 0xd1, 0x5c,0x17, 0x7a, 0x36, 0x73, 0x17, 0xef, 0x41, 0x75,0x71, 0x18, 0xe0, 0x1a, 0xda, 0x99, 0xc3, 0x61,0x38, 0xb5, 0xb1, 0xe0, 0x82, 0x2c, 0x70, 0xa4,0xc0, 0x8e, 0x5e, 0xf9, 0x93, 0x9f, 0xcf, 0xf7,0x32, 0x4d, 0x0c, 0xbd, 0x31, 0x12, 0x0f, 0x9a,0x15, 0xee, 0x82, 0xdb, 0x8d, 0x29, 0x54, 0x14,
};static const unsigned char data[] =
"To be, or not to be, that is the question,\n"
"Whether tis nobler in the minde to suffer\n"
"The ſlings and arrowes of outragious fortune,\n"
"Or to take Armes again in a sea of troubles,\n"
"And by opposing, end them, to die to sleep;\n"
"No more, and by a sleep, to say we end\n"
"The heart-ache, and the thousand natural shocks\n"
"That flesh is heir to? tis a consumation\n"
"Devoutly to be wished. To die to sleep,\n"
"To sleepe, perchance to dreame, Aye, there's the rub,\n"
"For in that sleep of death what dreams may come\n"
"When we haue shuffled off this mortal coil\n"
"Must give us pause. There's the respect\n"
"That makes calamity of so long life:\n"
"For who would bear the Ships and Scorns of time,\n"
"The oppressor's wrong, the proud man's Contumely,\n"
"The pangs of dispised love, the Law's delay,\n"
;/* The known value of the HMAC/SHA3-512 MAC of the above soliloqy */
static const unsigned char expected_output[] = {0x3b, 0x77, 0x5f, 0xf1, 0x4f, 0x9e, 0xb9, 0x23,0x8f, 0xdc, 0xa0, 0x68, 0x15, 0x7b, 0x8a, 0xf1,0x96, 0x23, 0xaa, 0x3c, 0x1f, 0xe9, 0xdc, 0x89,0x11, 0x7d, 0x58, 0x07, 0xe7, 0x96, 0x17, 0xe3,0x44, 0x8b, 0x03, 0x37, 0x91, 0xc0, 0x6e, 0x06,0x7c, 0x54, 0xe4, 0xa4, 0xcc, 0xd5, 0x16, 0xbb,0x5e, 0x4d, 0x64, 0x7d, 0x88, 0x23, 0xc9, 0xb7,0x25, 0xda, 0xbe, 0x4b, 0xe4, 0xd5, 0x34, 0x30,
};/** A property query used for selecting the MAC implementation.*/
static const char* propq = NULL;int main(void)
{int ret = EXIT_FAILURE;OSSL_LIB_CTX* _ossl_lib_ctx = NULL;EVP_MAC* _evp_mac = NULL;EVP_MAC_CTX* _evp_mac_ctx = NULL;EVP_MD_CTX* _evp_md_ctx = NULL;unsigned char* out = NULL;size_t out_len = 0;OSSL_PARAM params[4], * p = params;char digest_name[] = "SHA3-512";_ossl_lib_ctx = OSSL_LIB_CTX_new();if (_ossl_lib_ctx == NULL) {fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");goto end;}/* Fetch the HMAC implementation */_evp_mac = EVP_MAC_fetch(_ossl_lib_ctx, "HMAC", propq);if (_evp_mac == NULL) {fprintf(stderr, "EVP_MAC_fetch() returned NULL\n");goto end;}/* Create a context for the HMAC operation */_evp_mac_ctx = EVP_MAC_CTX_new(_evp_mac);if (_evp_mac_ctx == NULL) {fprintf(stderr, "EVP_MAC_CTX_new() returned NULL\n");goto end;}/* The underlying digest to be used */*p++ = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, digest_name,sizeof(digest_name));*p = OSSL_PARAM_construct_end();/* Initialise the HMAC operation */if (!EVP_MAC_init(_evp_mac_ctx, key, sizeof(key), params)) {fprintf(stderr, "EVP_MAC_init() failed\n");goto end;}/* Make one or more calls to process the data to be authenticated */if (!EVP_MAC_update(_evp_mac_ctx, data, sizeof(data))) {fprintf(stderr, "EVP_MAC_update() failed\n");goto end;}/* Make a call to the final with a NULL buffer to get the length of the MAC */if (!EVP_MAC_final(_evp_mac_ctx, NULL, &out_len, 0)) {fprintf(stderr, "EVP_MAC_final() failed\n");goto end;}out = OPENSSL_malloc(out_len);if (out == NULL) {fprintf(stderr, "malloc failed\n");goto end;}/* Make one call to the final to get the MAC */if (!EVP_MAC_final(_evp_mac_ctx, out, &out_len, out_len)) {fprintf(stderr, "EVP_MAC_final() failed\n");goto end;}printf("Generated MAC:\n");BIO_dump_indent_fp(stdout, out, (int)out_len, 2);putchar('\n');if (out_len != sizeof(expected_output)) {fprintf(stderr, "Generated MAC has an unexpected length\n");goto end;}if (CRYPTO_memcmp(expected_output, out, sizeof(expected_output)) != 0) {fprintf(stderr, "Generated MAC does not match expected value\n");goto end;}ret = EXIT_SUCCESS;
end:if (ret != EXIT_SUCCESS)ERR_print_errors_fp(stderr);/* OpenSSL free functions will ignore NULL arguments */OPENSSL_free(out);EVP_MD_CTX_free(_evp_md_ctx);EVP_MAC_CTX_free(_evp_mac_ctx);EVP_MAC_free(_evp_mac);OSSL_LIB_CTX_free(_ossl_lib_ctx);return ret;
}
END
相关文章:
openssl3.2 - 官方demo学习 - mac - hmac-sha512.c
文章目录 openssl3.2 - 官方demo学习 - mac - hmac-sha512.c概述笔记END openssl3.2 - 官方demo学习 - mac - hmac-sha512.c 概述 MAC算法为HMAC, 设置参数(摘要算法为SHA3-512), 用key初始化, 对明文做MAC数据. 笔记 /*! \file hmac-sha512.c \note openssl3.2 - 官方demo…...
pycharm的使用技巧
1.新建文件时,自动生成代码 settings->editor->file and code templates,选择python script ${NAME} 文件名 ${DATE} 日期 2.自动补齐自定义段落 settings->editor->live templates,在右侧点击+号,添加自定义的内容 完成之后,在下方勾选python 3.修改注释的…...
如何通过内网穿透实现公网访问Portainer管理监控Docker容器
文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风…...
Redis原理篇(Dict的收缩扩容机制和渐进式rehash)
Dict(即字典) Redis是一种键值型数据库,其中键与值的映射关系就是Dict实现的。 Dict通过三部分组成:哈希表(DictHashTable),哈希节点(DictEntry),字典(Dict)…...
Microsoft Remote Desktop for Mac 中文正式版下载 微软远程连接软件
Microsoft Remote Desktop 是一款专为 Mac 用户设计的远程桌面工具,它可以帮助用户通过网络连接到其他计算机,实现远程控制和操作。 软件下载:Microsoft Remote Desktop for Mac 中文正式版下载 该工具支持多种远程连接协议,包括 …...
解读Vue的原型及原型链
在 JavaScript 中,每个对象都有一个关联的原型(prototype)。原型是一个对象,其他对象可以通过原型实现属性和方法的继承。原型链是一种由对象组成的链式结构,它通过原型的引用连接了一系列对象,形成了一种继…...
拓扑排序(优先队列)queue、C++
N个小朋友,编号 1∼N,要排成一队。在安排每个人的顺序时,有 M 个要求,每个要求包含两个整数 a,b,表示小朋友 a 要排在小朋友 b 的前面。 请你找出符合所有要求的排队顺序。 输入格式 第一行包含整数 N,M。接下来 M 行…...
【Spring】SpringBoot 统一功能处理
文章目录 前言1. 拦截器1.1 什么是拦截器1.2 拦截器的使用1.2.1 自定义拦截器1.2.2 注册配置拦截器 1.3 拦截器详解1.3.1 拦截路径1.3.2 拦截器执行流程1.3.3 适配器模式 2. 统一数据返回格式3. 统一异常处理 前言 在日常使用 Spring 框架进行开发的时候,对于一些板…...
拦截器HandlerInterceptor | springmvc系列
拦截器,通俗来来将,就是我们将访问某个路径的请求给拦截下来,然后可以对这个请求做一些操作 基本使用 创建拦截器类 让类实现HandlerInterceptor接口,重写接口中的三个方法。 Component //定义拦截器类,实现Handle…...
【SQL server】DML触发器监控数据库字段值改变
文章目录 前言DML触发器基本思路创建触发器固定字段触发示例完整示例代码变量声明查询新旧值插入数据到日志表效果视频动态字段触发示例完整代码示例触发器基本信息变量声明定义游标打开游标临时表创建循环处理字段...
Docker容器(二)安装与初体验wordpress
一、安装 1.1关闭SeLinux SeLinux(Security-Enhanced Linux)是一种基于Linux内核的安全模块,旨在提供更严格的访问控制和安全策略。它通过强制实施安全策略来限制系统资源的访问,从而保护系统免受恶意软件和未经授权的访问。 在…...
Odrive 学习系列二:将烧录工具从ST-Link V2修改为JLink
一、背景: 通过观察odrive解压后的内容,可以看到在下面配置文件及makefile文件中的配置设置的均为openOCD + stlink v2,例如makefile中: # This is only a stub for various commands. # Tup is used for the actual compilation.BUILD_DIR = build FIRMWARE = $(BUILD_DI…...
ffmpeg api-codec-param-test.c源码讲解
try_decode_video_frame /*** 尝试解码视频帧** param codec_ctx 解码器上下文* param pkt 待解码的视频数据包* param decode 是否解码标志,如果为1,则进行解码,如果为0,则不解码* return 返回0表示成功,否则表示出错…...
Hive学习(14)json解析get_json_object()函数
一、语法 目的:在一个标准JSON字符串中,按照指定方式抽取指定的字符串。 string get_json_object(string <json>, string <path>) 参数说明 json:必填。STRING类型。标准的JSON格式对象,格式为{Key:Value, Key:Val…...
sqlilabs第五十五五十六关
Less-55(GET - challenge - Union- 14 queries allowed -Variation 2) 手工注入 结束 自动注入 想到一个办法能绕过需要用到IP池就可以(但是我没有) Less-56(GET - challenge - Union- 14 queries allowed -Variation 3) 手工注入...
Vue2 实现带输入的动态表格,限制el-input输入位数以及输入规则(负数、小数、整数)
Vue2 实现el-input带输入限制的动态表格,限制输入位数以及输入规则(负数、小数、整数) 在这个 Vue2 项目中,我们实现一个限制输入位数(整数16位,小数10位)以及输入规则(负数、小数、…...
反爬虫策略:使用FastAPI限制接口访问速率
目录 引言 一、网络爬虫的威胁 二、FastAPI 简介 三、反爬虫策略 四、具体实现 五、其他反爬虫策略 六、总结 引言 在当今的数字时代,数据已经成为了一种宝贵的资源。无论是商业决策、科学研究还是日常生活,我们都需要从大量的数据中获取有价值的…...
响应式编程初探-自定义实现Reactive Streams规范
最近在学响应式编程,这里先记录下,响应式编程的一些基础内容 1.名词解释 Reactive Streams、Reactor、WebFlux以及响应式编程之间存在密切的关系,它们共同构成了在Java生态系统中处理异步和响应式编程的一系列工具和框架。 Reactive Streams…...
如何使用LightPicture+cpolar搭建个人云图床随时随地公网访问
文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进,功能也越来越多,而手机…...
华媒舍:高效率的新闻资讯新闻媒体宣发套餐内容推广计划方案
怎样让自己的新闻资讯可以被大众孰知,变成了每一个新闻媒体宣发者一同存在的困难。下面我们就给大家介绍一套高效率的新闻资讯新闻媒体宣发套餐内容推广计划方案,致力于帮助新闻媒体宣发者提升宣发高效率,提高新闻资讯的传播性。 1.新闻媒体宣…...
从零搭建自动化任务中心:mgks/automation-hub部署与实战指南
1. 项目概述:自动化工作流的“中央厨房”如果你和我一样,在开发、运维或者日常工作中,经常需要重复执行一系列命令、脚本或者任务,那么你肯定对“自动化”这个词有着深刻的渴望。从简单的文件备份、日志清理,到复杂的C…...
开源的精神内核:是自由协作,还是商业公司的免费劳动力?
一、溯源:开源精神的三重底色——自由、共享与协作要理解开源的本质,我们必须先回到其精神原点。开源运动自诞生之日起,就携带着自由、共享与协作的基因,这三者共同构成了其精神内核的底色,缺一不可。自由,…...
3步解决JavaScript精度问题:decimal.js高精度计算完整指南
3步解决JavaScript精度问题:decimal.js高精度计算完整指南 【免费下载链接】decimal.js An arbitrary-precision Decimal type for JavaScript 项目地址: https://gitcode.com/gh_mirrors/de/decimal.js 在JavaScript开发中,你是否经常遇到这样的…...
36种阀体混线全自动智能分拣方案|3D视觉+机器人柔性制造实践
一、项目背景与行业痛点在高端流体控制设备制造领域,阀体、阀盖的精密分拣是保障产品质量的核心环节。随着工业设备向小型化、高精度方向发展,客户对阀体组件加工误差的控制要求持续提升,传统生产模式面临显著瓶颈:1. 人工分拣效率…...
EchoType开源键盘固件:基于状态感知的智能输入引擎深度解析
1. 项目概述:从“EchoType”看开源键盘固件的深度定制最近在键盘客制化圈子里,一个名为“EchoType”的项目开始被一些资深玩家频繁提及。它的GitHub仓库地址是ljyou001/echotype,从名字上你就能猜到,这大概率是一个与键盘固件、打…...
AI编程助手集成飞书MCP:零依赖单文件实现工作流自动化
1. 项目概述:连接AI编程助手与飞书工作流 如果你和我一样,每天的工作流都离不开飞书(Lark)——写文档、拉群沟通、排会议日程、更新多维表格,然后在IDE和浏览器之间来回切换,那么你一定会对这个项目感兴趣…...
基于大语言模型的自动化股票研报生成系统设计与实现
1. 项目概述:当ChatGPT遇上股票研报最近几年,AI在金融领域的应用已经从简单的数据查询,进化到了能够进行复杂分析和生成专业报告的程度。我关注到一个挺有意思的项目,叫ddobokki/chatgpt_stock_report。光看这个名字,你…...
OpenClacky:AI Agent技能加密与商业分发平台实战指南
1. 项目概述:从开源共享到知识变现的桥梁在AI Agent(智能体)生态蓬勃发展的今天,我们看到了一个有趣的现象:无数开发者贡献了海量的“技能”(Skills),让像OpenClaw这样的平台功能日益…...
Cadence IC617虚拟机导入后,Calibre DRC报License错误的保姆级修复指南
Cadence IC617虚拟机导入后Calibre DRC报License错误的终极解决方案 当你兴冲冲地打开从同事那里拷贝的Cadence IC617虚拟机镜像,准备开始芯片设计工作时,突然跳出的Calibre DRC license错误提示就像一盆冷水浇下来。这种"拿来即用"的环境本应…...
Python内置模块:io、file、json、csv
一、io StringIO - 文本字符串的缓冲区 from io import StringIO# 创建StringIO对象 sio StringIO() # 空缓冲区 sio StringIO("initial text") # 带初始数据# 常用方法 sio.write("Hello ") # 写入字符串&…...
