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

文章目录

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

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

概述

产生DSA的_evp_pkey_ctx

初始化_evp_pkey_ctx

设置参数到_evp_pkey_ctx

由_evp_pkey_ctx产生_evp_pkey

打印_evp_pkey公开值和DSA param

笔记

c 复制代码
/*!
\file EVP_PKEY_DSA_paramgen.c
\note
openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_DSA_paramgen.c
产生DSA的_evp_pkey_ctx
初始化_evp_pkey_ctx
设置参数到_evp_pkey_ctx
由_evp_pkey_ctx产生_evp_pkey
打印_evp_pkey公开值和DSA param
*/

/*-
 * 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 DSA params using
  * FIPS 186-4 DSA FFC parameter generation.
  */

#include <openssl/evp.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 = NULL;
	OSSL_PARAM params[7];
	unsigned int pbits = 2048;
	unsigned int qbits = 256;
	int gindex = 42;

	_evp_pkey_ctx = EVP_PKEY_CTX_new_from_name(_ossl_lib_ctx, "DSA", propq);
	if (_evp_pkey_ctx == NULL)
		goto cleanup;

	/*
	 * Demonstrate how to set optional DSA fields as params.
	 * See doc/man7/EVP_PKEY-FFC.pod and doc/man7/EVP_PKEY-DSA.pod
	 * for more information.
	 */
	params[0] = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_FFC_TYPE,
		"fips186_4", 0);
	params[1] = OSSL_PARAM_construct_uint(OSSL_PKEY_PARAM_FFC_PBITS, &pbits);
	params[2] = OSSL_PARAM_construct_uint(OSSL_PKEY_PARAM_FFC_QBITS, &qbits);
	params[3] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_FFC_GINDEX, &gindex);
	params[4] = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_FFC_DIGEST,
		"SHA384", 0);
	params[5] = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_FFC_DIGEST_PROPS,
		"provider=default", 0);
	params[6] = OSSL_PARAM_construct_end();

	/* Generate a dsa param key using optional params */
	if (EVP_PKEY_paramgen_init(_evp_pkey_ctx) <= 0
		|| EVP_PKEY_CTX_set_params(_evp_pkey_ctx, params) <= 0
		|| EVP_PKEY_paramgen(_evp_pkey_ctx, &_evp_pkey) <= 0) {
		fprintf(stderr, "DSA paramgen failed\n");
		goto cleanup;
	}

	if (!dsa_print_key(_evp_pkey, 0, _ossl_lib_ctx, propq))
		goto cleanup;

	ret = EXIT_SUCCESS;
cleanup:
	EVP_PKEY_free(_evp_pkey);
	EVP_PKEY_CTX_free(_evp_pkey_ctx);
	return ret;
}

END

相关推荐
Lsetea12 小时前
部署证书后提示“证书名称与输入不匹配”:Safari 报错的三层排查
nginx·https·safari·ssl证书·openssl
Lsetea1 天前
OpenSSL快速生成域名证书:含SAN的自签命令、验证与排错
nginx·https·ssl证书·openssl·自签证书
Lsetea5 天前
CDN换了SSL证书仍显示旧证书?按边缘节点、SNI和缓存逐层排查
https·cdn·ssl证书·openssl·tls
Lsetea6 天前
Nginx HTTPS证书域名不匹配:用SAN与SNI定位 ERR_CERT_COMMON_NAME_INVALID
nginx·https·ssl证书·openssl·tls
bosins10 天前
Windows IIS 配置本地HTTPS 全流程指南:自签名证书 + 端口绑定 + 避坑详解
powershell·openssl
Lsetea14 天前
Nginx报SSL_CTX_use_PrivateKey failed:证书与私钥不匹配怎么排查
nginx·https·ssl证书·openssl·私钥
Lsetea16 天前
SSL证书快过期怎么自动检查:用OpenSSL checkend做7天预警与线上证书验收
https·ssl证书·openssl·systemd·证书监控
蜡台1 个月前
本机 局域网 搭建本地 HTTPS 域名完整方案
网络协议·http·https·openssl
qetfw1 个月前
Debian OpenSSL CA 证书配置参考:根证书、服务证书与验证
linux·debian·ssl·openssl
qetfw1 个月前
Debian OpenSSL 搭建 CA 证书服务:签发、吊销与客户端信任
linux·debian·openssl·ca