openssl3.2 - 测试程序的学习

文章目录

    • openssl3.2 - 测试程序的学习
    • 概述
    • 笔记
    • openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板
    • openssl3.2 - 测试程序的学习 - test\aborttest.c
    • openssl3.2 - 测试程序的学习 - test\sanitytest.c
    • openssl3.2 - 测试程序的学习 - test\acvp_test.c
    • openssl3.2 - 测试程序的学习 - test\aesgcmtest.c
    • openssl3.2 - 测试程序的学习 - error LNK2019: 无法解析的外部符号 evp_pkey_export_to_provider, evp_keymgmt_get_params
    • 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.tmpIF EXIST test\x509_test.exe.manifest  "mt" -nologo -manifest test\x509_test.exe.manifest -outputresource:test\x509_test.exeIF 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.tmpIF EXIST test\x509_time_test.exe.manifest  "mt" -nologo -manifest test\x509_time_test.exe.manifest -outputresource:test\x509_time_test.exeIF 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.tmpIF EXIST test\x509aux.exe.manifest  "mt" -nologo -manifest test\x509aux.exe.manifest -outputresource:test\x509aux.exeIF EXIST engines\capi.dll.manifest DEL /F /Q engines\capi.dll.manifestcmd /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.dllIF EXIST engines\dasync.dll.manifest DEL /F /Q engines\dasync.dll.manifestcmd /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.dllIF EXIST engines\loader_attic.dll.manifest DEL /F /Q engines\loader_attic.dll.manifestcmd /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.dllIF EXIST engines\ossltest.dll.manifest DEL /F /Q engines\ossltest.dll.manifestcmd /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.dllIF EXIST engines\padlock.dll.manifest DEL /F /Q engines\padlock.dll.manifestcmd /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.dllIF EXIST providers\legacy.dll.manifest DEL /F /Q providers\legacy.dll.manifestcmd /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.dllcmd /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 - 测试程序的学习 - 准备openssl测试专用工程的模板

openssl的测试实现.c, 写的不是很标准, 不是测试必须的实现都写了.
这就导致, 向测试工程中加了新实现(删掉旧实现)时, 不是每次都能一次编译过.
有时还要向工程中添加或删减文件, 很麻烦.
整了几个openssl官方的测试程序后, 就想做个专用的模板工程, 这样每个新实验都在模板工程上做, 工作量小多了. 稍作修改就能编译过, 然后做实验.

openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板

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

openssl3.2 - 测试程序的学习 - error LNK2019: 无法解析的外部符号 evp_pkey_export_to_provider, evp_keymgmt_get_params

openssl make test 不只是测试已经导出的API, 也进行内部函数测试.
我们搭建的环境, 是基于已经编译安装的openssl3.2的DLL对外导出接口.
如果是openssl内部函数在测试程序中, 是会编译报错的.

如果看到openssl/test/*.c中有测试内部函数(小写字母开头), 就跳过, 不玩了.

openssl3.2 - 测试程序的学习 - error LNK2019: 无法解析的外部符号 evp_pkey_export_to_provider, evp_keymgmt_get_params

END

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

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

相关文章

语图奇缘:林浩然与杨凌芸的哲学漫画大冒险

语图奇缘&#xff1a;林浩然与杨凌芸的哲学漫画大冒险 Language Odyssey: The Philosophical Comic Adventure of Lin Haoran and Yang Lingyun 在一个充满逻辑谜题和言语陷阱的城市——逻言市&#xff0c;住着两位热衷于探索语言奥秘的年轻人&#xff0c;林浩然和杨凌芸。林浩…

AlexNet,ZFNet详解

1 AlexNet 网络结构 对于AlexNet网络来说&#xff0c;因为当时资源环境受限&#xff0c;他从第一步卷积开始就把一个图像分到两个GPU上训练&#xff0c;然后中间进行组合最后进行融合成全连接成1000个置信度 1 得到一张3x224x224的图像&#xff0c;然后进行11x11的卷积&…

02-opencv-上

机器视觉概述 机器视觉是人工智能正在快速发展的一个分支。简单说来&#xff0c;机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是通过机器视觉产品(即图像摄取装置&#xff0c;分CMOS和CCD两种)将被摄取目标转换成图像信号&#xff0c;传送给专用的图像处理系统&…

CAN相关寄存器

1. CAN_ MCR&#xff1a;CAN主控制寄存器。主要负责CAN工作模式的配置。 CAN_BTR&#xff1a;位时序寄存器。用来设置分频/TBs1/TBs2/Tsw等参数&#xff0c;设置测试模式。 CAN_(T/R)IxR&#xff1a;标识符寄存器。存放&#xff08;待发送/接收)的报文ID、扩展ID、IDE位及RTR…

Dockerfile简介和基础实践

文章目录 1、Dockerfile简介1.1、Dockerfile解决的问题1.2、docker build 构建流程1.3、关键字介绍 2、Dockerfile 实践2.1、基本语法实践 --- golang2.1.1 问题检查 2.2、基本语法实践 --- gcc 总结 1、Dockerfile简介 Dockerfile是一个创建镜像所有命令的文本文件, 包含了一…

CIFAR-10数据集详析:使用卷积神经网络训练图像分类模型

1.数据集介绍 CIFAR-10 数据集由 10 个类的 60000 张 32x32 彩色图像组成&#xff0c;每类 6000 张图像。有 50000 张训练图像和 10000 张测试图像。 数据集分为5个训练批次和1个测试批次&#xff0c;每个批次有10000张图像。测试批次正好包含从每个类中随机选择的 1000 张图像…

HTTP和Tomcat概述

1&#xff0c;Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 在我们日常的生活中&#xff0c;经常会使用浏览器去访问百度、京东、传智官网等这些网站&#xff0c;这些网站统称为Web网站。如下就是通…

使用ffmpeg转换索尼老DV拍摄的VOB文件为mp4

一些背景故事 最近对象想用 CCD 拍照录像&#xff0c;家里刚好有一台快 20 年前的索尼 DV DCR-DVD653E&#xff0c;就是电池老化充不进去电了。 翻出来之后还感慨了一下&#xff1a;当年没有网购&#xff0c;价格不透明&#xff1b;有些地方也没有官方店&#xff0c;只有一两家…

nginx反向代理负载均衡

一&#xff0c;kali作为负载服务器 打开kali nginx服务&#xff0c;访问页面如下 使用docker拉取nginx&#xff0c;并做出端口映射 ┌──(root?kali)-[/etc/nginx] └─# docker pull nginx ┌──(root㉿kali)-[/etc/nginx] └─# docker run -p 11111:80 --name Jdr -d ng…

【揭秘】ForkJoinTask全面解析

内容摘要 ForkJoinTask的显著优点在于其高效的并行处理能力&#xff0c;它能够将复杂任务拆分成多个子任务&#xff0c;并利用多核处理器同时执行&#xff0c;从而显著提升计算性能&#xff0c;此外&#xff0c;ForkJoinTask还提供了简洁的API和强大的任务管理机制&#xff0c…

VR拍摄+制作

1.VR制作需要的图片宽高是2:1&#xff0c;需要360✖️180的图片&#xff0c;拍摄设备主要有两种&#xff1a; 1&#xff09;通过鱼眼相机拍摄&#xff0c;拍摄一组图片&#xff0c;然后通过PTGui来合成(拍摄复杂) 2&#xff09;全景相机&#xff0c;一键拍摄直接就能合成需要的…

C++数据结构——哈希表

目录 一&#xff0c;unordered系列容器 1.1 关于unordered系列 1.2 unordered_set 1.4 unordered_map 1.5 性能对比 二&#xff0c;哈希 2.1 哈希概念 2.2 常用哈希函数 2.3 哈希冲突及解决 2.3.1 闭散列 2.3.2 开散列 2.4 哈希表扩容 2.4.1 闭散列扩容 2.4.2 开散…