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.rhkb.cn/news/237056.html

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

相关文章

如何在你的网站接入QQ登录?

文章目录 准备阶段申请QQ登录的权限创建应用最后上传qqlogin.php代码 准备阶段 国内服务器和备案域名需要你有张独一无二本人的身份证你正面手持身份证的图片一张100px*100px的网站图标 申请QQ登录的权限 首先访问qq互联&#xff0c;点击我直接访问 登陆完成后我们点击面的…

常用计算电磁学算法特性与电磁软件分析

常用计算电磁学算法特性与电磁软件分析 参考网站&#xff1a; 计算电磁学三大数值算法FDTD、FEM、MOM ADS、HFSS、CST 优缺点和应用范围详细教程 ## 基于时域有限差分法的FDTD的计算电磁学算法&#xff08;含Matlab代码&#xff09;-框架介绍 参考书籍&#xff1a;The finite…

代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II

代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II 文章目录 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II1 Le…

软件测试|教你使用Python绘制正多边形

简介 绘制正多边形是Python图形编程的基本任务之一。在本文中&#xff0c;我将为你提供一个使用Python绘制正多边形的详细教程&#xff0c;并提供一个示例代码。我们将使用Python的Turtle库来进行绘制。 步骤1&#xff1a;导入Turtle库 我们需要先安装好Python环境&#xff…

【信息安全】深度分析邮件安全及钓鱼攻击防范

本博文共计3100余字&#xff0c;预计需阅读20分钟 【邮件安全建设】 一、前言 邮件系统作为企业办公网络架构中重要的组成部分&#xff0c;同时也是业务高频使用的办公应用&#xff0c;一旦出现安全问题&#xff0c;业务将会被严重干扰甚至中断&#xff0c;本篇博客通过攻守两…

软件测试|Python数据可视化神器——pyecharts教程(十)

使用pyecharts绘制漏斗图 简介 漏斗图&#xff08;Funnel Chart&#xff09;是一种用于可视化数据流程或转化率的图表类型。它通常由一系列阶段组成&#xff0c;每个阶段都有一个名称和一个值&#xff0c;表示在该阶段的转化量或数据流程的进展情况。漏斗图的名称来源于其外观…

浅析五种 React 组件设计模式

作为一名 React 开发者&#xff0c;你可能会面临下面几个问题&#xff1a; 如何构建一个高复用度性的组件&#xff0c;使其适应不同的业务场景&#xff1f;如何构建一个具有简单 API的组件&#xff0c;使其易于使用&#xff1f;如何构建一个在 UI 和功能方面具有可扩展性的组件…

[C#]使用winform部署PP-MattingV2人像分割onnx模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleSeg 【算法介绍】 PP-MattingV2是一种先进的图像和视频抠图算法&#xff0c;由百度公司基于PaddlePaddle深度学习框架开发。它旨在提供更精准和高效的图像分割功能&#xff0c;特别是在处理图像中的细微部分&#xf…

set -e的作用

今天看人家代码看到一个很有意思的命令 后面我搜索了一下&#xff0c;感觉还是很好用的 set -e 是一个调试用的好东西 比如test.sh echo "执行第一个命令" cd /aaa/bbb echo "执行第二个命令"结果如下 可以看到第二个命令是执行了&#xff0c;虽然我的第…

利用C语言实现输出杨辉三角的前10行

杨辉三角的特点 第一列都为1&#xff0c;对角线为1 第x行第x列为1 第几行就有几个元素 从第三行开始,第二列的元素等于第二行的第一列元素第二列元素之和(排除从第三行开始的首和尾元素) //用C语言实现打印出10行杨辉三角 #include<stdio.h>int main(){int a[10][10];//…

使用RNN完成IMDB电影评论情感分析

使用RNN完成IMDB电影评论情感分析 任务描述一、环境设置二、数据准备2.1 参数设置2.2 用padding的方式对齐数据2.3 用Dataset与DataLoader加载三、模型配置四、模型训练五、模型评估六、模型预测 任务描述 本示例教程演示如何在IMDB数据集上使用RNN网络完成文本分类的任务。IM…

二极管限幅电路理论分析,工作原理+作用

一、限幅是什么意思&#xff1f; 限幅也就是&#xff0c;将电压限制在某个范围内&#xff0c;去除交流信号的一部分但不会对波形的剩余部分造成影响。通常来说&#xff0c;限幅电路主要是由二极管构成&#xff0c;波形的形状取决于电路的配置和设计。二、限幅电路工作原…

x-cmd pkg | busybox - 嵌入式 Linux 的瑞士军刀

目录 简介首次用户功能特点竞品和相关作品 进一步阅读 简介 busybox 是一个开源的轻量级工具集合&#xff0c;集成了一批最常用 Unix 工具命令&#xff0c;只需要几 MB 大小就能覆盖绝大多数用户在 Linux 的使用&#xff0c;能在多款 POSIX 环境的操作系统&#xff08;如 Linu…

Vulnhub靶机:driftingblues 3

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;driftingblues3&#xff08;10.0.2.19&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entr…

WebGL在实验室方向的应用

WebGL在实验室方向的应用涉及到实验过程的可视化、数据分析、模拟等方面。以下是一些WebGL在实验室领域的应用示例&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.分子模型和化学反应模拟&#xff…

D25XB80-ASEMI开关电源桥堆D25XB80

编辑&#xff1a;ll D25XB80-ASEMI开关电源桥堆D25XB80 型号&#xff1a;D25XB80 品牌&#xff1a;ASEMI 封装&#xff1a;GBJ-5&#xff08;带康铜丝&#xff09; 特性&#xff1a;插件、整流桥 平均正向整流电流&#xff08;Id&#xff09;&#xff1a;25A 最大反向击…

C++笔记

1.输入输出流 在C中要想输入和输出 我们会经常用到 #include <stdio.h>在C中头文件的命名风格不用.h #include <iostream>using namespace std;为什么要用上面俩句话的解释&#xff08;自己写的博客&#xff09; c中 为什么要写&#xff1c;iostream&#xff1e;…

数模学习day13-典型相关分析

典型相关分析&#xff08;Canonical Correlation analysis&#xff09; 研究两组变量&#xff08;每组变量中都可能有多个指标&#xff09;之间相关关系的一种多元统计方法。它能够揭示出两组变量之间的内在联系。 注&#xff1a;本文源于数学建模学习交流相关公众号观…

使用JGit拉取代码提示未授权not authorized

原因&#xff1a;2021年8月13日后不支持密码登录&#xff0c;需要使用token验证 调用时候需要先去git仓库创建个人令牌 需要在安全中心创建个人token&#xff0c;使用token名称作为账号&#xff0c;使用token作为密码。 另&#xff1a; Github克隆仓库的三种方式对比&#xff…

哪里能找到好用的PPT模板?12个免费模板网站让你畅快办公!

你是否有过这样的经历&#xff0c;在准备重要会议或者演讲的时候&#xff0c;为找不到合适的PPT模板而困扰&#xff1f;或是在网上漫无目的地搜寻&#xff0c;结果收获的是设计平淡无奇的PPT模板&#xff1f; 如果你有同样的疑问&#xff0c;那么你来对地方了&#xff01;在这…