openssl3.2 - 官方demo学习 - kdf - argon2.c

文章目录

    • openssl3.2 - 官方demo学习 - kdf - argon2.c
    • 概述
    • 笔记
    • END

openssl3.2 - 官方demo学习 - kdf - argon2.c

概述

设置KDF算法的参数, 并获得key

笔记

/*!
\file argon2.c
\note openssl3.2 - 官方demo学习 - kdf - argon2.c
设置KDF算法的参数, 并获得key
*//** Copyright 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*/#include <stdio.h>
#include <openssl/core_names.h>
#include <openssl/crypto.h>
#include <openssl/kdf.h>
#include <openssl/params.h>
#include <openssl/thread.h>#include "my_openSSL_lib.h"/** Example showing how to use Argon2 KDF.* See man EVP_KDF-ARGON2 for more information.** test vector from* https://datatracker.ietf.org/doc/html/rfc9106*//** Hard coding a password into an application is very bad.* It is done here solely for educational purposes.*/
static unsigned char password[] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01
};/** The salt is better not being hard coded too.  Each password should have a* different salt if possible.  The salt is not considered secret information* and is safe to store with an encrypted password.*/
static unsigned char salt[] = {0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02
};/** Optional secret for KDF*/
static unsigned char secret[] = {0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
};/** Optional additional data*/
static unsigned char ad[] = {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,0x04, 0x04, 0x04, 0x04
};/** Argon2 cost parameters*/
static uint32_t memory_cost    = 32;
static uint32_t iteration_cost =  3;
static uint32_t parallel_cost  =  4;static const unsigned char expected_output[] = {0x0d, 0x64, 0x0d, 0xf5, 0x8d, 0x78, 0x76, 0x6c,0x08, 0xc0, 0x37, 0xa3, 0x4a, 0x8b, 0x53, 0xc9,0xd0, 0x1e, 0xf0, 0x45, 0x2d, 0x75, 0xb6, 0x5e,0xb5, 0x25, 0x20, 0xe9, 0x6b, 0x01, 0xe6, 0x59
};int main(int argc, char **argv)
{int rv = EXIT_FAILURE;EVP_KDF *_evp_kdf = NULL;EVP_KDF_CTX *_evp_kdf_ctx = NULL;unsigned char out[32];OSSL_PARAM _ossl_param_ary[9], *p_ossl_param = _ossl_param_ary;OSSL_LIB_CTX *_ossl_lib_ctx = NULL;unsigned int threads;_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 key derivation function implementation */_evp_kdf = EVP_KDF_fetch(_ossl_lib_ctx, "argon2id", NULL);if (_evp_kdf == NULL) {fprintf(stderr, "EVP_KDF_fetch() returned NULL\n");goto end;}/* Create a context for the key derivation operation */_evp_kdf_ctx = EVP_KDF_CTX_new(_evp_kdf);if (_evp_kdf_ctx == NULL) {fprintf(stderr, "EVP_KDF_CTX_new() returned NULL\n");goto end;}/** Thread support can be turned off; use serialization if we cannot* set requested number of threads.*/threads = parallel_cost;if (OSSL_set_max_threads(_ossl_lib_ctx, parallel_cost) != 1) {uint64_t max_threads = OSSL_get_max_threads(_ossl_lib_ctx);if (max_threads == 0)threads = 1;else if (max_threads < parallel_cost)threads = (unsigned int)max_threads;}/* Set password */*p_ossl_param++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_PASSWORD, password, sizeof(password));/* Set salt */*p_ossl_param++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SALT, salt, sizeof(salt));/* Set optional additional data */*p_ossl_param++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_ARGON2_AD, ad, sizeof(ad));/* Set optional secret */*p_ossl_param++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SECRET, secret, sizeof(secret));/* Set iteration count */*p_ossl_param++ = OSSL_PARAM_construct_uint32(OSSL_KDF_PARAM_ITER, &iteration_cost);/* Set threads performing derivation (can be decreased) */*p_ossl_param++ = OSSL_PARAM_construct_uint(OSSL_KDF_PARAM_THREADS, &threads);/* Set parallel cost */*p_ossl_param++ = OSSL_PARAM_construct_uint32(OSSL_KDF_PARAM_ARGON2_LANES, &parallel_cost);/* Set memory requirement */*p_ossl_param++ = OSSL_PARAM_construct_uint32(OSSL_KDF_PARAM_ARGON2_MEMCOST, &memory_cost);*p_ossl_param = OSSL_PARAM_construct_end();/* Derive the key */if (EVP_KDF_derive(_evp_kdf_ctx, out, sizeof(out), _ossl_param_ary) != 1) {fprintf(stderr, "EVP_KDF_derive() failed\n");goto end;}if (CRYPTO_memcmp(expected_output, out, sizeof(expected_output)) != 0) {fprintf(stderr, "Generated key does not match expected value\n");goto end;}rv = EXIT_SUCCESS;
end:EVP_KDF_CTX_free(_evp_kdf_ctx);EVP_KDF_free(_evp_kdf);OSSL_LIB_CTX_free(_ossl_lib_ctx);return rv;
}

END

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

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

相关文章

企业用户注册阿里云账号:为何选择企业实名认证及其五大优势

在数字化时代&#xff0c;云计算已成为企业运营不可或缺的一部分。阿里云&#xff0c;作为领先的云服务提供商&#xff0c;为企业用户提供了丰富的云产品和解决方案。但在享受这些服务之前&#xff0c;企业用户需要完成阿里云账号的注册和实名认证。本文将深入探讨为何企业用户…

Nginx Proxy反向代理

Nginx Proxy 反向代理 1. 反向代理原理2. 正/反向代理的区别2.1. 正向代理2.2. 反向代理 3. 知识扩展3.1. HTTP Server 和 Application Server的区别和联系3.2. 静态资源和动态资源的区别 4. Nginx Proxy 配置4.1. 配置源站服务器4.2. 配置 Nginx 反向代理服务器4.3. Nginx pro…

小程序打包发行流程

工具 HBuilder X 、微信开发者工具、微信公众平台地址&#xff08;微信公众平台&#xff09; 配置 一、manifest.json 配置 通过 HBuilder X 打开 manifest.json 文件&#xff0c;找到 微信小程序配置&#xff0c;填写 微信小程序AppID&#xff0c;此 AppID 必须是本人有权…

Jvm相关知识(面试高级必备)

类的实例化顺序 先静态、先父后子 先静态&#xff1a;父静态>子静态 优先级&#xff1a;父类>子类 静态代码块>非静态代码块>构造函数 一个类的实例化过程&#xff1a; ①&#xff0e;父类的static代码块&#xff0c;当前类的static; ②&#xff0e;顺序执行…

freeswitch on centos dockerfile模式

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 centos7 docker上编译安装fs的流程记录&#xff0c;本文使用dockerfile模式。 环境 docker engine&#xff1a;Version 24.0.6 centos docker&#xff1a;7 freeswitch&#xff1a;v1.6.20 dockerfile 创建空目录…

力扣电话号码的组合

文章目录 题目说明做题思路代码实现代码解析 题目链接 题目说明 首先我们先分析一下这个题目题目中说呢先给出一个字符串这个字符串其实就是这个九键数字我们要按照要求将数字所代表的字符进行自由组合形成一个字符串并且这个字符串的长度和输入的数字字符串长度相同&#xff0…

DAY25:回溯算法组合题216、17

Leetcode: 216 组合总和III 经过了昨天组合的题目的学习&#xff0c;这道题比较简单&#xff0c;套用之前的模板就可以 基本思路 终止条件&#xff0c;遇到向量的个数一样&#xff0c;并且sum等于n的时候终止。输入变量&#xff0c;n,k&#xff0c;还有起始的idx和基于当前元…

2024.1.19

今天狠狠地复习了一下C语言&#xff0c;不复习不知道&#xff0c;一复习吓一跳昂&#xff0c;这感觉好多都忘却了&#xff0c;这并非一件好事&#xff0c;所以说还好复习了&#xff0c;不然考试就有点问题了&#xff0c;但是还好写一下这些代码就马上想起来了&#xff0c;所以说…

如何快速申请GPT账号?

详情点击链接&#xff1a;如何快速申请GPT账号&#xff1f;​​​​​​​ 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude…

search——Bloom Filter

详情&#xff0c;看这一篇博客 package mainimport ("fmt""math""strconv" )type BloomFilter struct {*bitMapk uint64 // hash function countm uint64 // bits array lengthn uint64 // insert n numberp float64 //…

递归组件怎么实现无线滚动

递归组件实现无限滚动的方法通常涉及到对数据的递归处理和组件的自我调用。以下是一个简单的示例&#xff0c;展示如何使用递归组件实现无限滚动&#xff1a; 首先&#xff0c;定义一个递归组件&#xff0c;该组件可以调用自己来渲染下一组数据。假设我们要展示一个滚动列表&a…

什么是vue的sync语法糖如何使用

Vue的sync语法糖是用于实现子组件修改父组件数据的双向绑定。在Vue中&#xff0c;默认是单向数据流&#xff0c;子组件不能直接修改父组件的数据。但是有些情况下&#xff0c;我们需要子组件能够修改父组件的数据&#xff0c;这时就可以使用sync语法糖。 使用sync语法糖的步骤…

第11章 GUI Page500~504 步骤三十二:打开画板文件02

各个图元类新增GetTypeName_Static()&#xff0c;并将原来的GetTypeName()改为调用静态方法实现&#xff1a; 直线&#xff1a; 圆&#xff1a; 十字&#xff1a; 矩形&#xff1a; 文字&#xff1a; tool_4_save_load.hpp添加两行 tool_4_save_load.cpp增加&#xff1a; 增加…

网络安全产品之认识入侵检测系统

随着计算机网络技术的快速发展和网络攻击的不断增多&#xff0c;单纯的防火墙策略已经无法满足对安全高度敏感的部门的需要&#xff0c;网络的防卫必须采用一种纵深的、多样的手段。因此&#xff0c;入侵检测系统作为新一代安全保障技术&#xff0c;成为了传统安全防护措施的必…

【资治通鉴】古代纪年法 ( 天干地支纪年法 | 木星纪年法 | 太岁纪年法 | 星次 | 天球 | 黄道带 | 四象二十八星宿 )

文章目录 一、天干地支纪年法二、木星纪年法1、星次2、天球3、黄道带 三、太岁纪年法四、四象二十八星宿1、四象与二十八星宿关联2、二十八星宿与星次关联3、西游记中的二十八星宿 2024 年 使用 天干地支纪年法是 甲辰年 , 使用 太岁纪年法是 阏逢执徐 ; 一、天干地支纪年法 天…

c 宏转字符串与拼接

C 用宏可以转字符串与拼接字符。 举例 #include <stdio.h> #define CON(a) (B##a) //concatenate #define STR

vim常见命令

目录 快捷键 常用命令 快捷键 i 切换插入模式 esc 退出插入模式 p 粘贴 常用命令 命令作用:q退出 vim 编辑器:q!不保存文件&#xff0c;直接退出 vim 编辑器:w只保存文件&#xff0c;但不退出 vim 编辑器:wq保存文件且退出 vim 编辑器ZZ保存文件且退出 vim 编辑器:start,…

建筑能源管理系统

建筑能源管理系统是一种集成了先进的监测、控制、分析和优化技术的智能化系统&#xff0c;旨在提高建筑能源效率&#xff0c;降低能源消耗&#xff0c;减少环境污染&#xff0c;并为用户提供舒适、安全的建筑环境。通过监测建筑内的各种能源消耗情况&#xff0c;如电力、热水、…

arthas(阿尔萨斯)日常java代码调优使用命令

官方项目文档&#xff1a;https://gitee.com/arthas/arthas &#xff08;最权威的教学还是得官网&#xff0c;这里仅作简单记录&#xff09; 1&#xff1a;启动 java -jar arthas-boot.jar 2&#xff1a;查看cpu占用排名前三 thread -3 3&#xff1a;查看指定id thread 203 4:查…

数据结构day1

1.思维导图 2.定义一个简单宏或宏函数&#xff0c;实现两个数交换。 3.定义字符类型指针&#xff0c;指针指向n个连续堆区内存&#xff0c;输入&#xff0c;计算字符串长度 定义函数&#xff0c;实现内存申请 定义函数&#xff0c;解释字符串长度 定义函数&#xff0c;释放内…