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

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.lryc.cn/news/283876.html

相关文章:

  • Klocwork—符合功能安全要求的自动化静态测试工具
  • 运筹说 第56期 | 整数规划的数学模型割平面法
  • vue中内置指令v-model的作用和常见使用方法介绍以及在自定义组件上支持
  • 大模型推理引擎面试复习大纲
  • 网络安全 | 苹果承认 GPU 安全漏洞存在,iPhone 12、M2 MacBook Air 等受影响
  • C++ 数论相关题目(约数)
  • freeswitch on centos dockerfile模式
  • Hologres + Flink 流式湖仓建设
  • Linux粘滞位的理解,什么是粘滞位?
  • Stable Diffusion的结构要被淘汰了吗?详细解读谷歌最新大杀器VideoPoet
  • 深度学习与大数据推动下的自然语言处理革命
  • 产品经理必备之最强管理项目过程工具----禅道
  • 美易官方:贝莱德预计美联储将在6月份开始降息,欧洲央行紧随其后
  • 视觉检测系统:工厂生产零部件的智能检测
  • Spring事务的四大特性+事务的传播机制+隔离机制
  • 基于arcgis js api 4.x开发点聚合效果
  • 什么是DDOS高防ip?DDOS高防ip是怎么防护攻击的
  • 提示词工程: 大语言模型的Embedding(嵌入和Fine-tuning(微调)
  • rust获取本地外网ip地址的方法
  • 三、Sharding-JDBC系列03:自定义分片算法
  • 像操作本地文件一样操作linux文件 centos7环境下samba共享服务搭建详细教程
  • web块级如何居中,关于css/html居中问题
  • docker 部署 springboot 2.6.13 jar包流程笔记
  • rust跟我学二:模块编写与使用
  • 数据结构——Java实现栈和队列
  • 【状态压缩】【动态规划】【C++算法】691贴纸拼词
  • JavaEE之多线程编程:3. 线程的状态(易懂!)
  • Android13预装APP到data分区
  • Docker registry镜像仓库,私有仓库及harbor管理详解
  • 用 Rust 过程宏魔法简化 SQL 函数实现