openssl3.2 - 官方demo学习 - cms - cms_ver.c

文章目录

    • openssl3.2 - 官方demo学习 - cms - cms_ver.c
    • 概述
    • 运行结果
    • 笔记
    • END

openssl3.2 - 官方demo学习 - cms - cms_ver.c

概述

CMS验签, 将单独签名和联合签名出来的签名文件都试试.
验签成功后, 将签名数据明文写入了文件供查看.
也就是说, 只有验签成功后, 才能看到签名数据的明文.
验签时, 使用的是上一级的证书(这里是CA证书)
签名时, 使用的是低级证书(接收者证书, 或者说是签名者证书, 这些证书都是CA证书发出来的)

运行结果

在这里插入图片描述
不管是单独签名, 还是联合签名, 验签都是一个API搞定.

笔记

/*!
\file cms_ver.c
\note openssl3.2 - 官方demo学习 - cms - cms_ver.c
CMS验签, 将单独签名和联合签名出来的签名文件都试试.
验签成功后, 将签名数据明文写入了文件供查看. 
也就是说, 只有验签成功后, 才能看到签名数据的明文.
验签时, 使用的是上一级的证书(这里是CA证书)
签名时, 使用的是低级证书(接收者证书)
*//** Copyright 2008-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*//* Simple S/MIME verification example */
#include <openssl/pem.h>
#include <openssl/cms.h>
#include <openssl/err.h>#include "my_openSSL_lib.h"/** print any signingTime attributes.* signingTime is when each party purportedly signed the message.*/
static void print_signingTime(CMS_ContentInfo *cms)
{STACK_OF(CMS_SignerInfo) *sis;CMS_SignerInfo *si;X509_ATTRIBUTE *attr;ASN1_TYPE *t;ASN1_UTCTIME *utctime;ASN1_GENERALIZEDTIME *gtime;BIO *b;int i, loc;int iSignCnt = 0;b = BIO_new_fp(stdout, BIO_NOCLOSE | BIO_FP_TEXT);sis = CMS_get0_SignerInfos(cms);iSignCnt = sk_CMS_SignerInfo_num(sis);for (i = 0; i < iSignCnt; i++) {si = sk_CMS_SignerInfo_value(sis, i);loc = CMS_signed_get_attr_by_NID(si, NID_pkcs9_signingTime, -1);attr = CMS_signed_get_attr(si, loc);t = X509_ATTRIBUTE_get0_type(attr, 0);if (t == NULL)continue;switch (t->type) {case V_ASN1_UTCTIME:utctime = t->value.utctime;ASN1_UTCTIME_print(b, utctime);break;case V_ASN1_GENERALIZEDTIME:gtime = t->value.generalizedtime;ASN1_GENERALIZEDTIME_print(b, gtime);break;default:fprintf(stderr, "unrecognized signingTime type\n");break;}BIO_printf(b, ": signingTime from SignerInfo %i\n", i);}BIO_free(b);return;
}int verify_sign()
{BIO* in = NULL, * out = NULL, * tbio = NULL, * cont = NULL;X509_STORE* st = NULL;X509* cacert = NULL;CMS_ContentInfo* cms = NULL;int ret = EXIT_FAILURE;//OpenSSL_add_all_algorithms();//ERR_load_crypto_strings();/* Set up trusted CA certificate store */st = X509_STORE_new();if (st == NULL)goto err;/* Read in CA certificate */tbio = BIO_new_file("cacert.pem", "r");if (tbio == NULL)goto err;cacert = PEM_read_bio_X509(tbio, NULL, 0, NULL);if (cacert == NULL)goto err;if (!X509_STORE_add_cert(st, cacert))goto err;/* Open message being verified */in = BIO_new_file("smout.txt", "r");if (in == NULL)goto err;/* parse message */cms = SMIME_read_CMS(in, &cont);if (cms == NULL)goto err;print_signingTime(cms);/* File to output verified content to */out = BIO_new_file("smver.txt", "w");if (out == NULL)goto err;if (!CMS_verify(cms, NULL, st, cont, out, 0)) {fprintf(stderr, "Verification Failure\n");goto err;}printf("Verification Successful\n");ret = EXIT_SUCCESS;err:if (ret != EXIT_SUCCESS) {fprintf(stderr, "Error Verifying Data\n");ERR_print_errors_fp(stderr);}X509_STORE_free(st);CMS_ContentInfo_free(cms);X509_free(cacert);BIO_free(in);BIO_free(out);BIO_free(tbio);return ret;}int verify_sign2()
{BIO* in = NULL, * out = NULL, * tbio = NULL, * cont = NULL;X509_STORE* st = NULL;X509* cacert = NULL;CMS_ContentInfo* cms = NULL;int ret = EXIT_FAILURE;//OpenSSL_add_all_algorithms();//ERR_load_crypto_strings();/* Set up trusted CA certificate store */st = X509_STORE_new();if (st == NULL)goto err;/* Read in CA certificate */tbio = BIO_new_file("cacert.pem", "r");if (tbio == NULL)goto err;cacert = PEM_read_bio_X509(tbio, NULL, 0, NULL);if (cacert == NULL)goto err;if (!X509_STORE_add_cert(st, cacert))goto err;/* Open message being verified */in = BIO_new_file("smout2.txt", "r");if (in == NULL)goto err;/* parse message */cms = SMIME_read_CMS(in, &cont);if (cms == NULL)goto err;print_signingTime(cms);/* File to output verified content to */out = BIO_new_file("smver2.txt", "w");if (out == NULL)goto err;if (!CMS_verify(cms, NULL, st, cont, out, 0)) {fprintf(stderr, "Verification Failure\n");goto err;}printf("Verification Successful\n");ret = EXIT_SUCCESS;err:if (ret != EXIT_SUCCESS) {fprintf(stderr, "Error Verifying Data\n");ERR_print_errors_fp(stderr);}X509_STORE_free(st);CMS_ContentInfo_free(cms);X509_free(cacert);BIO_free(in);BIO_free(out);BIO_free(tbio);return ret;}#define LINE10 "----------"
#define LINE60 LINE10 LINE10 LINE10 LINE10 LINE10 LINE10int main(int argc, char **argv)
{OpenSSL_add_all_algorithms();ERR_load_crypto_strings();printf("%s\n", LINE60);printf(">> veirfy sign\n");if (EXIT_SUCCESS != verify_sign()){return -1;}printf("%s\n", LINE60);printf(">> veirfy sign2\n");if (EXIT_SUCCESS != verify_sign2()){return -1;}printf("END\n");return 0;
}

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/620471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch损失函数

一、损失函数是什么 损失函数&#xff1a;衡量模型输出与真实标签的差异 class _Loss(Module):def __init__(self, size_averageNone, reduceNone, reductionmean):"""Loss函数的基类&#xff0c;定义了一些通用的属性和方法。参数&#xff1a;- size_average…

vmware和ubuntu镜像下载地址

这里有vmware16和ubuntu20.0下载 链接&#xff1a;https://pan.baidu.com/s/1i9IC-KnJlrVDbl6SJ5SIKQ?pwdy2dd 提取码&#xff1a;y2dd 链接&#xff1a;https://pan.baidu.com/s/1imqJVD2dLE1TB6jIrq1-Fg?pwd690f 提取码&#xff1a;690f 这个是我本人下的vmware17 密钥可…

解决命令行无法启动scrapy爬虫

前言 最近在准备毕设项目&#xff0c;想使用scrapy架构来进行爬虫&#xff0c;找了一个之前写过的样例&#xff0c;没想到在用普通的启动命令时报错。报错如下 无法将“scrapy”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径…

增删改查管理系统 总结1

//提醒&#xff1a; 管理员也要有增删改查 新增员工代码完善2可能需要用到 目录 细节1 pom文件出现奇怪页面&#xff1f; 细节2 如何联系DataGrip与idea&#xff1f; 细节3 Yapi?接口文档&#xff1f;如何有以下画面&#xff1f; ​细节4 如何将时间转化为好看的时间&…

Android 13.0 SystemUI下拉状态栏定制二 锁屏页面横竖屏时钟都居中功能实现一

1.前言 在13.0的系统rom定制化开发中,在关于systemui的锁屏页面功能定制中,由于在平板横屏锁屏功能中,时钟显示的很大,并且是在左旁边居中显示的, 由于需要和竖屏显示一样,所以就需要用到小时钟显示,然后同样需要居中,所以就来分析下相关的源码,来实现具体的功能 2.S…

Android Studio 虚拟机 Unknown Error 解决

前言 尝试了网上很多解决方式&#xff0c;但很遗憾&#xff0c;都没效果&#xff1b; 于是我就想啊&#x1f914;&#xff0c;虚拟机属于SDK的一部分&#xff0c;那有没有一种可能&#xff0c;是SDK出了问题&#xff1b; 于是我就换了新的SDK&#xff0c;结果 ---- 完美解决…

网络安全技术新手入门:利用永恒之蓝获取靶机控制权限

目录 前言 一、搜索永恒之蓝可用模块 二、使用攻击模块 三、配置攻击模块 四、攻击 五、总结 前言 相关法律声明&#xff1a;《中华人民共和国网络安全法》第二十七条 任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动&…

RibbonGroup添加QAction

实际项目中&#xff0c;group中需要添加按钮与点击事件&#xff1a; 添加实例如下&#xff1a; if (Qtitan::RibbonGroup* groupClipboard pageHome->addGroup(tr("Clipboard"))) { //右下角按钮显示 groupClipboard->setO…

IP-Adapter:用于文本到图像扩散模型的文本兼容图像提示适配器

文章目录 一、IP-Adapter简介二、IP-Adapter与img2img的区分&#xff08;一&#xff09;结构上的区别&#xff08;二&#xff09;流程上的区别&#xff08;三&#xff09;输出上的区别&#xff08;四&#xff09;原理上的区别 三、IP-Adapter的网络架构&#xff08;一&#xff…

基于Go框架,Cloudreve个人免费开源网盘系统源码,支持云存储(七牛、阿里云OSS、腾讯云COS、又拍云、OneDrive)

源码介绍 在数字化时代&#xff0c;我们经常需要存储、分享大量的文件&#xff0c;如照片、视频、文档等。然而&#xff0c;许多商业网盘服务却存在限速、收费等问题&#xff0c;给用户带来诸多不便。现在&#xff0c;我们为您推荐一款免费开源的网盘系统——Cloudreve。 Clo…

PostgreSQL认证考试PGCA、PGCE、PGCM

PostgreSQL认证考试PGCA、PGCE、PGCM 【重点&#xff01;重点&#xff01;重点&#xff01;】PGCA、PGCE、PGCM 直通车快速下正&#xff0c;省心省力&#xff0c;每2个月一次考试 PGCE考试通知 &#xff08;2024&#xff09; 一、考试概览 &#xff08;一&#xff09; 报名要…

远程开发之vacode插件Remote - SSH

远程开发之vacode插件Remote - SSH vscode插件(Remote - SSH)ssh config自定义配置跳板机ssh-agent配置(使ForwardAgent配置生效, 免密拉代码)拷贝公钥到服务器(实现免密登录服务器) 通过vscode的Remote - SSH插件, 实现远程服务器进行像本地操作一样使用远程服务器, 亦可进行像…

YZ虚拟资源下载源码-支持对接公众号-对接支付

这款系统内置的模板是电脑系统下载站的类型&#xff0c;当然你也可以用作其他类型&#xff0c;例如软件下载&#xff0c;其他类型的资源下载&#xff0c;知识付费下载等&#xff0c;改下文字内容即可。 支持商城系统&#xff0c;后台可配置支付。青狐修改增加了很多可用性。 …

【计算机网络】内容整理

概述 分组交换 分组交换则采用存储转发&#xff08;整个包必须到达路由器&#xff0c;然后才能在下一个链路上传输)技术。 在发送端&#xff0c;先把较长的报文划分成较短的、固定长度的数据段。 电路交换 在端系统间通信会话期间&#xff0c;预留了端系统间沿路径通信所需…

在Docker上配置TensorFlow

在Docker上配置TensorFlow 配置WSL 参考教程&#xff1a;https://blog.csdn.net/m0_63969219/article/details/124632640 在上述教程配置的过程中&#xff0c;可能很难在微软商店下到ubuntu&#xff0c;下面给出另外一种解决方案&#xff1a; 接着上面教程 wsl --set-defaul…

跟着cherno手搓游戏引擎【5】layer(层)、Glad

编写基类层&#xff1a; Layer.h:提供Attach链接、Detach解绑、Update刷新、Event事件、GetName方法 #pragma once #include"YOTO/Core.h" #include"YOTO/Event/Event.h" namespace YOTO {class YOTO_API Layer{public:Layer(const std::string& nam…

微机原理常考填空总结

hello大家好我是吃个西瓜嘤&#xff0c;这篇节只总结微机原理常考填空题都是干货展示常出现的易错点以及微机原理注意事项。 以下仅代表个人发言 #微机原理 正文开始&#xff1a; 1&#xff0c;区分JZ&#xff0c;JNZ技巧 也就是D70用JZ&#xff1b;D71用JNZ。 JZ;条件ZF1时…

【河海大学论文LaTeX+VSCode全指南】

河海大学论文LaTeXVSCode全指南 前言一、 LaTeX \LaTeX{} LATE​X的安装二、VScode的安装三、VScode的配置四、验证五、优化 前言 LaTeX \LaTeX{} LATE​X在论文写作方面具有传统Word无法比拟的优点&#xff0c;VScode作为一个轻量化的全功能文本编辑器&#xff0c;由于其极强的…

一、QT的前世今

一、Qt是什么 1、Qt 是一个1991年由奇趣科技开发的跨平台C图形用户界面应用程序开发框架。它既可以开发GUI程序&#xff0c;也可用于开发非GUI程序&#xff0c;比如控制台工具和服务。 2、Qt是面向对象的框架&#xff0c;具有面向对象语言的特性&#xff1a;封装、继承、多态。…

短视频抖音文案策划创作运营手册资料大全

【干货资料持续更新&#xff0c;以防走丢】 短视频抖音文案策划创作运营手册资料大全 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 抖音运营资料合集&#xff08;完整资料包含以下内容&#xff09; 目录 制作短视频的四部曲 主题 主题是短视频脚本的基调…