openssl3.2 - 测试程序的学习

文章目录

    • openssl3.2 - 测试程序的学习
    • 概述
    • 笔记
    • openssl3.2 - 测试程序的学习 - test\aborttest.c
    • openssl3.2 - 测试程序的学习 - test\sanitytest.c
    • openssl3.2 - 测试程序的学习 - test\acvp_test.c
    • openssl3.2 - 测试程序的学习 - test\aesgcmtest.c
    • END

openssl3.2 - 测试程序的学习

概述

namke test时, 记录日志.

nmake test > nmake_test_log.txt

可以看到生成了很多测试程序.

	"link" /nologo /debug setargv.obj /subsystem:console /opt:ref  /nologo /debug @C:\Users\chenx\AppData\Local\Temp\nmCACF.tmp
	IF EXIST test\x509_test.exe.manifest  "mt" -nologo -manifest test\x509_test.exe.manifest -outputresource:test\x509_test.exe
	IF EXIST test\x509_time_test.exe.manifest DEL /F /Q test\x509_time_test.exe.manifest
	"link" /nologo /debug setargv.obj /subsystem:console /opt:ref  /nologo /debug @C:\Users\chenx\AppData\Local\Temp\nmCC66.tmp
	IF EXIST test\x509_time_test.exe.manifest  "mt" -nologo -manifest test\x509_time_test.exe.manifest -outputresource:test\x509_time_test.exe
	IF EXIST test\x509aux.exe.manifest DEL /F /Q test\x509aux.exe.manifest
	"link" /nologo /debug setargv.obj /subsystem:console /opt:ref  /nologo /debug @C:\Users\chenx\AppData\Local\Temp\nmCD90.tmp
	IF EXIST test\x509aux.exe.manifest  "mt" -nologo -manifest test\x509aux.exe.manifest -outputresource:test\x509aux.exe
	IF EXIST engines\capi.dll.manifest DEL /F /Q engines\capi.dll.manifest
	cmd /C ""link" /nologo /debug /dll  /nologo /debug @C:\Users\chenx\AppData\Local\Temp\nmCEAB.tmp || (DEL /Q capi.* engines\capi.* & EXIT 1)"
	IF EXIST engines\capi.dll.manifest  "mt" -nologo -manifest engines\capi.dll.manifest -outputresource:engines\capi.dll
	IF EXIST engines\dasync.dll.manifest DEL /F /Q engines\dasync.dll.manifest
	cmd /C ""link" /nologo /debug /dll  /nologo /debug @C:\Users\chenx\AppData\Local\Temp\nmD003.tmp || (DEL /Q dasync.* engines\dasync.* & EXIT 1)"
	IF EXIST engines\dasync.dll.manifest  "mt" -nologo -manifest engines\dasync.dll.manifest -outputresource:engines\dasync.dll
	IF EXIST engines\loader_attic.dll.manifest DEL /F /Q engines\loader_attic.dll.manifest
	cmd /C ""link" /nologo /debug /dll  /nologo /debug @C:\Users\chenx\AppData\Local\Temp\nmD7D4.tmp || (DEL /Q loader_attic.* engines\loader_attic.* & EXIT 1)"
	IF EXIST engines\loader_attic.dll.manifest  "mt" -nologo -manifest engines\loader_attic.dll.manifest -outputresource:engines\loader_attic.dll
	IF EXIST engines\ossltest.dll.manifest DEL /F /Q engines\ossltest.dll.manifest
	cmd /C ""link" /nologo /debug /dll  /nologo /debug @C:\Users\chenx\AppData\Local\Temp\nmD9AA.tmp || (DEL /Q ossltest.* engines\ossltest.* & EXIT 1)"
	IF EXIST engines\ossltest.dll.manifest  "mt" -nologo -manifest engines\ossltest.dll.manifest -outputresource:engines\ossltest.dll
	IF EXIST engines\padlock.dll.manifest DEL /F /Q engines\padlock.dll.manifest
	cmd /C ""link" /nologo /debug /dll  /nologo /debug @C:\Users\chenx\AppData\Local\Temp\nmDAF3.tmp || (DEL /Q padlock.* engines\padlock.* & EXIT 1)"
	IF EXIST engines\padlock.dll.manifest  "mt" -nologo -manifest engines\padlock.dll.manifest -outputresource:engines\padlock.dll
	IF EXIST providers\legacy.dll.manifest DEL /F /Q providers\legacy.dll.manifest
	cmd /C ""link" /nologo /debug /dll  /nologo /debug @C:\Users\chenx\AppData\Local\Temp\nmE18C.tmp || (DEL /Q legacy.* providers\legacy.* & EXIT 1)"
	IF EXIST providers\legacy.dll.manifest  "mt" -nologo -manifest providers\legacy.dll.manifest -outputresource:providers\legacy.dll
	cmd /C "set "SRCTOP=." & set "BLDTOP=." & set "PERL=C:\Perl\bin\perl.exe" & set "FIPSKEY=f4556650ac31d35461610bac4ed81b1a181b2d8a43ea2854cbae22ca74560813" & "C:\Perl\bin\perl.exe" ".\test\run_tests.pl" "
00-prep_fipsmodule_cnf.t .. skipped: FIPS module config file only supported in a fips build
Files=1, Tests=0,  0 wallclock secs ( 0.02 usr +  0.00 sys =  0.02 CPU)
Result: NOTESTS
01-test_abort.t ......................... ok
01-test_fipsmodule_cnf.t ................ skipped: Test only supported in a fips build

测试脚本是用perl写的, 挺复杂的. 但是大概齐能看懂意思.

cmd /C "set "SRCTOP=." & set "BLDTOP=." & set "PERL=C:\Perl\bin\perl.exe" & set "FIPSKEY=f4556650ac31d35461610bac4ed81b1a181b2d8a43ea2854cbae22ca74560813" & "C:\Perl\bin\perl.exe" ".\test\run_tests.pl"

run_tests.pl 中找测试配置文件*.t

# prep recipes are mandatory and need to be always run first
my @preps = glob(catfile($recipesdir,"00-prep_*.t"));
foreach my $test (@preps) {
    delete $tests{$test};
}

sub find_matching_tests {
    my ($glob) = @_;

    if ($glob =~ m|^[\d\[\]\?\-]+$|) {
        return glob(catfile($recipesdir,"$glob-*.t"));
    }

    return glob(catfile($recipesdir,"*-$glob.t"));
}

openssl-3.2.0\test\recipes/.t
在这里插入图片描述
查看具体的
.t

use OpenSSL::Test;

setup("test_abort");

plan tests => 1;

is(run(test(["aborttest"])), 0, "Testing that abort is caught correctly");

最终都是调用了生成好的测试程序.

run(test(["用C写的测试程序"]))

结合make test的日志和makefile, 就可以知道具体测试程序(e.g. aborttest.exe ) 编译时, 需要哪些工程文件.
这些测试程序, 是用来对编译好的openssl组件(主要是DLL)来测试. 是真正对openssl外部接口的测试.
这些测试程序是在调用openssl的DLL的接口, 和我们正常使用openssl DLL的场景是一样的, 不同的时, 官方提供的测试程序, 是在测试各种细节场景, 保证编译出的openssl DLL是正常可用的. 如果通不过测试, 那就说明从源码编译出的openssl的可执行文件(exe, DLL)是有问题的.

我想将openssl的这些测试exe的工程实现过一遍. 等过完后, openssl DLL接口细节的使用, 就没啥不知道的了.
等于是, 我们自己工程中如何用openssl, 在这些官方内部使用的nmake test相关工程中, 已经全部演示了.
看完这些测试程序, 在openssl.exe工程中找代码参考, 也容易和清晰多了.

笔记

这个笔记作为一个索引贴.
如果测试程序很短, 就写在这个笔记中
如果测试程序很长, 就另外开一个笔记, 将具体笔记的索引放在这个索引贴中.

openssl源码目录下的\test下, 用everything搜索全部的*.c, 拷贝到自己工程的备用目录下, 这些.c就是要学习的官方测试程序的C实现.
全部过一遍. 过一个工程, 就删掉一个实现, 等实现都没了, 就搞定了.

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

#include "my_openSSL_lib.h"

#include <openssl/crypto.h>

int main(int argc, char **argv)
{
    // 打印错误原因, 报错点(file, line), 结束程序
    OPENSSL_die("Voluntary abort", __FILE__, __LINE__);
    return 0;
}

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

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

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

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

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

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

END

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis2-事务 连接Java 整合springboot 注解缓存

一、订阅和发布 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 Redis的发布和订阅 客户端订阅频道发布的消息 频道发布消息 订阅者就可以收到消息 发布订阅的代…

C# 使用 SapNwRfc 调用SAP RFC

好久没写过相关代码&#xff0c;今天又来贡献一篇 C# 使用 SapNwRfc 调用SAP RFC。用VS2022的WINFORM应用程序&#xff0c;使用NuGet中的SapNwRfc类库&#xff0c;call SAP系统中的RFC&#xff0c;传入7个参数&#xff0c;得到RFC返回的2张表的数据。 一、VS2022中新建WINFORM…

【汇总】解决Spring-Web与Spring-WebFlux冲突

【汇总】解决Spring-Web与Spring-WebFlux冲突 问题发现问题解决问题一&#xff1a;The bean requestMappingHandlerMapping, defined in class path resource [org/springframework/web/reactive/config/DelegatingWebFluxConfiguration.class],问题二&#xff1a;The Java/XML…

C语言-算法-背包

[USACO07DEC] Charm Bracelet S&#xff08;01背包&#xff09; 题目描述 Bessie has gone to the mall’s jewelry store and spies a charm bracelet. Of course, she’d like to fill it with the best charms possible from the N (1 ≤ N ≤ 3,402) available charms. E…

基于frp工具实现内网穿透,跨局域网远程SSH登录

文章目录 一.概述1.1 为什么要内网穿透&#xff1f;1.2 什么是frp&#xff1f; 二.frp安装管理流程2.1 frp下载2.2 部署2.3 通过systemd系统服务管理启动程序 三.frp配置测试&#xff08;通过SSH访问内网机器C&#xff09;3.1 服务端配置文件frps.toml修改3.2 客户端配置文件fr…

深入解析HTTPS:安全机制全方位剖析

随着互联网的深入发展&#xff0c;网络传输中的数据安全性受到了前所未有的关注。HTTPS&#xff0c;作为HTTP的安全版本&#xff0c;为数据在客户端和服务器之间的传输提供了加密和身份验证&#xff0c;从而确保了数据的机密性、完整性和身份真实性。本文将详细探讨HTTPS背后的…

护眼落地灯哪个牌子更好更专业?经典落地灯排名

不知道各位家长有没有发现&#xff0c;近几年来小小年纪就戴眼镜的孩子真的越来越多了&#xff01; 根据专家数据统计&#xff0c;在全国青少年近视率中小学生就占其40%比重&#xff0c;也代表了10个学生中就有4、5个是戴眼镜的。造成这个趋势的原因也不难理解&#xff0c;一是…

多个SSH-Key下,配置Github SSH-Key

首先&#xff0c;检查 github 的连接性&#xff0c;因为DNS污染的原因&#xff0c;很多机器ping不通github&#xff0c;就像博主的机器&#xff1a; 怎么解决DNS污染的问题&#xff0c;博主查了很多教程&#xff0c;测试出一个有效的方法&#xff0c;那就是修改hosts文件。host…

dubbo和eureka的区别

dubbo可以作为客户端&#xff0c;也可以作为服务端&#xff0c;因此他内置了很多序列化框架可供选择&#xff0c;通过配置可以进行选择。默认是hession&#xff0c;还有gson&#xff0c;fastJson&#xff0c;jdk自带的序列化。 eureka只能作为服务端&#xff0c;他序列要与客户…

01_ESP32 MicroPython开发环境搭建

一、工作原理 Python源代码->Python解释器(MicroPython)-->二进制代码(01010)-->硬件电路(ESP32)-->高低电平输出-->其他设备 二、准备工作&#xff1a; 硬件&#xff1a;ESP32开发版&#xff0c;有很多个版本可选&#xff0c;我这里用的是ESP-32开发板&…

关于一个微信自动回复的平台

这是去年整的项目&#xff0c;源码在此。那个时候刚好在学习golang&#xff0c;那么学了那不得用起来嘛&#xff1f;于是就mk代码。 基本功能如下 pc端&#xff1a;主要功能就是登陆微信。 微信小程序&#xff1a;主要是为了方便管理自动回复的状态&#xff0c;在pc端登陆完…

【CANoe使用大全】——报文发送(IG)

&#x1f64b;‍♂️【CANoe使用大全】系列&#x1f481;‍♂️点击跳转 文章目录 1.仿真报文概述2.IG模块的使用2.1.IG模块打开方式 3.添加报文4.添加报文后的配置4.1.发送方式配置4.1.1.鼠标触发4.1.2.键盘触发4.2.3.周期发送 4.3 信号值修改编辑 1.仿真报文概述 报文发送一…

每日一题——LeetCode1346.检查整数及其两倍数是否存在

方法一 循环查找 用indexOf查找每个元素的两倍是否存在在数组中&#xff0c;找到了就直接return true&#xff0c;循环结束还没找到就return false var checkIfExist function(arr) {for(let i0;i<arr.length;i){let index arr.indexOf(arr[i]*2)if(index>0 &&…

代码随想录算法训练营第十六天 |104.二叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数(待补充)

104.二叉树的最大深度 1、题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长…

可以实时监控电脑的软件有哪些?好用的四款电脑监控软件【高人气收藏分享】

在当今数字化时代&#xff0c;电脑已经成为我们工作和生活中不可或缺的工具。然而&#xff0c;有时候我们需要对电脑进行监控&#xff0c;以确保工作效率和保护个人隐私。因此&#xff0c;选择一款好的电脑监控软件非常重要。本文将介绍四款好用的电脑监控软件&#xff0c;并探…

06 栈

目录 1.栈 2.实现 3.OJ题 1. 栈 1. 栈的概念和结构 栈: 这一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&…

使用BootStrapBlazor组件搭建Bootstarp风格的Winform界面

项目地址https://gitee.com/zhang_jie_sc/my-blazor-winforms 1.安装Bootstrap.Blazor.Templates 模板 在power shell中输入dotnet new install Bootstrap.Blazor.Templates::7.6.1&#xff0c;安装7.6.1是因为版本8以后就要强制使用net8.0了&#xff0c;很多语法不一样&…

Java集合相关面试题

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于java面试题系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基…

BIGVGAN: A UNIVERSAL NEURAL VOCODER WITHLARGE-SCALE TRAINING——TTS论文阅读

笔记地址&#xff1a;https://flowus.cn/share/a16a61b3-fcd0-4e0e-be5a-22ba641c6792 【FlowUs 息流】Bigvgan 论文地址&#xff1a; BigVGAN: A Universal Neural Vocoder with Large-Scale Training Abstract 背景&#xff1a; 最近基于生成对抗网络&#xff08;GAN&am…

SpringBoot activemq收发消息、配置及原理

SpringBoot集成消息处理框架 Spring framework提供了对JMS和AMQP消息框架的无缝集成&#xff0c;为Spring项目使用消息处理框架提供了极大的便利。 与Spring framework相比&#xff0c;Spring Boot更近了一步&#xff0c;通过auto-configuration机制实现了对jms及amqp主流框架…