当前位置: 首页 > news >正文

openssl3.2 - exp - class warp for sha3-512

文章目录

    • openssl3.2 - exp - class warp for sha3-512
    • 概述
    • 笔记
    • 调用方代码
    • 子类 - cipher_sha3_512.h
    • 子类 - cipher_sha3_512.cpp
    • 基类 - cipher_md_base.h
    • 基类 - cipher_md_base.cpp
    • 备注
    • END

openssl3.2 - exp - class warp for sha3-512

概述

前面实验整了一个对buffer进行sha3-512算hash的函数。
实际用的时候,要对几个buffer连续做hash. 前面封装的统一做hash的函数不适用。
重新封装了一个类,只要在类的生命周期中,就可以随时对连续的buffer(可能不在一个函数中)做hash的update.

笔记

调用方代码

bool CPeFileCheck::calc_hash_SHA3_512()
{bool b_rc = false;CCipherSha3_512 hash;do {if (!hash.begin()){break;}// 如果buffer不在一个函数中,将hash的指针传给那些函数做hash.updateif (!hash.update(this->m_pu8_map_file, this->m_u32_file_size)){break;}if (!hash.end()){break;}m_digest_length = hash.get_md_len();if (m_digest_length > sizeof(m_ary_digest_value)){break;}memcpy(m_ary_digest_value, hash.get_md(), hash.get_md_len());b_rc = true;} while (false);return b_rc;
}

子类 - cipher_sha3_512.h

//! \file cipher_sha3_512.h#ifndef __CIPHER_SHA3_512_H__
#define __CIPHER_SHA3_512_H__#include "cipher_md_base.h"class CCipherSha3_512 : public CCipherMdBase
{
public:CCipherSha3_512();virtual ~CCipherSha3_512();
};#endif // #ifndef __CIPHER_SHA3_512_H__

子类 - cipher_sha3_512.cpp

//! \file cipher_sha3_512.cpp#include "pch.h"
#include "cipher_sha3_512.h"CCipherSha3_512::CCipherSha3_512()
{setCiphherName("SHA3-512");
}CCipherSha3_512::~CCipherSha3_512()
{
}

基类 - cipher_md_base.h

//! \file cipher_md_base.h#ifndef __CIPHER_MD_BASE_H__
#define __CIPHER_MD_BASE_H__#include <openssl/evp.h>
#include <string>//! \ref https://blog.csdn.net/LostSpeed/article/details/135581192
class CCipherMdBase
{
public:CCipherMdBase();virtual ~CCipherMdBase();bool begin();bool update(uint8_t* pBuf, int lenBuf);bool end();unsigned int get_md_len() { return m_digest_length; }uint8_t* get_md() { return m_p_digest_value; }void setCiphherName(const char* pszNmae) { m_strCipherName = ((NULL != pszNmae) ? pszNmae : ""); }private:void clear();private:std::string m_strCipherName;OSSL_LIB_CTX* m_ossl_lib_ctx;EVP_MD* m_evp_md;EVP_MD_CTX* m_evp_md_ctx;unsigned int m_digest_length;uint8_t* m_p_digest_value;
};#endif // #ifndef __CIPHER_MD_BASE_H__

基类 - cipher_md_base.cpp

//! \file cipher_md_base.cpp#include "pch.h"
#include "cipher_md_base.h"CCipherMdBase::CCipherMdBase(): m_ossl_lib_ctx(NULL),m_evp_md(NULL),m_evp_md_ctx(NULL),m_digest_length(0),m_p_digest_value(NULL)
{}CCipherMdBase::~CCipherMdBase()
{clear();
}void CCipherMdBase::clear()
{if (NULL != m_evp_md_ctx){EVP_MD_CTX_free(m_evp_md_ctx);m_evp_md_ctx = NULL;}m_digest_length = 0;if (NULL != m_p_digest_value){OPENSSL_free(m_p_digest_value);m_p_digest_value = NULL;}if (NULL != m_evp_md){EVP_MD_free(m_evp_md);m_evp_md = NULL;}if (NULL != m_ossl_lib_ctx){OSSL_LIB_CTX_free(m_ossl_lib_ctx);m_ossl_lib_ctx = NULL;}
}bool CCipherMdBase::begin()
{bool b_rc = false;const char* _psz_option_properties = NULL;do {clear();m_ossl_lib_ctx = OSSL_LIB_CTX_new();if (NULL == m_ossl_lib_ctx) {// fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");break;}/** Fetch a message digest by name* The algorithm name is case insensitive.* See providers(7) for details about algorithm fetching*/if (m_strCipherName.empty()){break;}m_evp_md = EVP_MD_fetch(m_ossl_lib_ctx, m_strCipherName.data(), _psz_option_properties);if (NULL == m_evp_md) {// fprintf(stderr, "EVP_MD_fetch could not find SHA3-512.");break;}/** Make a message digest context to hold temporary state* during digest creation*/m_evp_md_ctx = EVP_MD_CTX_new();if (NULL == m_evp_md_ctx) {// fprintf(stderr, "EVP_MD_CTX_new failed.\n");break;}/** Initialize the message digest context to use the fetched* digest provider*/if (EVP_DigestInit(m_evp_md_ctx, m_evp_md) != 1) {// fprintf(stderr, "EVP_DigestInit failed.\n");break;}b_rc = true;} while (false);return b_rc;
}bool CCipherMdBase::update(uint8_t* pBuf, int lenBuf)
{bool b_rc = false;do {if (EVP_DigestUpdate(m_evp_md_ctx, pBuf, lenBuf) != 1) {// fprintf(stderr, "EVP_DigestUpdate(hamlet_1) failed.\n");break;}b_rc = true;} while (false);return b_rc;}bool CCipherMdBase::end()
{bool b_rc = false;int digest_length = 0;do {/* Determine the length of the fetched digest type */m_digest_length = EVP_MD_get_size(m_evp_md);if (m_digest_length <= 0) {// fprintf(stderr, "EVP_MD_get_size returned invalid size.\n");break;}m_p_digest_value = (uint8_t*)OPENSSL_malloc(m_digest_length);if (NULL == m_p_digest_value) {// fprintf(stderr, "No memory.\n");break;}if (EVP_DigestFinal(m_evp_md_ctx, m_p_digest_value, &m_digest_length) != 1) {// fprintf(stderr, "EVP_DigestFinal() failed.\n");break;}b_rc = true;} while (false);return b_rc;
}

备注

这个封装类用的很舒服。
如果要做其他种类的hash, 只需要继承一个子类,给定新的hash算法名称就行。

END

相关文章:

openssl3.2 - exp - class warp for sha3-512

文章目录 openssl3.2 - exp - class warp for sha3-512概述笔记调用方代码子类 - cipher_sha3_512.h子类 - cipher_sha3_512.cpp基类 - cipher_md_base.h基类 - cipher_md_base.cpp备注END openssl3.2 - exp - class warp for sha3-512 概述 前面实验整了一个对buffer进行sha…...

cog predict docker unknown flag: --file

如图&#xff1a; 使用cog predict -i image“link-to-image” 出现docker unknown flag: --file的问题。 解决方法&#xff08;对我可行&#xff09;&#xff1a;切换cog版本。 这个是我一开始的cog安装命令&#xff08;大概是下的最新版&#xff1f;&#xff09;&#xff1…...

SpringMVC接收参数方式讲解

PathVariable 该注解用于接收具有Restful风格的参数&#xff0c;如/api/v1/1001&#xff0c;最终userId的值为1001。 如下代码中&#xff0c;使用name属性可以指定GetMapping中的id名称与之对应&#xff0c;从而可以自定义参数名称userId&#xff0c;而不是使用默认名称id G…...

JavaScript 中arguments 对象详细解析与案例

在JavaScript中&#xff0c;每个函数都有一个内部对象arguments&#xff0c;它包含了函数调用时传递的所有参数。arguments对象类似一个数组&#xff0c;但是它并不是真正的数组&#xff0c;它没有数组的方法&#xff0c;只有length属性和索引访问元素的能力。 以下是对argume…...

消除 BEV 空间中的跨模态冲突,实现 LiDAR 相机 3D 目标检测

Eliminating Cross-modal Conflicts in BEV Space for LiDAR-Camera 3D Object Detection 消除 BEV 空间中的跨模态冲突&#xff0c;实现 LiDAR 相机 3D 目标检测 摘要Introduction本文方法Single-Modal BEV Feature ExtractionSemantic-guided Flow-based AlignmentDissolved…...

【免安装的MATLAB--MATLAB online】

目录&#xff1a; 前言账号的注册图片处理的示例准备图片脚本函数 总结 前言 在计算机、数学等相关专业中&#xff0c;或多或少都会与MATLAB产生藕断丝连的联系&#xff0c;如果你需要使用MATLAB&#xff0c;但是又不想要安装到自己的电脑上&#xff08;它实在是太大了啊&#…...

Flyway 数据库版本管理

一、Flyway简介 Flyway是一款开源的数据库迁移工具&#xff0c;可以管理和版本化数据库架构。通过Flyway&#xff0c;可以跟踪数据库的变化&#xff0c;并将这些变化作为版本控制的一部分。Flyway支持SQL和NoSQL数据库&#xff0c;并且可以与现有的开发流程无缝集成&#xff0…...

lua学习笔记19(面相对象学习的一点总结)

print("*****************************面相对象总结*******************************") object{} --实例化方法 function object:new()local obj{}self.__indexselfsetmetatable(obj,self)return obj end-------------------------如何new一个对象 function object:…...

视觉SLAM学习打卡【10】-后端·滑动窗口法位姿图

本节是对上一节BA的进一步简化&#xff0c;旨在提高优化实时性.难点在于位姿图部分的雅可比矩阵求解&#xff08;涉及李代数扰动模型求导&#xff09;&#xff0c;书中的相关推导存在跳步&#xff08;可能数学功底强的人认为过渡的理所当然&#xff09;&#xff0c;笔者参考了知…...

【动态规划 区间dp 位运算】100259. 划分数组得到最小的值之和

本文涉及知识点 动态规划 区间dp 位运算 LeetCode100259. 划分数组得到最小的值之和 给你两个数组 nums 和 andValues&#xff0c;长度分别为 n 和 m。 数组的 值 等于该数组的 最后一个 元素。 你需要将 nums 划分为 m 个 不相交的连续 子数组&#xff0c;对于第 ith 个子数…...

CSS核心样式-02-盒模型属性及扩展应用

目录 三、盒模型属性 常见盒模型区域 盒模型图 盒模型五大属性 1. 宽度 width 2. 高度 height 3. 内边距 padding 四值法 三值法 二值法 单值法 案例 4. 边框 border 按照属性值的类型划分为三个单一属性 ①线宽 border-width ②线型 border-style ③边框颜色 bo…...

在 Google Cloud 上轻松部署开放大语言模型

今天&#xff0c;“在 Google Cloud 上部署”功能正式上线&#xff01; 这是 Hugging Face Hub 上的一个新功能&#xff0c;让开发者可以轻松地将数千个基础模型使用 Vertex AI 或 Google Kubernetes Engine (GKE) 部署到 Google Cloud。 Model Garden (模型库) 是 Google Clou…...

005Node.js模块URL的使用

引入 URL 模块 要使用 URL 模块&#xff0c;首先需要在代码中引入它。可以使用以下代码将 URL 模块导入到你的脚本中&#xff1a; const url require(url);实例代码 const urlrequire(url); var apihttp://www.baidu.com?nameshixiaobin&age20; console.log(url.parse(…...

美团笔试复盘

昨天做了美团的笔试&#xff0c;现在复盘一下。 1、将数组按照绝对值大小排序 有道算法题解决思路需要将数组按照绝对值大小进行排序&#xff0c;我使用的是sort方法Comparator比较器实现的&#xff0c;这里记录一下&#xff1a; public static void main(String[] args) {In…...

IntelliJ IDEA - Since Maven 3.8.1 http repositories are blocked

问题描述 新下载的 IDEA 在构建项目时&#xff0c;在下载引用的包时出现 “Since Maven 3.8.1 http repositories are blocked” 的问题。 原因分析 从 Maven 3.8.1 开始&#xff0c;不再支持 http 的包了。由于现在对网络安全的日益重视&#xff0c;都在向 https 转变&#…...

Django的APP应用更名(重命名)流程

将Django中的一个现有APP更名是一个需要谨慎操作的过程&#xff0c;因为它涉及到多个文件和配置的更新。下面是详细的步骤和一些补充细节&#xff0c;帮助你更顺利地完成APP重命名&#xff1a; 1. 修改APP名称及相关引用 更改APP目录名称&#xff1a; 首先&#xff0c;重命名…...

ChatGLM3-6B大语言模型离线执行

ChatGLM3-6B大语言模型离线执行 模型准备 一般而言&#xff0c;模型和模型参数可以通过如下三个模型源进行相应的下载&#xff1a; HuggingFace | ModelScope | WiseModel 本实例中&#xff0c;使用的是HuggingFace的源下载&#xff0c;相应的地址如下&#xff1a; HuggingFa…...

了解大语言模型的参数高效微调(Parameter-Effcient Fine-Tuning)

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 大语言模型在众多应用领域实现了突破性的进步&#xff0c;显著提升了各种任务的完成度。然而&#xff0c;其庞大的规模也带来了高昂的计算成本。这些模型往往包含数十亿甚至上千亿参数&#xff0c;需要…...

2024.4.14力扣每日一题——设计哈希集合

2024.4.14 题目来源我的题解方法一 链表数组 题目来源 力扣每日一题&#xff1b;题序&#xff1a;705 我的题解 方法一 链表数组 由于给定限制次数为10000&#xff0c;所以构造一个长度为10001的链表数组。对于add操作先看数组对应的位置是否为null或者为空&#xff0c;若是…...

SQL explain 显示子查询A类型为ALL怎么优化

当 SQL EXPLAIN 显示子查询 A 的类型为 ALL 时&#xff0c;这意味着数据库系统正在执行全表扫描&#xff0c;而不是使用索引来执行子查询。全表扫描可能会导致性能下降&#xff0c;特别是在大型表上。 为了优化这种情况&#xff0c;您可以考虑以下几点&#xff1a; 1. **索引…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...