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

openssl3.2 - 测试程序的学习 - test\aesgcmtest.c

文章目录

    • openssl3.2 - 测试程序的学习 - test\aesgcmtest.c
    • 概述
    • 笔记
    • 能学到的流程性内容
    • END

openssl3.2 - 测试程序的学习 - test\aesgcmtest.c

概述

openssl3.2 - 测试程序的学习
aesgcmtest.c 工程搭建时, 发现没有提供 test_get_options(), cleanup_tests(), 需要自己补上才能编译过.

笔记

在这里插入图片描述

/*!
* \fle D:\my_dev\my_local_git_prj\study\openSSL\nmake_test\test_c\prj_004_aesgcmtest.c\aesgcmtest.c 
//** Copyright 2019-2021 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*/#include "my_openSSL_lib.h"#include <openssl/evp.h>// 最少要包含测试工具的头文件
#include "testutil.h"// openssl提供的.\test\*.c, 有的没有test_get_options(), cleanup_tests()
// 自己补充函数, 编译过就行, 不管内存泄漏了// 需要将其他实现中的enum定义拷贝过来
typedef enum OPTION_choice {OPT_ERR = -1,OPT_EOF = 0,OPT_CONFIG_FILE,OPT_TEST_ENUM
} OPTION_CHOICE;const OPTIONS* test_get_options(void)
{// 这个函数返回不能为空, 从其他有实现的函数中拷贝一个实现过来, 否则有崩溃报错static const OPTIONS test_options[] = {OPT_TEST_OPTIONS_DEFAULT_USAGE,{ "config", OPT_CONFIG_FILE, '<',"The configuration file to use for the libctx" },{ NULL }};return test_options;
}void cleanup_tests(void)
{}static const unsigned char gcm_key[] = {0xee, 0xbc, 0x1f, 0x57, 0x48, 0x7f, 0x51, 0x92, 0x1c, 0x04, 0x65, 0x66,0x5f, 0x8a, 0xe6, 0xd1, 0x65, 0x8b, 0xb2, 0x6d, 0xe6, 0xf8, 0xa0, 0x69,0xa3, 0x52, 0x02, 0x93, 0xa5, 0x72, 0x07, 0x8f
};
static const unsigned char gcm_iv[] = {0x99, 0xaa, 0x3e, 0x68, 0xed, 0x81, 0x73, 0xa0, 0xee, 0xd0, 0x66, 0x84
};
static const unsigned char gcm_pt[] = {0xf5, 0x6e, 0x87, 0x05, 0x5b, 0xc3, 0x2d, 0x0e, 0xeb, 0x31, 0xb2, 0xea,0xcc, 0x2b, 0xf2, 0xa5
};
static const unsigned char gcm_aad[] = {0x4d, 0x23, 0xc3, 0xce, 0xc3, 0x34, 0xb4, 0x9b, 0xdb, 0x37, 0x0c, 0x43,0x7f, 0xec, 0x78, 0xde
};
static const unsigned char gcm_ct[] = {0xf7, 0x26, 0x44, 0x13, 0xa8, 0x4c, 0x0e, 0x7c, 0xd5, 0x36, 0x86, 0x7e,0xb9, 0xf2, 0x17, 0x36
};
static const unsigned char gcm_tag[] = {0x67, 0xba, 0x05, 0x10, 0x26, 0x2a, 0xe4, 0x87, 0xd7, 0x37, 0xee, 0x62,0x98, 0xf7, 0x7e, 0x0c
};static int do_encrypt(unsigned char *iv_gen, unsigned char *ct, int *ct_len,unsigned char *tag, int *tag_len)
{int ret = 0;EVP_CIPHER_CTX *ctx = NULL;int outlen;unsigned char outbuf[64];*tag_len = 16;ret = TEST_ptr(ctx = EVP_CIPHER_CTX_new())&& TEST_true(EVP_EncryptInit_ex(ctx, EVP_aes_256_gcm(), NULL, NULL,NULL) > 0)&& TEST_true(EVP_EncryptInit_ex(ctx, NULL, NULL, gcm_key,iv_gen != NULL ? NULL : gcm_iv) > 0)&& TEST_true(EVP_EncryptUpdate(ctx, NULL, &outlen, gcm_aad,sizeof(gcm_aad)) > 0)&& TEST_true(EVP_EncryptUpdate(ctx, ct, ct_len, gcm_pt,sizeof(gcm_pt)) > 0)&& TEST_true(EVP_EncryptFinal_ex(ctx, outbuf, &outlen) > 0)&& TEST_int_eq(EVP_CIPHER_CTX_get_tag_length(ctx), 16)&& TEST_true(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, 16,tag) > 0)&& TEST_true(iv_gen == NULL|| EVP_CIPHER_CTX_get_original_iv(ctx, iv_gen, 12));EVP_CIPHER_CTX_free(ctx);return ret;
}static int do_decrypt(const unsigned char *iv, const unsigned char *ct,int ct_len, const unsigned char *tag, int tag_len)
{int ret = 0;EVP_CIPHER_CTX *ctx = NULL;int outlen, ptlen;unsigned char pt[32];unsigned char outbuf[32];ret = TEST_ptr(ctx = EVP_CIPHER_CTX_new())&& TEST_true(EVP_DecryptInit_ex(ctx, EVP_aes_256_gcm(), NULL,NULL, NULL) > 0)&& TEST_true(EVP_DecryptInit_ex(ctx, NULL, NULL, gcm_key, iv) > 0)&& TEST_int_eq(EVP_CIPHER_CTX_get_tag_length(ctx), 16)&& TEST_true(EVP_DecryptUpdate(ctx, NULL, &outlen, gcm_aad,sizeof(gcm_aad)) > 0)&& TEST_true(EVP_DecryptUpdate(ctx, pt, &ptlen, ct,ct_len) > 0)&& TEST_true(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG,tag_len, (void *)tag) > 0)&& TEST_true(EVP_DecryptFinal_ex(ctx, outbuf, &outlen) > 0)&& TEST_mem_eq(gcm_pt, sizeof(gcm_pt), pt, ptlen);EVP_CIPHER_CTX_free(ctx);return ret;
}static int kat_test(void)
{unsigned char tag[32];unsigned char ct[32];int ctlen = 0, taglen = 0;return do_encrypt(NULL, ct, &ctlen, tag, &taglen)&& TEST_mem_eq(gcm_ct, sizeof(gcm_ct), ct, ctlen)&& TEST_mem_eq(gcm_tag, sizeof(gcm_tag), tag, taglen)&& do_decrypt(gcm_iv, ct, ctlen, tag, taglen);
}static int badkeylen_test(void)
{int ret;EVP_CIPHER_CTX *ctx = NULL;const EVP_CIPHER *cipher;ret = TEST_ptr(cipher = EVP_aes_192_gcm())&& TEST_ptr(ctx = EVP_CIPHER_CTX_new())&& TEST_true(EVP_EncryptInit_ex(ctx, cipher, NULL, NULL, NULL))&& TEST_int_le(EVP_CIPHER_CTX_set_key_length(ctx, 2), 0);EVP_CIPHER_CTX_free(ctx);return ret;
}static int ivgen_test(void)
{unsigned char iv_gen[16];unsigned char tag[32];unsigned char ct[32];int ctlen = 0, taglen = 0;return do_encrypt(iv_gen, ct, &ctlen, tag, &taglen)&& do_decrypt(iv_gen, ct, ctlen, tag, taglen);
}int setup_tests(void)
{ADD_TEST(kat_test);ADD_TEST(badkeylen_test);ADD_TEST(ivgen_test);return 1;
}

能学到的流程性内容

do_encrypt()
do_decrypt()
这官方测试代码, 如果只看流程性的内容, 比网上找到的代码片段规范多了.

END

相关文章:

openssl3.2 - 测试程序的学习 - test\aesgcmtest.c

文章目录 openssl3.2 - 测试程序的学习 - test\aesgcmtest.c概述笔记能学到的流程性内容END openssl3.2 - 测试程序的学习 - test\aesgcmtest.c 概述 openssl3.2 - 测试程序的学习 aesgcmtest.c 工程搭建时, 发现没有提供 test_get_options(), cleanup_tests(), 需要自己补上…...

C语言——操作符详解2

目录 0.过渡0.1 不创建临时变量&#xff0c;交换两数0.2 求整数转成二进制后1的总数 1.单目表达式2. 逗号表达式3. 下标访问[ ]、函数调用( )3.1 下标访问[ ]3.2 函数调用( ) 4. 结构体成员访问操作符4.1 结构体4.1.1 结构体的申明4.1.2 结构体变量的定义和初始化 4.2 结构体成…...

(免费领源码)java#Springboot#mysql旅游景点订票系统68524-计算机毕业设计项目选题推荐

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…...

帝国cms7.5 支付升级优化版文库范文自动生成word/PDF文档付费复制下载带支付系统会员中心整站模板源码sitemap百度推送+安装教程

帝国cms7.5 支付升级优化版文库范文自动生成word/PDF文档付费复制下载带支付系统会员中心整站模板源码sitemap百度推送+安装教程 (购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不…...

【node】关于npm、yarn、npx的区别与使用

文章目录 npm (Node Package Manager):安装依赖运行脚本 npx:执行项目依赖中的命令 yarn:安装依赖eg.使用npx yarn install 的作用 npm (Node Package Manager): 用途&#xff1a; npm 是 Node.js 官方提供的包管理工具&#xff0c;用于安装、管理和分享 JavaScript 代码包。安…...

力扣0099——恢复二叉搜索树

恢复二叉搜索树 难度&#xff1a;中等 题目描述 给你二叉搜索树的根节点 root &#xff0c;该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下&#xff0c;恢复这棵树 。 示例1 输入&#xff1a; root [1,3,null,null,2] 输出&#xff1a;[3,1,null,nul…...

机器学习核心算法

目录 逻辑回归 算法原理 决策树 决策树算法概述 树的组成 决策树的训练与测试 切分特征 衡量标准--熵 信息增益 决策树构造实例 连续值问题解决 预剪枝方法 分类与回归问题解决 决策树解决分类问题步骤 决策树解决回归问题步骤 决策树代码实例 集成算法 Baggi…...

libjsoncpp 的编译和交叉编译

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

【Unity美术】如何用3DsMax做一个水桶模型

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…...

如何用一根网线和51单片机做简单门禁[带破解器]

仓库:https://github.com/MartinxMax/Simple_Door 支持原创是您给我的最大动力… 原理 -基础设备代码程序- -Arduino爆破器程序 or 51爆破器程序- 任意选一个都可以用… —Arduino带TFT屏幕——— —51带LCD1602——— 基础设备的最大密码长度是0x7F&#xff0c;因为有一位…...

在 VUE 项目中,使用 Axios 请求数据时,提示跨域,该怎么解决?

在 VUE 项目开发时&#xff0c;遇到个问题&#xff0c;正常设置使用 Axios 库请求数据时&#xff0c;报错提示跨域问题。 那在生产坏境下&#xff0c;该去怎么解决呢&#xff1f; 其可以通过以下几种方式去尝试解决&#xff1a; 1、设置允许跨域请求的响应头 1.1 在响应头中…...

1.【Vue3】前端开发引入、Vue 简介

1. 前端开发引入 1.1 前端开发前置知识 通过之前的学习&#xff0c;已经通过 SpringBoot 和一些三方技术完成了大事件项目的后端开发。接下来开始学习大事件项目的前端开发&#xff0c;前端部分借助两个框架实现&#xff1a; Vue3&#xff08;一个 JS 框架&#xff09;基于 …...

一起学习ETCD系列——运维操作之etcdctl使用

文章目录 概要一、命令二、实操2.1、基本操作2.2、watch2.3、租约2.4、分布式锁2.5、角色2.6、用户2.7、认证2.8、集群 概要 本文主要用来总结ETCD客户端ctcdctl的命令操作&#xff0c;在运维过程中可能常常用到的。 一、命令 etcd工具 etcdctl官方命令示例 [roottest etcd…...

Spring Security 存储密码之 JDBC

Spring Security的JdbcDaoImpl实现了UserDetailsService接口,通过使用JDBC提供支持基于用户名和密码的身份验证。 JdbcUserDetailsManager扩展了JdbcDaoImpl,通过UserDetailsManager接口提供UserDetails的管理功能。 当Spring Security配置为接受用户名/密码进行身份验证时,…...

第3章-python深度学习——(波斯美女)

第3章 神经网络入门 本章包括以下内容&#xff1a; 神经网络的核心组件 Keras 简介 建立深度学习工作站 使用神经网络解决基本的分类问题与回归问题 本章的目的是让你开始用神经网络来解决实际问题。你将进一步巩固在第 2 章第一个示例中学到的知识&#xff0c;还会将学到的…...

蓝桥杯备战——4.继电器/蜂鸣器

1.分析原理图 最好自己先去查查138以及ULN2003的使用方法&#xff0c;我这里直接讲思路。 由上图我们可以看到如果138输入ABC101,则输出Y50,此时若WR通过跳线帽接地则Y5C1 &#xff0c;于是573(U9)处于输出跟随输入P0状态&#xff0c;此时若P061&#xff0c;则573输出Q71&am…...

Redis高级特性之地理空间索引

Redis的地理空间索引是一种功能强大的工具&#xff0c;用于存储和查询地理空间数据。这个特性主要通过Redis的地理空间数据类型 - GeoSet&#xff08;地理集合&#xff09;来实现。在这篇文章中&#xff0c;我们将探索Redis地理空间数据类型的使用和应用。 1. Redis GeoSet 简…...

R语言【taxlist】——as():将 taxlist 对象强制转换为 list 对象

Package taxlist version 0.2.4 Description 可以应用 S4 对象到 list 对象的强制转换来探索它们的内容&#xff0c;避免由它们的验证引起的错误。 Usage S4_to_list(x) Argument 参数【x】&#xff1a;一个 taxlist 类对象或任意 S4 类。 Details 将 taxlist 对象强制转换…...

使用POI生成word文档的table表格

文章目录 使用POI生成word文档的table表格1. 引入maven依赖2. 生成table的两种方式介绍2.1 生成一行一列的table2.2 生成固定行列的table2.3 table合并列2.4 创建多个table存在的问题 使用POI生成word文档的table表格 1. 引入maven依赖 <dependency><groupId>org.…...

C# 继承、多态性、抽象和接口详解:从入门到精通

C# 继承 在 C# 中&#xff0c;可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类&#xff1a; 派生类&#xff08;子类&#xff09; - 从另一个类继承的类基类&#xff08;父类&#xff09; - 被继承的类 要从一个类继承&#xff0c;使用 : 符号。 在以…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...