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

文章目录

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

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

概述

从证书中得到X509*和私钥指针
用证书和私钥对铭文进行签名, 得到签名后的pkcs7指针
将pkcs7指向的bio_in, 写为MIME格式的签名密文

BIO_reset() 可以将一个bio恢复到刚打开的状态(应该就是将文件指针重新指向文件头部), 一般用于只读打开的场景
经常用于多个对象要操作同一个bio的场景(一先一后的操作).

笔记

/*!
\file smsign.c
\note 
openssl3.2 - 官方demo学习 - smime - smsign.c从证书中得到X509*和私钥指针
用证书和私钥对铭文进行签名, 得到签名后的pkcs7指针
将pkcs7指向的bio_in, 写为MIME格式的签名密文BIO_reset() 可以将一个bio恢复到刚打开的状态(应该就是将文件指针重新指向文件头部), 一般用于只读打开的场景
经常用于多个对象要操作同一个bio的场景(一先一后的操作).
*//** 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 signing 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;X509 *_x509 = NULL;EVP_PKEY *_evp_pkey = NULL;PKCS7 *_pkcs7 = NULL;int ret = EXIT_FAILURE;/** For simple S/MIME signing use PKCS7_DETACHED. On OpenSSL 0.9.9 only:* for streaming detached set PKCS7_DETACHED|PKCS7_STREAM for streaming* non-detached set PKCS7_STREAM*/int flags = PKCS7_DETACHED | PKCS7_STREAM;OpenSSL_add_all_algorithms();ERR_load_crypto_strings();/* Read in signer certificate and private key */_bio_t = BIO_new_file("signer.pem", "r");if (!_bio_t)goto err;_x509 = PEM_read_bio_X509(_bio_t, NULL, 0, NULL);BIO_reset(_bio_t);_evp_pkey = PEM_read_bio_PrivateKey(_bio_t, NULL, 0, NULL);if (!_x509 || !_evp_pkey)goto err;/* Open content being signed */_bio_in = BIO_new_file("sign.txt", "r");if (!_bio_in)goto err;/* Sign content */_pkcs7 = PKCS7_sign(_x509, _evp_pkey, NULL, _bio_in, flags);if (!_pkcs7)goto err;_bio_out = BIO_new_file("smout.txt", "w");if (!_bio_out)goto err;if (!(flags & PKCS7_STREAM))BIO_reset(_bio_in);/* Write out S/MIME message */if (!SMIME_write_PKCS7(_bio_out, _pkcs7, _bio_in, flags))goto err;ret = EXIT_SUCCESS;err:if (ret != EXIT_SUCCESS) {fprintf(stderr, "Error Signing Data\n");ERR_print_errors_fp(stderr);}PKCS7_free(_pkcs7);X509_free(_x509);EVP_PKEY_free(_evp_pkey);BIO_free(_bio_in);BIO_free(_bio_out);BIO_free(_bio_t);return ret;}

END

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

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

相关文章

【Linux系列】在Pop!OS的启动器中添加自定义程序图标

文章目录 前言一、创建快捷方式二、快捷方式参数三、添加右键菜单和注册MIME 前言 无论是在Windows上&#xff0c;还是Linux&#xff0c;或者安卓这些我们常用的操作系统上&#xff0c;一些应用程序的快捷方式放在桌面或者启动器&#xff0c;只需要简单的点击就可以启动&#…

ABAP IDOC 2 XML

有个需求&#xff0c;外围系统希望我们给到一个IDOC 记录的样例&#xff0c;但是我们we02中并无法看到 就找了一个demo去直接展示IDOC内容 *&---------------------------------------------------------------------* *& Report Z_IDOC_TO_XML *&------------…

【性能调优】local模式下flink处理离线任务能力分析

文章目录 一. flink的内存管理1.Jobmanager的内存模型2.TaskManager的内存模型2.1. 模型说明2.2. 通讯、数据传输方面2.3. 框架、任务堆外内存2.4. 托管内存 3.任务分析 二. 单个节点的带宽瓶颈1. 带宽相关理论2. 使用speedtest-cli 测试带宽3. 任务分析3. 其他工具使用介绍 本…

定制数据采集分析系统——为实现工业物联打下坚实基础

在这个工业4.0或者“工业互联网”的大背景下&#xff0c;工业物联网成为数字化转型中心舞台的一部分。数据是相关产品中的关键资产和生产资料&#xff0c;且在全球连接的产品(在整个生命周期中)的应用分析中是必不可少的功能。 工业物联网是将具有感知、监控能力的各类采集、控…

MAC相关

MAC地址&#xff0c;英文全称Medium Access Control&#xff0c;直译为介质访问控制&#xff0c;它通常被固化在每个以太网网卡&#xff08;NIC,Network Interface Card&#xff09;。MAC&#xff08;硬件&#xff09;地址长48位&#xff08;6字节&#xff09;&#xff0c;采用…

#LLMOps##AIGC# Dify_构建本地知识库问答应用-生成Al应用的创新引擎 用于构建助手API和GPT的开源开发平台

github&#xff1a; https://github.com/langgenius/dify/blob/main/README_CN.md 介绍文档&#xff1a;https://docs.dify.ai/getting-started/readme Dify 介绍 Dify 笔记 Dify 是什么&#xff1f; 开源的大语言模型&#xff08;LLM&#xff09;应用开发平台融合了后端即服…

MySQL 8.0中引入的选项和变量(五)

以下是在MySQL 8.0中新增的系统变量、状态变量和服务选项&#xff1a; • innodb_scan_directories: 定义在InnoDB恢复过程中扫描的表空间文件的目录。MySQL 8.0.2中添加。 • innodb_segment_reserve_factor: 作为空页保留的表空间文件段页面的百分比。MySQL 8.0.26中添加。 …

c语言出现打印烫烫烫烫烫烫问题

系列文章目录 c语言出现打印烫烫烫烫烫烫问题 c语言出现打印烫烫烫烫烫烫问题 系列文章目录一、报错现象二、原因三、解决方法 一、报错现象 二、原因 字符数组初始化用这种方式初始化 %s是以字符串打印&#xff0c;获取是地址&#xff0c;%s会接受字符串结束标志[‘\0’]之前的…

改善python程序的91建议记录(学习记录)

使用else子句简化循环&#xff08;异常处理&#xff09; 案例1 执行sql异常时处理 def save(db, obj):try:# save attr1db.execute(a sql stmt, obj.attr1)# save attr2db.execute(another sql stmt, obj.attr2)except DBError:db.rollback()else:db.commit()案例2 def prin…

阿里云 linux Centos7 安装 Miniconda3 + 创建Python环境

1.下载miniconda &#xff08;1&#xff09;法一&#xff1a;可以去下载清华源的miniconda镜像源&#xff0c;选择自己需要的版本&#xff0c;然后上传到Linux服务器上&#xff0c;linux上使用请选择linux版本&#xff0c;如下&#xff1a; &#xff08;2&#xff09;法二&…

C //练习 7-8 编写一个程序,以打印一个文件集合,每个文件从新的一页开始打印,并且打印每个文件相应的标题和页数。

C程序设计语言 &#xff08;第二版&#xff09; 练习 7-8 练习 7-8 编写一个程序&#xff0c;以打印一个文件集合&#xff0c;每个文件从新的一页开始打印&#xff0c;并且打印每个文件相应的标题和页数。 注意&#xff1a;代码在win32控制台运行&#xff0c;在不同的IDE环境…

日志项目1

文章目录 【C - 基于多设计模式下的同步&异步日志系统】项目介绍 前置技术1. 项目介绍2. 开发环境3. 核心技术4. 环境搭建5. 日志系统介绍5.1 为什么需要日志系统5.2 日志系统技术实现5.2.1 同步写日志5.2.2 异步写日志 6. 前置技术补充6.1 不定参函数6.1.1 不定参宏函数6…

24年地信专业各大院校,考研真题合集

2024年云南师范大学人文地理学考研真题 一、简答题 1. 人文地理学科的任务 2. 文化生态关系的类型与特点人口出生率低的影响因素现代农业的类型与特点 3. 发展中国家工业发展中存在的问题 二、分析题 1. 结合实例说明城市地域结构模型及主要动力 2. 结合实例论述区域协作组织对…

【送酒小程序系统源码】/花店送花系统/蛋糕店系统/奶茶店系统源码

前端uniapp后端thinkphp数据库mysql 多门店外卖餐饮点餐系统预约点餐 匹配附近店铺 堂食 外卖带走 菜品管理. 根据用户的位置匹配附近饭店 点餐后,可以在线等叫号 餐时输入手机号并支付后,可以支持外 支持多规格、备注等快捷功能,以吸多 多门店管理 数据概览 支持微…

克魔助手工具详解、数据包抓取分析、使用教程

目录 摘要 引言 克魔助手界面 克魔助手查看数据捕获列表 数据包解析窗口 数据包数据窗口 克魔助手过滤器表达式的规则 抓包过滤器实例 总结 参考资料 摘要 本文介绍了克魔助手工具的界面和功能&#xff0c;包括数据包的捕获和分析&#xff0c;以及抓包过滤器的使用方…

第7章 现代电信业务

文章目录 一、电信业务概述 1.电信业务的定义 1.1 业界给出的定义 (1)电信管理论坛对业务的定义 电信管理论坛(TMF)对电信业务做了如下的定义&#xff1a;电信业务是以电信基础设施为核心&#xff0c;表明网络“能做什么”&#xff0c;属于一定功能的独立元素。电信业务可以单…

How to build a localized sdkman mirror service

How to build a localized sdkman mirror service 概述想法 概述 从官方给出的安装说明&#xff0c;我们可以知道&#xff0c;官方给出的安装脚本是基于脚本https://get.sdkman.io/进行安装的&#xff0c;下面是该脚本的全部内容。 #!/bin/bash # # Copyright 2017 Marco V…

HarmonyOS—构建第一个ArkTS应用(Stage模型)

创建ArkTS工程 构建第一个页面 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。选择Application应用开发&#xff0c;选择模板“Empty Ability”&am…

写点东西《什么是网络抓取?》

写点东西《什么是网络抓取&#xff1f;》 什么是网络抓取&#xff1f; 网络抓取合法吗&#xff1f; 什么是网络爬虫&#xff0c;它是如何工作的&#xff1f; 网络爬虫示例 网络抓取工具 结论 您是否曾经想同时比较多个网站上同一件商品的价格&#xff1f;或者自动提取您最喜欢的…

Java-NIO 开篇(1)

NIO简介 高性能的Java通信&#xff0c;离不开Java NIO组件&#xff0c;现在主流的技术框架或中间件服务器&#xff0c;都使用了Java NIO组件&#xff0c;譬如Tomcat、 Jetty、 Netty、Redis、RabbitMQ等的网络通信模块。在1.4版本之前&#xff0c; Java IO类库是阻塞式IO&…