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

网站开发服务承诺书湖州seo排名

网站开发服务承诺书,湖州seo排名,河北建设厅八大员报名网站,吕梁建设机械网站文章目录 openssl3.2 - 官方demo学习 - signature - rsa_pss_hash.c概述笔记END openssl3.2 - 官方demo学习 - signature - rsa_pss_hash.c 概述 对私钥对明文做签名(摘要算法为SHA256) 用公钥对密文做验签(摘要算法为SHA256) 笔记 /*! \file rsa_pss_hash.c \note openss…

文章目录

    • openssl3.2 - 官方demo学习 - signature - rsa_pss_hash.c
    • 概述
    • 笔记
    • END

openssl3.2 - 官方demo学习 - signature - rsa_pss_hash.c

概述

对私钥对明文做签名(摘要算法为SHA256)
用公钥对密文做验签(摘要算法为SHA256)

笔记

/*!
\file rsa_pss_hash.c
\note 
openssl3.2 - 官方demo学习 - signature - rsa_pss_hash.c对私钥对明文做签名(摘要算法为SHA256)
用公钥对密文做验签(摘要算法为SHA256)
*//** 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*/#include <stdio.h>
#include <stdlib.h>
#include <openssl/core_names.h>
#include <openssl/evp.h>
#include <openssl/rsa.h>
#include <openssl/params.h>
#include <openssl/err.h>
#include <openssl/bio.h>
#include "rsa_pss.h"#include "my_openSSL_lib.h"/* The data to be signed. This will be hashed. */
static const char test_message[] ="This is an example message to be signed.";/* A property query used for selecting algorithm implementations. */
static const char *propq = NULL;/** This function demonstrates RSA signing of an arbitrary-length message.* Hashing is performed automatically. In this example, SHA-256 is used. If you* have already hashed your message and simply want to sign the hash directly,* see rsa_pss_direct.c.*/
static int sign(OSSL_LIB_CTX *libctx, unsigned char **sig, size_t *sig_len)
{int ret = 0;EVP_PKEY *pkey = NULL;EVP_MD_CTX *mctx = NULL;OSSL_PARAM params[2], *p = params;const unsigned char *ppriv_key = NULL;*sig = NULL;/* Load DER-encoded RSA private key. */ppriv_key = rsa_priv_key;pkey = d2i_PrivateKey_ex(EVP_PKEY_RSA, NULL, &ppriv_key,sizeof(rsa_priv_key), libctx, propq);if (pkey == NULL) {fprintf(stderr, "Failed to load private key\n");goto end;}/* Create MD context used for signing. */mctx = EVP_MD_CTX_new();if (mctx == NULL) {fprintf(stderr, "Failed to create MD context\n");goto end;}/* Initialize MD context for signing. */*p++ = OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_PAD_MODE,OSSL_PKEY_RSA_PAD_MODE_PSS, 0);*p = OSSL_PARAM_construct_end();if (EVP_DigestSignInit_ex(mctx, NULL, "SHA256", libctx, propq,pkey, params) == 0) {fprintf(stderr, "Failed to initialize signing context\n");goto end;}/** Feed data to be signed into the algorithm. This may* be called multiple times.*/if (EVP_DigestSignUpdate(mctx, test_message, sizeof(test_message)) == 0) {fprintf(stderr, "Failed to hash message into signing context\n");goto end;}/* Determine signature length. */if (EVP_DigestSignFinal(mctx, NULL, sig_len) == 0) {fprintf(stderr, "Failed to get signature length\n");goto end;}/* Allocate memory for signature. */*sig = OPENSSL_malloc(*sig_len);if (*sig == NULL) {fprintf(stderr, "Failed to allocate memory for signature\n");goto end;}/* Generate signature. */if (EVP_DigestSignFinal(mctx, *sig, sig_len) == 0) {fprintf(stderr, "Failed to sign\n");goto end;}ret = 1;
end:EVP_MD_CTX_free(mctx);EVP_PKEY_free(pkey);if (ret == 0)OPENSSL_free(*sig);return ret;
}/** This function demonstrates verification of an RSA signature over an* arbitrary-length message using the PSS signature scheme. Hashing is performed* automatically.*/
static int verify(OSSL_LIB_CTX *libctx, const unsigned char *sig, size_t sig_len)
{int ret = 0;EVP_PKEY *pkey = NULL;EVP_MD_CTX *mctx = NULL;OSSL_PARAM params[2], *p = params;const unsigned char *ppub_key = NULL;/* Load DER-encoded RSA public key. */ppub_key = rsa_pub_key;pkey = d2i_PublicKey(EVP_PKEY_RSA, NULL, &ppub_key, sizeof(rsa_pub_key));if (pkey == NULL) {fprintf(stderr, "Failed to load public key\n");goto end;}/* Create MD context used for verification. */mctx = EVP_MD_CTX_new();if (mctx == NULL) {fprintf(stderr, "Failed to create MD context\n");goto end;}/* Initialize MD context for verification. */*p++ = OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_PAD_MODE,OSSL_PKEY_RSA_PAD_MODE_PSS, 0);*p = OSSL_PARAM_construct_end();if (EVP_DigestVerifyInit_ex(mctx, NULL, "SHA256", libctx, propq,pkey, params) == 0) {fprintf(stderr, "Failed to initialize signing context\n");goto end;}/** Feed data to be signed into the algorithm. This may* be called multiple times.*/if (EVP_DigestVerifyUpdate(mctx, test_message, sizeof(test_message)) == 0) {fprintf(stderr, "Failed to hash message into signing context\n");goto end;}/* Verify signature. */if (EVP_DigestVerifyFinal(mctx, sig, sig_len) == 0) {fprintf(stderr, "Failed to verify signature; ""signature may be invalid\n");goto end;}ret = 1;
end:EVP_MD_CTX_free(mctx);EVP_PKEY_free(pkey);return ret;
}int main(int argc, char **argv)
{int ret = EXIT_FAILURE;OSSL_LIB_CTX *libctx = NULL;unsigned char *sig = NULL;size_t sig_len = 0;if (sign(libctx, &sig, &sig_len) == 0)goto end;if (verify(libctx, sig, sig_len) == 0)goto end;ret = EXIT_SUCCESS;
end:OPENSSL_free(sig);OSSL_LIB_CTX_free(libctx);return ret;
}

END

http://www.hkea.cn/news/793677/

相关文章:

  • 网站开发专业培训学校百度推广登录官网入口
  • 贵阳做网站公司网站热度查询
  • 做课件最好的素材网站考拉seo
  • 网站建设玖首选金手指seo网站优化收藏
  • 台州卓远做网站好不好广州seo教程
  • dz网站数据备份bt磁力猪
  • github 可以做网站吗360seo
  • 杭州 企业门户网站建设爱链
  • dj那个网站做的好长沙公司网络营销推广
  • 设计师培训招生视频黑帽seo联系方式
  • 做网上贸易哪个网站好西宁网站seo
  • 电子烟网站建设杯子软文营销300字
  • 广州企业网站制作怎么做营销推广
  • 网站建设服务器在香港郑州网站建设专业乐云seo
  • 河北建设工程交易信息网海口关键词优化报价
  • 全国网站建设公司有多少家微信朋友圈广告投放收费标准
  • 免费做网站公司黑帽seo排名技术
  • apk连接wordpress上海seo
  • 企业建网站租用服务器好还是买一个好石家庄网站关键词推广
  • wordpress文件解析外贸网站优化
  • 建设工程竣工备案网站百度保障中心人工电话
  • 韶关城乡建设部网站首页营销型网站建设策划书
  • 建设银行手机银行下载官方网站谷歌浏览器网页版入口在哪里
  • 网站建设 好域名注册信息
  • 公众号微网站建设认证哪个推广网站好
  • 爬取1024上传到wordpress蔡甸seo排名公司
  • 流感吃什么药更好seo的方法
  • 营销型网站建设市场seo黑帽技术有哪些
  • 扬中做网站的公司seo虚拟外链
  • 永川集团网站建设免费网站seo诊断