openssl3.2 - 官方demo学习 - smime - smver.c

文章目录

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

openssl3.2 - 官方demo学习 - smime - smver.c

概述

对于签名文件(不管是单独签名, 还是联合签名), 都要用顶层证书进行验签(靠近根CA的证书)

读证书文件, 得到x509*, 添加到证书容器
读取签名密文, 得到pkcs7*和密文的bio
进行pkcs7验签, 并将验签得到的签名的明文写到文件.

笔记

/*!
\file smver.c
\note
openssl3.2 - 官方demo学习 - smime - smver.c
对于签名文件(不管是单独签名, 还是联合签名), 都要用顶层证书进行验签(靠近根CA的证书)读证书文件, 得到x509*, 添加到证书容器
读取签名密文, 得到pkcs7*和密文的bio
进行pkcs7验签, 并将验签得到的签名的明文写到文件.
*//** Copyright 2007-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/pkcs7.h>
#include <openssl/err.h>#include "my_openSSL_lib.h"int main(int argc, char **argv)
{BIO *_bio_in = NULL, *_bio_out = NULL, *_bio_t = NULL, *_bio_c = NULL;X509_STORE *_x509_store = NULL;X509 *_x509 = NULL;PKCS7 *_pkcs7 = NULL;int ret = EXIT_FAILURE;OpenSSL_add_all_algorithms();ERR_load_crypto_strings();/* Set up trusted CA certificate store */_x509_store = X509_STORE_new();if (_x509_store == NULL)goto err;/* Read in signer certificate and private key */_bio_t = BIO_new_file("cacert.pem", "r");if (_bio_t == NULL)goto err;_x509 = PEM_read_bio_X509(_bio_t, NULL, 0, NULL);if (_x509 == NULL)goto err;if (!X509_STORE_add_cert(_x509_store, _x509))goto err;/* Open content being signed */_bio_in = BIO_new_file("smout.txt", "r");if (_bio_in == NULL)goto err;/* Sign content */_pkcs7 = SMIME_read_PKCS7(_bio_in, &_bio_c);if (_pkcs7 == NULL)goto err;/* File to output verified content to */_bio_out = BIO_new_file("smver.txt", "w");if (_bio_out == NULL)goto err;if (!PKCS7_verify(_pkcs7, NULL, _x509_store, _bio_c, _bio_out, 0)) {fprintf(stderr, "Verification Failure\n");goto err;}fprintf(stderr, "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(_x509_store);PKCS7_free(_pkcs7);X509_free(_x509);BIO_free(_bio_in);BIO_free(_bio_out);BIO_free(_bio_t);return ret;
}

END

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

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

相关文章

LaTeX 多栏文档 Multiple columns如何插入图片并修改样式

在今天写报告的时候用到了 latex 的多栏列表&#xff0c;插入图片的时候感觉很无助 如果不喜欢让Latex自动安排图片位置&#xff0c;可以使用float包&#xff0c;然后可以使用\begin{figure}[H]。 记得提前导入这个包 \usepackage{float} 为了让我的图片的caption居中&#xf…

市面上常见硬盘分析及对比

固态硬盘 vs. 机械硬盘对比&#xff1a; 工作原理&#xff1a; 固态硬盘(SSD)&#xff1a; 使用非易失性存储器&#xff08;NAND闪存&#xff09;来存储数据&#xff0c;通过电子方式读写。机械硬盘(HDD)&#xff1a; 使用旋转的磁盘片和移动的磁头进行数据读写&#xff0c;依赖…

django电影推荐系统

电影推荐 启动 ./bin/pycharm.shdjango-admin startproject movie_recommendation_projectcd movie_recommendation_project/python manage.py movie_recommendation_apppython manage.py startapp movle_recommendation_applspython manage.py runserver Using the URLconf d…

Python多线程爬虫——数据分析项目实现详解

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言爬虫获取cookie网站爬取与启动CSDN爬虫爬虫启动将爬取内容存到文件中 多线程爬虫选择要爬取的用户 线程池 爬虫 爬虫是指一种自动化程序&#xff0c;能够模…

达梦数据库 忘记 SYSDBA 密码 处理方法

DM 提供数据库身份验证模式、基于操作系统的身份验证模式、外部身份验证模式和 UKEY 身份验证模式来保护对数据库访问的安全。数据库身份验证模式需要利用数据库口令&#xff0c; 即在创建或修改用户时指定用户口令&#xff0c;用户在登录时输入对应口令进行身份验证;基于操作 …

Kylin 安装novnc 远程访问

noVNC可以使用浏览器直接访问服务器&#xff0c;而不需要使用VNC客户端。 1.初始环境 关闭防火墙或允许IP访问本机 2.安装依赖 dnf install -y tigervnc-server git 3.git下载novnc git clone https://github.com/novnc/noVNC.git 4.配置信任证书 openssl req -new -x509 …

DEJA_VU3D - Cesium功能集 之 119-三维热力图

前言 编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小140个左右的功能,后续也会不断的追加,所以暂时打算一周2-3更的样子来更新本专栏(每篇博文都会奉上完整demo的源代码…

爬虫系列实战:使用json解析天气数据

大家好&#xff0c;爬虫是一项非常抢手的技能&#xff0c;收集、分析和清洗数据是数据科学项目中最重要的部分&#xff0c;本文介绍使用json解析气象局天气数据。 在官网上获取天气数据信息&#xff0c;可以定义当前查询的位置&#xff0c;提取时间、温度、湿度、气压、风速等…

RabbitMQ使用篇

☆* o(≧▽≦)o *☆嗨~我是小奥&#x1f379; &#x1f4c4;&#x1f4c4;&#x1f4c4;个人博客&#xff1a;小奥的博客 &#x1f4c4;&#x1f4c4;&#x1f4c4;CSDN&#xff1a;个人CSDN &#x1f4d9;&#x1f4d9;&#x1f4d9;Github&#xff1a;传送门 &#x1f4c5;&a…

(力扣记录)146. LRU 缓存

数据类型&#xff1a;链表 时间复杂度&#xff1a;O(1) 空间复杂度&#xff1a;O(N) 代码实现&#xff1a; class Node:def __init__(self, key-1, value-1):self.key keyself.val valueself.next Noneself.prev Noneclass LRUCache:def __init__(self, capacity: int)…

Django笔记(三):路由urls

首 Django中视图的作用是在链接与视图函数之间做映射。创建完Django项目后&#xff0c;同名文件夹下的urls.py为项目的总路由&#xff08;/project/project/urls.py&#xff09;&#xff1a; from django.contrib import admin from django.urls import pathurlpatterns [pa…

微信小程序带参数分享界面、打开界面加载分享内容

分享功能是微信小程序常用功能之一&#xff0c;带参分享和加载可以让分享对象打开界面时看到和分享内容。 带参分享 用户点击微信小程序右上角自带分享&#xff0c;或者点击自定义分享按钮进行分享时&#xff0c;可在onShareAppMessage函数定义分享行为。 分享界面路径可带参…

USB转SPI USB转IIC 串口转SPI串口转IIC SPI I2C模块

一款支持USB转SPI、USB转I2C、USB转GPIO、USB转PWM、USB转ADC的模块。提供上位机工具&#xff0c;开发协议。 资料下载&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1sw3RCMwjhrMO4qzUBq9bjA 提取码&#xff1a;qzjp 概述 串口转多协议模组为了客户调试一些功能…

PICO Developer Center 创建和调试 ADB 命令

PICO 开发者中心概览 ADB 是一个轻量级的 Android 调试桥(Android Debug Bridge&#xff0c;简称 ADB)&#xff0c;用于与 Android 设备进行通信和调试。ADB提供了许多有用的功能&#xff0c;使开发人员能够轻松地管理和调试设备上的应用程序。 你可以使用 PDC 工具来调试系统…

阿里云服务器4核8G配置收费标准及新老用户优惠价格整理

阿里云服务器4核8g配置云服务器u1价格是955.58元一年&#xff0c;4核8G配置还可以选择ECS计算型c7实例、计算型c8i实例、计算平衡增强型c6e、ECS经济型e实例、AMD计算型c8a等机型等ECS实例规格&#xff0c;规格不同性能不同&#xff0c;价格也不同&#xff0c;阿里云服务器网al…

openssl3.2 - 官方demo学习 - smime - smsign2.c

文章目录 openssl3.2 - 官方demo学习 - smime - smsign2.c概述笔记END openssl3.2 - 官方demo学习 - smime - smsign2.c 概述 PKCS7联合签名 从N张证书中, 分别得到N对(x509和私钥) 对明文进行签名(只是指定了bio_in和flag), 得到pkcs7* 对此pkcs7进行附加签名者的操作(指定证…

SparkSession对象操作--学习笔记

1,SparkSession对象操作 from pyspark.sql import SparkSessionfrom pyspark import SparkConffrom pyspark.sql import functions as F"""创建ss对象时可以指定一些参数如果参数在脚本中不生效&#xff0c;就需要通过saprk-submit指令中进行设置spark sql 的分…

使用 vsCode创建GO项目

最近回顾了一下go的使用&#xff1a;具体操作看下面的参考连接&#xff0c;下面只描述一些踩过的坑&#xff1a; 1. go安装配置 安装go->配置go环境变量 推荐官网下载&#xff0c;速度很快&#xff1b; 这里需要配置五个参数&#xff1a;GOPATH/GOROOT/Path、GO111MODULE/…

基于kubernetes部署MySQL主从环境

部署方式 通过部署mysql主从容器&#xff0c;配置主从pod之间数据同步。 配置数据库访问的密码 创建 Mysql 密码的 Secret [rootk8s-master1 master]# kubectl create secret generic mysql-password --namespaceapp --from-literalmysql_root_passwordroot secret/mysql-pas…

Vue2:给组件绑定自定义事件

一、场景描述 我们在页面开发中&#xff0c;难免要使用事件。 在之前的学习中&#xff0c;我们学过click、keyup、change等事件&#xff0c;这些是Vue自带的事件。 它一般是用在原生的HTML元素上的。在组件上使用需要加native修饰 比如&#xff1a; h1绑定一个click事件&…