当前位置: 首页 > 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. **索引…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...