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

文章目录

    • [openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_DSA_paramfromdata.c](#openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_DSA_paramfromdata.c)
    • 概述
    • 笔记
    • END

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

概述

开源工程包含的头文件类型是.inc, 要重命名为.h, 否则没有c++头文件语法提示

从数组中载入大数p,q,g

建立ossl_param, 设置参数的p,q,g

用参数初始化_evp_pkey_ctx, 得到_evp_pkey_dsa

打印_evp_pkey_dsa的共有数据(p,q,g ...) + 参数

笔记

c 复制代码
/*!
\file EVP_PKEY_DSA_paramfromdata.c
\note
openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_DSA_paramfromdata.c

开源工程包含的头文件类型是.inc, 要重命名为.h, 否则没有c++头文件语法提示

从数组中载入大数p,q,g
建立ossl_param, 设置参数的p,q,g 
用参数初始化_evp_pkey_ctx, 得到_evp_pkey_dsa
打印_evp_pkey_dsa的共有数据(p,q,g ...) + 参数
*/

/*-
 * 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 load DSA params from raw data
  * using EVP_PKEY_fromdata()
  */

#include <openssl/param_build.h>
#include <openssl/evp.h>
#include <openssl/core_names.h>
#include "dsa.h"

#include "my_openSSL_lib.h"

int main(int argc, char** argv)
{
	int ret = EXIT_FAILURE;
	OSSL_LIB_CTX* _ossl_lib_ctx = NULL;
	const char* propq = NULL;
	EVP_PKEY_CTX* _evp_pkey_ctx = NULL;
	EVP_PKEY* _evp_pkey_dsa = NULL;
	OSSL_PARAM_BLD* _ossl_param_bld = NULL;
	OSSL_PARAM* _ossl_param = NULL;
	BIGNUM* p = NULL, * q = NULL, * g = NULL;

	p = BN_bin2bn(dsa_p, sizeof(dsa_p), NULL);
	q = BN_bin2bn(dsa_q, sizeof(dsa_q), NULL);
	g = BN_bin2bn(dsa_g, sizeof(dsa_g), NULL);
	if (p == NULL || q == NULL || g == NULL)
		goto cleanup;

	/* Use OSSL_PARAM_BLD if you need to handle BIGNUM Parameters */
	_ossl_param_bld = OSSL_PARAM_BLD_new();
	if (_ossl_param_bld == NULL)
		goto cleanup;
	if (!OSSL_PARAM_BLD_push_BN(_ossl_param_bld, OSSL_PKEY_PARAM_FFC_P, p)
		|| !OSSL_PARAM_BLD_push_BN(_ossl_param_bld, OSSL_PKEY_PARAM_FFC_Q, q)
		|| !OSSL_PARAM_BLD_push_BN(_ossl_param_bld, OSSL_PKEY_PARAM_FFC_G, g))
		goto cleanup;
	_ossl_param = OSSL_PARAM_BLD_to_param(_ossl_param_bld);
	if (_ossl_param == NULL)
		goto cleanup;

	_evp_pkey_ctx = EVP_PKEY_CTX_new_from_name(_ossl_lib_ctx, "DSA", propq);
	if (_evp_pkey_ctx == NULL) {
		fprintf(stderr, "EVP_PKEY_CTX_new_from_name() failed\n");
		goto cleanup;
	}

	if (EVP_PKEY_fromdata_init(_evp_pkey_ctx) <= 0
		|| EVP_PKEY_fromdata(_evp_pkey_ctx, &_evp_pkey_dsa, EVP_PKEY_KEY_PARAMETERS, _ossl_param) <= 0) {
		fprintf(stderr, "EVP_PKEY_fromdata() failed\n");
		goto cleanup;
	}

	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_CTX_free(_evp_pkey_ctx);
	OSSL_PARAM_free(_ossl_param);
	OSSL_PARAM_BLD_free(_ossl_param_bld);
	BN_free(g);
	BN_free(q);
	BN_free(p);

	return ret;
}

END

相关推荐
coder4_5 天前
OpenSSL 加密算法与证书管理全解析:从基础到私有 CA 实战
https·openssl·ssl/tls·加密算法·ca证书
王小义笔记12 天前
windows电脑如何执行openssl rand命令
windows·openssl
Humbunklung15 天前
VC++ 使用OpenSSL创建RSA密钥PEM文件
开发语言·c++·openssl
深耕AI1 个月前
Win64OpenSSL-3_5_2.exe【安装步骤】
openssl
看那山瞧那水1 个月前
DELPHI 利用OpenSSL实现加解密,证书(X.509)等功能
delphi·openssl
洋哥网络科技2 个月前
openssl升级
openssl
Lazy Dave2 个月前
gmssl私钥文件格式
网络安全·ssl·openssl
沉在嵌入式的鱼3 个月前
RK3588移植Openssl库
linux·rk3588·openssl
黑屋里的马3 个月前
ssl相关命令生成证书
服务器·网络·ssl·openssl·gmssl
fangeqin3 个月前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl