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

相关推荐
什么名字都被用了3 天前
编译openssl源码
c++·openssl
toooooop815 天前
openssl_error_string() 不要依赖错误信息作为逻辑判断
php·openssl
whoarethenext24 天前
加密认证库openssl初始附带c/c++的使用源码
c语言·网络·c++·openssl
好记忆不如烂笔头abc1 个月前
centos7.9升级OpenSSL 1.1.1
openssl
宁静致远20211 个月前
openssl交叉编译
openssl·嵌入式linux
漫步企鹅2 个月前
【漏洞修复】Android 10 系统源码中的 glibc、curl、openssl、cups、zlib 更新到最新版本
android·glibc·openssl·curl·zlib·漏洞修复·cups
Winter_Sun灬2 个月前
curl库+openssl库windows编译
c++·windows·openssl·curl
ScilogyHunter2 个月前
使用 OpenSSL 构建安全的网络应用
安全·openssl
dreadp2 个月前
使用 OpenSSL 和 Python 实现 AES-256-CBC 加密与解密(安全密钥管理)
python·安全·网络安全·密码学·openssl
初级代码游戏2 个月前
编写一个基于OpenSSL的SSL/TLS服务端(HTTPS)可运行的完整示例
网络协议·https·ssl·openssl·tls