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

茂名网站建设推广郑州 网站建设:

茂名网站建设推广,郑州 网站建设:,seo百度首页排名业务,扁平化 wordpress文章目录 openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c概述笔记END openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c 概述 DSA签名(摘要算法SHA256), DSA验签(摘要算法SHA256) 签名 : 用发送者的私钥进行签名. 验签 : 用发送者的公… 文章目录 openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c概述笔记END openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c 概述 DSA签名(摘要算法SHA256), DSA验签(摘要算法SHA256) 签名 : 用发送者的私钥进行签名. 验签 : 用发送者的公钥进行验签. 看下API调用顺序就行, 自己弄的时候, 跟着demo的流程弄就行. 对于openssl3.2, 越看越眼熟了. 笔记 /*! \file EVP_DSA_Signature_demo.c \note openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.cDSA签名(摘要算法SHA256), DSA验签(摘要算法SHA256) 签名 : 用发送者的私钥进行签名. 验签 : 用发送者的公钥进行验签.看下API调用顺序就行, 自己弄的时候, 跟着demo的流程弄就行. 对于openssl3.2, 越看越眼熟了. *//*-* 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*//** An example that uses the EVP_PKEY*, EVP_DigestSign* and EVP_DigestVerify** methods to calculate public/private DSA keypair and to sign and verify* two static buffers.*/#include string.h #include stdio.h #include openssl/err.h #include openssl/evp.h #include openssl/decoder.h #include openssl/dsa.h#include my_openSSL_lib.h/** This demonstration will calculate and verify a signature of data using* the soliloquy from Hamlet scene 1 act 3*/static const char *hamlet_1 To be, or not to be, that is the question,\nWhether tis nobler in the minde to suffer\nThe slings and arrowes of outragious fortune,\nOr to take Armes again in a sea of troubles,\n ; static const char *hamlet_2 And by opposing, end them, to die to sleep;\nNo more, and by a sleep, to say we end\nThe heart-ache, and the thousand natural shocks\nThat flesh is heir to? tis a consumation\n ;static const char ALG[] DSA; static const char DIGEST[] SHA256; static const int NUMBITS 2048; static const char * const PROPQUERY NULL;static int generate_dsa_params(OSSL_LIB_CTX *libctx,EVP_PKEY **p_params) {int ret 0;EVP_PKEY_CTX *pkey_ctx NULL;EVP_PKEY *params NULL;pkey_ctx EVP_PKEY_CTX_new_from_name(libctx, ALG, PROPQUERY);if (pkey_ctx NULL)goto end;if (EVP_PKEY_paramgen_init(pkey_ctx) 0)goto end;if (EVP_PKEY_CTX_set_dsa_paramgen_bits(pkey_ctx, NUMBITS) 0)goto end;if (EVP_PKEY_paramgen(pkey_ctx, params) 0)goto end;if (params NULL)goto end;ret 1; end:if(ret ! 1) {EVP_PKEY_free(params);params NULL;}EVP_PKEY_CTX_free(pkey_ctx);*p_params params;fprintf(stdout, Params:\n);EVP_PKEY_print_params_fp(stdout, params, 4, NULL);fprintf(stdout, \n);return ret; }static int generate_dsa_key(OSSL_LIB_CTX *libctx,EVP_PKEY *params,EVP_PKEY **p_pkey) {int ret 0;EVP_PKEY_CTX *ctx NULL;EVP_PKEY *pkey NULL;ctx EVP_PKEY_CTX_new_from_pkey(libctx, params,NULL);if (ctx NULL)goto end;if (EVP_PKEY_keygen_init(ctx) 0)goto end;if (EVP_PKEY_keygen(ctx, pkey) 0)goto end;if (pkey NULL)goto end;ret 1; end:if(ret ! 1) {EVP_PKEY_free(pkey);pkey NULL;}EVP_PKEY_CTX_free(ctx);*p_pkey pkey;fprintf(stdout, Generating public/private key pair:\n);EVP_PKEY_print_public_fp(stdout, pkey, 4, NULL);fprintf(stdout, \n);EVP_PKEY_print_private_fp(stdout, pkey, 4, NULL);fprintf(stdout, \n);EVP_PKEY_print_params_fp(stdout, pkey, 4, NULL);fprintf(stdout, \n);return ret; }static int extract_public_key(const EVP_PKEY *pkey,OSSL_PARAM **p_public_key) {int ret 0;OSSL_PARAM *public_key NULL;if (EVP_PKEY_todata(pkey, EVP_PKEY_PUBLIC_KEY, public_key) ! 1)goto end;ret 1; end:if (ret ! 1) {OSSL_PARAM_free(public_key);public_key NULL;}*p_public_key public_key;return ret; }static int extract_keypair(const EVP_PKEY *pkey,OSSL_PARAM **p_keypair) {int ret 0;OSSL_PARAM *keypair NULL;if (EVP_PKEY_todata(pkey, EVP_PKEY_KEYPAIR, keypair) ! 1)goto end;ret 1; end:if (ret ! 1) {OSSL_PARAM_free(keypair);keypair NULL;}*p_keypair keypair;return ret; }static int demo_sign(OSSL_LIB_CTX *libctx,size_t *p_sig_len, unsigned char **p_sig_value,OSSL_PARAM keypair[]) {int ret 0;size_t sig_len 0;unsigned char *sig_value NULL;EVP_MD_CTX *ctx NULL;EVP_PKEY_CTX *pkey_ctx NULL;EVP_PKEY *pkey NULL;pkey_ctx EVP_PKEY_CTX_new_from_name(libctx, ALG, PROPQUERY);if (pkey_ctx NULL)goto end;if (EVP_PKEY_fromdata_init(pkey_ctx) ! 1)goto end;if (EVP_PKEY_fromdata(pkey_ctx, pkey, EVP_PKEY_KEYPAIR, keypair) ! 1)goto end;ctx EVP_MD_CTX_create();if (ctx NULL)goto end;if (EVP_DigestSignInit_ex(ctx, NULL, DIGEST, libctx, NULL, pkey, NULL) ! 1)goto end;if (EVP_DigestSignUpdate(ctx, hamlet_1, sizeof(hamlet_1)) ! 1)goto end;if (EVP_DigestSignUpdate(ctx, hamlet_2, sizeof(hamlet_2)) ! 1)goto end;/* Calculate the signature size */if (EVP_DigestSignFinal(ctx, NULL, sig_len) ! 1)goto end;if (sig_len 0)goto end;sig_value OPENSSL_malloc(sig_len);if (sig_value NULL)goto end;/* Calculate the signature */if (EVP_DigestSignFinal(ctx, sig_value, sig_len) ! 1)goto end;ret 1; end:EVP_MD_CTX_free(ctx);if (ret ! 1) {OPENSSL_free(sig_value);sig_len 0;sig_value NULL;}*p_sig_len sig_len;*p_sig_value sig_value;EVP_PKEY_free(pkey);EVP_PKEY_CTX_free(pkey_ctx);fprintf(stdout, Generating signature:\n);BIO_dump_indent_fp(stdout, sig_value, (int)sig_len, 2);fprintf(stdout, \n);return ret; }static int demo_verify(OSSL_LIB_CTX *libctx,size_t sig_len, unsigned char *sig_value,OSSL_PARAM public_key[]) {int ret 0;EVP_MD_CTX *ctx NULL;EVP_PKEY_CTX *pkey_ctx NULL;EVP_PKEY *pkey NULL;pkey_ctx EVP_PKEY_CTX_new_from_name(libctx, ALG, PROPQUERY);if (pkey_ctx NULL)goto end;if (EVP_PKEY_fromdata_init(pkey_ctx) ! 1)goto end;if (EVP_PKEY_fromdata(pkey_ctx, pkey, EVP_PKEY_PUBLIC_KEY, public_key) ! 1)goto end;ctx EVP_MD_CTX_create();if(ctx NULL)goto end;if (EVP_DigestVerifyInit_ex(ctx, NULL, DIGEST, libctx, NULL, pkey, NULL) ! 1)goto end;if (EVP_DigestVerifyUpdate(ctx, hamlet_1, sizeof(hamlet_1)) ! 1)goto end;if (EVP_DigestVerifyUpdate(ctx, hamlet_2, sizeof(hamlet_2)) ! 1)goto end;if (EVP_DigestVerifyFinal(ctx, sig_value, sig_len) ! 1)goto end;ret 1; end:EVP_PKEY_free(pkey);EVP_PKEY_CTX_free(pkey_ctx);EVP_MD_CTX_free(ctx);return ret; }int main(void) {int ret EXIT_FAILURE;OSSL_LIB_CTX *libctx NULL;EVP_PKEY *params NULL;EVP_PKEY *pkey NULL;OSSL_PARAM *public_key NULL;OSSL_PARAM *keypair NULL;size_t sig_len 0;unsigned char *sig_value NULL;libctx OSSL_LIB_CTX_new();if (libctx NULL)goto end;if (generate_dsa_params(libctx, params) ! 1)goto end;if (generate_dsa_key(libctx, params, pkey) ! 1)goto end;if (extract_public_key(pkey, public_key) ! 1)goto end;if (extract_keypair(pkey, keypair) ! 1)goto end;/* The signer signs with his private key, and distributes his public key */if (demo_sign(libctx, sig_len, sig_value, keypair) ! 1)goto end;/* A verifier uses the signers public key to verify the signature */if (demo_verify(libctx, sig_len, sig_value, public_key) ! 1)goto end;ret EXIT_SUCCESS; end:if (ret ! EXIT_SUCCESS)ERR_print_errors_fp(stderr);OPENSSL_free(sig_value);EVP_PKEY_free(params);EVP_PKEY_free(pkey);OSSL_PARAM_free(public_key);OSSL_PARAM_free(keypair);OSSL_LIB_CTX_free(libctx);return ret; } END
http://www.w-s-a.com/news/754583/

相关文章:

  • 建设网站详细流程南京宣传片制作公司
  • 合肥网站排名什么网站做电气自动化兼职
  • 如何用api做网站交通建设门户网站
  • 阳西住房和城乡规划建设局网站长沙网站seo技巧
  • 长沙知名网站推广手机画设计图软件
  • 顺德公司做网站自己有网站怎么优化
  • 南京网站开发南京乐识专业外贸流程知乎
  • 盐田区住房和建设局网站分类网站有哪些
  • 建一个团购网站WordPress文章字号设置
  • 做漂亮的网站东营网站seo
  • 网站开发摊销做设计哪个网站可以接单
  • 惠州h5网站建设建设公司网站报价
  • 做网站多少钱 优帮云嘉兴五县两区网站建设
  • 三亚旅游网站策划书企业网站建设的定位
  • 网站建设工作台账网站建设的实验结论
  • 商业网站建设平台制作软件的软件
  • 本地网站开发wordpress页面关键词和描述
  • 微网站 合同软件开发培训方案
  • 怎么做淘宝客网站备案广告公司图片大全
  • 微信小程序展示网站建设多少钱做网站用什么软件初二
  • 瀑布流资源网站模板打码网站建设
  • wordpress 支付宝打赏网站视觉优化的意义
  • 建设网站需要几个文件夹永久免费内存大服务器
  • 可信赖的手机网站建设wordpress 显示摘要
  • 谁给我一个企业邮箱认证wordpress优化攻略
  • 建站软件免费版下载涿州做网站的
  • html5网站开发西安哪家网站建设公司好
  • 怎么做网站赚广州番禺区是富人区吗
  • 服装网站推广方案戴尔网站建设成功
  • 手机网站布局国外可以用什么网站做问卷