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

openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_DSA_keygen.c

文章目录

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

openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_DSA_keygen.c

概述

das.h 中有2个公共函数(给pkey目录的所有工程公用):
print_bn() 打印大数值
dsa_print_key() 打印key值

打印_evp_pkey_dsa的共有数据(p,q,g, seed, pcounter) + 公钥/私钥 + DSA参数
每次产生的pkey都不一样(因为seed不一样)

笔记

/*!
\file EVP_PKEY_DSA_keygen.c
\note
openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_DSA_keygen.c
das.h 中有2个公共函数(给pkey目录的所有工程公用):
print_bn() 打印大数值
dsa_print_key() 打印key值打印_evp_pkey_dsa的共有数据(p,q,g, seed, pcounter) + 公钥/私钥 + DSA参数
每次产生的pkey都不一样(因为seed不一样)
*//*-* 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 showing how to generate an DSA key pair.*/#include <openssl/evp.h>
#include "dsa.h"#include "my_openSSL_lib.h"/** Generate dsa params using default values.* See the EVP_PKEY_DSA_param_fromdata demo if you need* to load DSA params from raw values.* See the EVP_PKEY_DSA_paramgen demo if you need to* use non default parameters.*/
EVP_PKEY* dsa_genparams(OSSL_LIB_CTX* libctx, const char* propq)
{EVP_PKEY* _evp_pkey_dsa_param = NULL;EVP_PKEY_CTX* _evp_pkey_ctx = NULL;/* Use the dsa params in a EVP_PKEY ctx */_evp_pkey_ctx = EVP_PKEY_CTX_new_from_name(libctx, "DSA", propq);if (_evp_pkey_ctx == NULL) {fprintf(stderr, "EVP_PKEY_CTX_new_from_name() failed\n");return NULL;}if (EVP_PKEY_paramgen_init(_evp_pkey_ctx) <= 0|| EVP_PKEY_paramgen(_evp_pkey_ctx, &_evp_pkey_dsa_param) <= 0) {fprintf(stderr, "DSA paramgen failed\n");goto cleanup;}
cleanup:EVP_PKEY_CTX_free(_evp_pkey_ctx);return _evp_pkey_dsa_param;
}int main(int argc, char** argv)
{int ret = EXIT_FAILURE;OSSL_LIB_CTX* _ossl_lib_ctx = NULL;const char* propq = NULL;EVP_PKEY* _evp_pkey_dsa_param = NULL;EVP_PKEY* _evp_pkey_dsa = NULL;EVP_PKEY_CTX* _evp_pkey_ctx = NULL;/* Generate random dsa params */_evp_pkey_dsa_param = dsa_genparams(_ossl_lib_ctx, propq);if (_evp_pkey_dsa_param == NULL)goto cleanup;/* Use the dsa params in a EVP_PKEY ctx */_evp_pkey_ctx = EVP_PKEY_CTX_new_from_pkey(_ossl_lib_ctx, _evp_pkey_dsa_param, propq);if (_evp_pkey_ctx == NULL) {fprintf(stderr, "EVP_PKEY_CTX_new_from_pkey() failed\n");goto cleanup;}/* Generate a key using the dsa params */if (EVP_PKEY_keygen_init(_evp_pkey_ctx) <= 0|| EVP_PKEY_keygen(_evp_pkey_ctx, &_evp_pkey_dsa) <= 0) {fprintf(stderr, "DSA keygen failed\n");goto cleanup;}/*! 打印_evp_pkey_dsa的共有数据(p,q,g, seed, pcounter) + 公钥/私钥 */if (!dsa_print_key(_evp_pkey_dsa, 1, _ossl_lib_ctx, propq))goto cleanup;/*! 打印_evp_pkey_dsa2的共有数据(p,q,g, seed, pcounter) + DSA参数 */if (!dsa_print_key(_evp_pkey_dsa, 0, _ossl_lib_ctx, propq))goto cleanup;ret = EXIT_SUCCESS;
cleanup:EVP_PKEY_free(_evp_pkey_dsa);EVP_PKEY_free(_evp_pkey_dsa_param);EVP_PKEY_CTX_free(_evp_pkey_ctx);return ret;
}

END

相关文章:

  • 网页设计(十一)JavaScript事件分析
  • windows编译TensorFlowServing
  • 东北编程语言???
  • 代码随想录算法训练营29期|day 22 任务以及具体安排
  • 蓝桥杯C组-填充-贪心
  • 电路原理1-线性电阻
  • 一台电脑如何通过另一台联网电脑访问网络
  • css less sass 动态宽高
  • CNC数控机床通过工业智能网关实现远程运维
  • 讲解机器学习中的 K-均值聚类算法及其优缺点
  • 陶哲轩工作流之人工智能数学验证+定理发明工具LEAN4 [线性代数篇2前置知识]不同求和范围不同函数项结果相等的条件
  • 50-Js控制元素显示隐藏
  • 229.【2023年华为OD机试真题(C卷)】手机App防沉迷系统(模拟-JavaPythonC++JS实现)
  • 【征服redis5】redis的Redisson客户端
  • MySQL中的in+子查询应该如何优化
  • $translatePartialLoader加载失败及解决方式
  • __proto__ 和 prototype的关系
  • C++类的相互关联
  • gulp 教程
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Ruby 2.x 源代码分析:扩展 概述
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Travix是如何部署应用程序到Kubernetes上的
  • vue中实现单选
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • ------- 计算机网络基础
  • 用Visual Studio开发以太坊智能合约
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 怎样选择前端框架
  • 白色的风信子
  • Java数据解析之JSON
  • 数据库巡检项
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​flutter 代码混淆
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​Spring Boot 分片上传文件
  • (52)只出现一次的数字III
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (二)换源+apt-get基础配置+搜狗拼音
  • (算法二)滑动窗口
  • (原)Matlab的svmtrain和svmclassify
  • (转) 深度模型优化性能 调参
  • (转)关于pipe()的详细解析
  • ******IT公司面试题汇总+优秀技术博客汇总
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET值类型变量“活”在哪?
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [c#基础]值类型和引用类型的Equals,==的区别
  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk --不会编程的崽
  • [CTO札记]盛大文学公司名称对联
  • [FTP]pureftp部署和优化
  • [GXYCTF2019]BabyUpload1 -- 题目分析与详解