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

相关推荐
紫火桑葚10 天前
windows openssl编译x64版libssl.lib,编译x64版本libcurl.lib,支持https,vs2015编译器
windows·网络协议·https·静态库·openssl·libcurl
花落已飘18 天前
openssl中的SM3
c语言·算法·哈希算法·openssl
花落已飘1 个月前
openssl使用哈希算法生成随机密钥
算法·哈希算法·openssl
花落已飘1 个月前
openssl哈希算法
算法·哈希算法·openssl
zwm_yy1 个月前
openssl生成ca证书
openssl·ca
甄齐才1 个月前
解决windows下php8.x及以上版本,在Apache2.4中无法加载CURL扩展的问题
php·openssl·php7.4·php8开启curl扩展·system32·dynamic library·php_curl.dll
胡西风_foxww1 个月前
Linux下编译安装Nginx
linux·运维·nginx·编译·安装·openssl·pcre
Ho_pe2 个月前
ubuntu下openssl签名证书制作流程及验证demo
服务器·ubuntu·openssl
花落已飘2 个月前
openssl对称加密代码讲解实战
加密·openssl
花落已飘2 个月前
openssl加密算法简介
加密·openssl