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

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

文章目录

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

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

概述

CMS消息签名

笔记

/*! \file cms_sign.c
\note openssl3.2 - 官方demo学习 - cms - cms_sign.c
CMS消息签名
*//** 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 signing example */
#include <openssl/pem.h>
#include <openssl/cms.h>
#include <openssl/err.h>#include "my_openSSL_lib.h"int main(int argc, char **argv)
{BIO *in = NULL, *out = NULL, *tbio = NULL;X509 *scert = NULL;EVP_PKEY *skey = NULL;CMS_ContentInfo *cms = NULL;int ret = EXIT_FAILURE;/** For simple S/MIME signing use CMS_DETACHED. On OpenSSL 1.0.0 only: for* streaming detached set CMS_DETACHED|CMS_STREAM for streaming* non-detached set CMS_STREAM*/int flags = CMS_DETACHED | CMS_STREAM;OpenSSL_add_all_algorithms();ERR_load_crypto_strings();/* Read in signer certificate and private key */tbio = BIO_new_file("signer.pem", "r");if (!tbio)goto err;scert = PEM_read_bio_X509(tbio, NULL, 0, NULL);BIO_reset(tbio);skey = PEM_read_bio_PrivateKey(tbio, NULL, 0, NULL);if (!scert || !skey)goto err;/* Open content being signed */in = BIO_new_file("sign.txt", "r");if (!in)goto err;/* Sign content */cms = CMS_sign(scert, skey, NULL, in, flags);if (!cms)goto err;out = BIO_new_file("smout.txt", "w");if (!out)goto err;if (!(flags & CMS_STREAM))BIO_reset(in);/* Write out S/MIME message */if (!SMIME_write_CMS(out, cms, in, flags))goto err;ret = EXIT_SUCCESS;err:if (ret != EXIT_SUCCESS) {fprintf(stderr, "Error Signing Data\n");ERR_print_errors_fp(stderr);}CMS_ContentInfo_free(cms);X509_free(scert);EVP_PKEY_free(skey);BIO_free(in);BIO_free(out);BIO_free(tbio);return ret;
}

END

相关文章:

  • Python数据的验证
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux网络编程第一天-socket编程练习(物联技术666)
  • DCP文件传输的重要性与应用
  • GNU Tools使用笔记
  • 初识 Elasticsearch 应用知识,一文读懂 Elasticsearch 知识文集(1)
  • [足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-8 状态观测器设计 Linear Observer Design
  • K8S的存储卷---数据卷
  • 物流实时数仓DWD层——1.准备工作
  • 管理软件供应链中网络安全工具蔓延的三种方法
  • Nacos和Eureka比较、统一配置管理、Nacos热更新、多环境配置共享、Nacos集群搭建步骤
  • 14、强化学习Soft Actor-Critic算法:推导、理解与实战
  • Python Flask教程
  • MyBatisPlus
  • Vue中v-if与v-show区别详解
  • rke2 Online Deploy Rancher v2.8.0 latest (helm 在线部署 rancher v2.8.0)
  • 【React系列】如何构建React应用程序
  • android图片蒙层
  • IP路由与转发
  • JavaWeb(学习笔记二)
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 从输入URL到页面加载发生了什么
  • 第2章 网络文档
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端知识点整理(待续)
  • 十年未变!安全,谁之责?(下)
  • 什么是Javascript函数节流?
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 系统认识JavaScript正则表达式
  • 再次简单明了总结flex布局,一看就懂...
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​iOS安全加固方法及实现
  • ​第20课 在Android Native开发中加入新的C++类
  • #pragma 指令
  • $.ajax,axios,fetch三种ajax请求的区别
  • (1)(1.13) SiK无线电高级配置(六)
  • (2)nginx 安装、启停
  • (4)Elastix图像配准:3D图像
  • (javascript)再说document.body.scrollTop的使用问题
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (一) storm的集群安装与配置
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .CSS-hover 的解释
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .net反混淆脱壳工具de4dot的使用
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @Mapper作用
  • @RequestBody与@ModelAttribute
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)