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

文章目录

    • openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板
    • 概述
    • 笔记
    • 工程中需要的openssl的库实现
    • 补充 - 最终的模板工程
    • END

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

概述

openssl3.2 - 测试程序的学习
整了几个test.c, 每开一个新的测试工程, 总要改这改那的. 挺麻烦的.
想建立一个专门用于学习openssl测试工程的VS2019模板工程. 等做新实验时, 将openssl的测试程序加入工程, 做少量改动, 就能做实验.
如果每次做一个实验, 都要向工程中加入大量支持文件, 受不了.

观察了一下makefile中的测试工程的生成, 普遍都是一个测试程序的.c + 一个测试库 + openssl的公共库.


// 测试.exe的实现组成
test\afalgtest.exe: test\afalgtest-bin-afalgtest.obj test\libtestutil.lib libcrypto.libIF EXIST test\afalgtest.exe.manifest DEL /F /Q test\afalgtest.exe.manifest$(LD) $(LDFLAGS) $(BIN_LDFLAGS) @<<
test\afalgtest-bin-afalgtest.obj// 测试.c的实现组成
test\afalgtest-bin-afalgtest.obj: test\afalgtest.c$(CC)  $(BIN_CFLAGS) -I"include" -I"apps\include" $(BIN_CPPFLAGS)  -c $(COUTFLAG)$@ "test\afalgtest.c"cmd /C "$(CC) /Zs /showIncludes  $(BIN_CFLAGS) -I"include" -I"apps\include" $(BIN_CPPFLAGS)  "test\afalgtest.c" > test\afalgtest-bin-afalgtest.d 2>&1"// libtestutil.lib的实现组成
test\libtestutil.lib: apps\lib\libtestutil-lib-opt.obj apps\lib\libtestutil-lib-win32_init.obj test\testutil\libtestutil-lib-apps_shims.obj test\testutil\libtestutil-lib-basic_output.obj test\testutil\libtestutil-lib-cb.obj test\testutil\libtestutil-lib-driver.obj test\testutil\libtestutil-lib-fake_random.obj test\testutil\libtestutil-lib-format_output.obj test\testutil\libtestutil-lib-load.obj test\testutil\libtestutil-lib-main.obj test\testutil\libtestutil-lib-options.obj test\testutil\libtestutil-lib-output.obj test\testutil\libtestutil-lib-provider.obj test\testutil\libtestutil-lib-random.obj test\testutil\libtestutil-lib-stanza.obj test\testutil\libtestutil-lib-test_cleanup.obj test\testutil\libtestutil-lib-test_options.obj test\testutil\libtestutil-lib-tests.obj test\testutil\libtestutil-lib-testutil_init.obj$(AR) $(ARFLAGS) $(AROUTFLAG)test\libtestutil.lib @<<
apps\lib\libtestutil-lib-opt.obj
apps\lib\libtestutil-lib-win32_init.obj
test\testutil\libtestutil-lib-apps_shims.obj
test\testutil\libtestutil-lib-basic_output.obj
test\testutil\libtestutil-lib-cb.obj
test\testutil\libtestutil-lib-driver.obj
test\testutil\libtestutil-lib-fake_random.obj
test\testutil\libtestutil-lib-format_output.obj
test\testutil\libtestutil-lib-load.obj
test\testutil\libtestutil-lib-main.obj
test\testutil\libtestutil-lib-options.obj
test\testutil\libtestutil-lib-output.obj
test\testutil\libtestutil-lib-provider.obj
test\testutil\libtestutil-lib-random.obj
test\testutil\libtestutil-lib-stanza.obj
test\testutil\libtestutil-lib-test_cleanup.obj
test\testutil\libtestutil-lib-test_options.obj
test\testutil\libtestutil-lib-tests.obj
test\testutil\libtestutil-lib-testutil_init.obj
<<
apps\lib\libtestutil-lib-opt.obj: apps\lib\opt.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "apps\lib\opt.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "apps\lib\opt.c" > apps\lib\libtestutil-lib-opt.d 2>&1"
apps\lib\libtestutil-lib-win32_init.obj: apps\lib\win32_init.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "apps\lib\win32_init.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "apps\lib\win32_init.c" > apps\lib\libtestutil-lib-win32_init.d 2>&1"
test\testutil\libtestutil-lib-apps_shims.obj: test\testutil\apps_shims.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\apps_shims.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\apps_shims.c" > test\testutil\libtestutil-lib-apps_shims.d 2>&1"
test\testutil\libtestutil-lib-basic_output.obj: test\testutil\basic_output.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\basic_output.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\basic_output.c" > test\testutil\libtestutil-lib-basic_output.d 2>&1"
test\testutil\libtestutil-lib-cb.obj: test\testutil\cb.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\cb.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\cb.c" > test\testutil\libtestutil-lib-cb.d 2>&1"
test\testutil\libtestutil-lib-driver.obj: test\testutil\driver.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\driver.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\driver.c" > test\testutil\libtestutil-lib-driver.d 2>&1"
test\testutil\libtestutil-lib-fake_random.obj: test\testutil\fake_random.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\fake_random.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\fake_random.c" > test\testutil\libtestutil-lib-fake_random.d 2>&1"
test\testutil\libtestutil-lib-format_output.obj: test\testutil\format_output.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\format_output.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\format_output.c" > test\testutil\libtestutil-lib-format_output.d 2>&1"
test\testutil\libtestutil-lib-load.obj: test\testutil\load.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\load.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\load.c" > test\testutil\libtestutil-lib-load.d 2>&1"
test\testutil\libtestutil-lib-main.obj: test\testutil\main.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\main.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\main.c" > test\testutil\libtestutil-lib-main.d 2>&1"
test\testutil\libtestutil-lib-options.obj: test\testutil\options.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\options.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\options.c" > test\testutil\libtestutil-lib-options.d 2>&1"
test\testutil\libtestutil-lib-output.obj: test\testutil\output.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\output.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\output.c" > test\testutil\libtestutil-lib-output.d 2>&1"
test\testutil\libtestutil-lib-provider.obj: test\testutil\provider.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\provider.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\provider.c" > test\testutil\libtestutil-lib-provider.d 2>&1"
test\testutil\libtestutil-lib-random.obj: test\testutil\random.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\random.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\random.c" > test\testutil\libtestutil-lib-random.d 2>&1"
test\testutil\libtestutil-lib-stanza.obj: test\testutil\stanza.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\stanza.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\stanza.c" > test\testutil\libtestutil-lib-stanza.d 2>&1"
test\testutil\libtestutil-lib-test_cleanup.obj: test\testutil\test_cleanup.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\test_cleanup.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\test_cleanup.c" > test\testutil\libtestutil-lib-test_cleanup.d 2>&1"
test\testutil\libtestutil-lib-test_options.obj: test\testutil\test_options.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\test_options.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\test_options.c" > test\testutil\libtestutil-lib-test_options.d 2>&1"
test\testutil\libtestutil-lib-tests.obj: test\testutil\tests.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\tests.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\tests.c" > test\testutil\libtestutil-lib-tests.d 2>&1"
test\testutil\libtestutil-lib-testutil_init.obj: test\testutil\testutil_init.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\testutil_init.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\testutil_init.c" > test\testutil\libtestutil-lib-testutil_init.d 2>&1"
engines\capi.dll: engines\capi-dso-e_capi.obj engines\capi.def libcrypto.libIF EXIST engines\capi.dll.manifest DEL /F /Q engines\capi.dll.manifestcmd /C "$(LD) $(LDFLAGS) $(DSO_LDFLAGS) @<< || (DEL /Q $(@B).* engines\capi.* & EXIT 1)"

那应该建立一个以 libtestutil.lib 实现为主的工程, 补充一些空实现(在自己添加的2个公共实现里面, 用宏来控制空实现的有无), 让这个.exe工程能自编译过.
那么这就是专门做openssl测试程序实验的工程.

等做openssl测试程序新实验时, 如果测试.c有程序里面需要的要求的几个必须实现, 用宏关掉模板公共实现中的空实现即可.
试了一下好使, 做新实验时方便多了.

笔记

工程中需要的openssl的库实现

将编译过的openssl源码目录中的apps, test/testutil 目录直接拷贝到模板工程下, 将垃圾都删掉(只保留.c, .h)
工程设置合适的头文件路径和库路径
按照makefile中, test\libtestutil.lib 的实现要求, 加入对应的.c
加入自己做的2个公共文件, 里面有头文件包含和库包含, 还有宏控制的openssl测试专用的几个空实现.
在这里插入图片描述

/*!
\file my_openSSL_lib.h
*/#ifndef __MY_OPENSSL_LIB_H__
#define __MY_OPENSSL_LIB_H__#ifdef  _WIN32
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib") // for select()#include <windows.h>
#endif /* #ifdef  _WIN32 */#pragma comment(lib, "libcrypto.lib")
#pragma comment(lib, "libssl.lib")#ifdef  _WIN32
#define MY_SLEEP(x) Sleep(x)
#else
#define MY_SLEEP(x) sleep(x)
#endif /* #ifdef  _WIN32 */#define USE_MY_SETUP_TEST// #define USE_MY_OPTION_choice#ifdef USE_MY_OPTION_choice#include "testutil.h"// 需要将其他实现中的enum定义拷贝过来
typedef enum OPTION_choice {OPT_ERR = -1,OPT_EOF = 0,OPT_CONFIG_FILE,OPT_TEST_ENUM
} OPTION_CHOICE;#endif // #ifdef USE_MY_OPTION_choice#endif /* #ifndef __MY_OPENSSL_LIB_H__ */
/*!
* \file D:\my_dev\my_local_git_prj\study\openSSL\nmake_test\test_c\prj_005_afalgtest.c\my_openSSL_lib.c
*/#include "my_openSSL_lib.h"#define MY_USE_APPLINK
#ifdef MY_USE_APPLINK
#include <openssl/applink.c> /*! for OPENSSL_Uplink(00007FF8B7EF0FE8,08): no OPENSSL_Applink */
#endif // #ifdef MY_USE_APPLINK#ifdef USE_MY_OPTION_choiceconst 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;
}#endif // #ifdef USE_MY_OPTION_choice#ifdef USE_MY_SETUP_TEST
int setup_tests(void)
{return 0;
}# endif // 

编译通过

1>  正在创建库 D:\my_dev\my_local_git_prj\study\openSSL\nmake_test\test_c\prj_openssl_test_template\x64\Debug\prj_template.lib 和对象 D:\my_dev\my_local_git_prj\study\openSSL\nmake_test\test_c\prj_openssl_test_template\x64\Debug\prj_template.exp
1>prj_template.vcxproj -> D:\my_dev\my_local_git_prj\study\openSSL\nmake_test\test_c\prj_openssl_test_template\x64\Debug\prj_template.exe
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0==========

就将这个工程作为openssl测试(test/*.c)专用的工程模板

补充 - 最终的模板工程

用工程模板, 过了100+的官方测试工程,都好使.
记录一下最终版本.
工程中有些实现要删除掉, 因为和测试工程中的函数定义重复. 最终模板工程的文件列表如下

文件夹 PATH 列表
卷序列号为 36AD-51CE
D:.
|   my_openSSL_lib.c
|   my_openSSL_lib.h
|   prj_template.sln
|   prj_template.vcxproj
|   prj_template.vcxproj.filters
|   prj_template.vcxproj.user
|   testutil.h
|   tree_all_file.txt
|   
+---apps
|   |   asn1parse.c
|   |   ca.c
|   |   ciphers.c
|   |   cmp.c
|   |   cms.c
|   |   crl.c
|   |   crl2pkcs7.c
|   |   dgst.c
|   |   dhparam.c
|   |   dsa.c
|   |   dsaparam.c
|   |   ec.c
|   |   ecparam.c
|   |   enc.c
|   |   engine.c
|   |   errstr.c
|   |   fipsinstall.c
|   |   gendsa.c
|   |   genpkey.c
|   |   genrsa.c
|   |   info.c
|   |   kdf.c
|   |   list.c
|   |   mac.c
|   |   nseq.c
|   |   ocsp.c
|   |   openssl.c
|   |   passwd.c
|   |   pkcs12.c
|   |   pkcs7.c
|   |   pkcs8.c
|   |   pkey.c
|   |   pkeyparam.c
|   |   pkeyutl.c
|   |   prime.c
|   |   progs.c
|   |   progs.h
|   |   rand.c
|   |   rehash.c
|   |   req.c
|   |   rsa.c
|   |   rsautl.c
|   |   sess_id.c
|   |   smime.c
|   |   speed.c
|   |   spkac.c
|   |   srp.c
|   |   storeutl.c
|   |   s_client.c
|   |   s_server.c
|   |   s_time.c
|   |   testdsa.h
|   |   testrsa.h
|   |   timeouts.h
|   |   ts.c
|   |   verify.c
|   |   version.c
|   |   vms_decc_init.c
|   |   x509.c
|   |   
|   +---include
|   |       apps.h
|   |       apps_ui.h
|   |       app_libctx.h
|   |       app_params.h
|   |       cmp_mock_srv.h
|   |       ec_common.h
|   |       engine_loader.h
|   |       fmt.h
|   |       function.h
|   |       http_server.h
|   |       log.h
|   |       names.h
|   |       opt.h
|   |       platform.h
|   |       s_apps.h
|   |       vms_term_sock.h
|   |       __DECC_INCLUDE_EPILOGUE.H
|   |       __DECC_INCLUDE_PROLOGUE.H
|   |       
|   \---lib
|           apps.c
|           apps_opt_printf.c
|           apps_ui.c
|           app_libctx.c
|           app_params.c
|           app_provider.c
|           app_rand.c
|           app_x509.c
|           build.info
|           cmp_mock_srv.c
|           columns.c
|           engine.c
|           engine_loader.c
|           fmt.c
|           http_server.c
|           log.c
|           names.c
|           opt.c
|           s_cb.c
|           s_socket.c
|           tlssrp_depr.c
|           vms_decc_argv.c
|           vms_term_sock.c
|           win32_init.c
|           
+---include
|   |   bn_prime.h
|   |   bn_rand_range.h
|   |   evp_local.h
|   |   
|   +---crypto
|   |       aes_platform.h
|   |       aria.h
|   |       asn1.h
|   |       asn1err.h
|   |       asn1_dsa.h
|   |       async.h
|   |       asyncerr.h
|   |       bioerr.h
|   |       bn.h
|   |       bnerr.h
|   |       bn_conf.h
|   |       bn_dh.h
|   |       bn_srp.h
|   |       buffererr.h
|   |       chacha.h
|   |       cmll_platform.h
|   |       cmperr.h
|   |       cmserr.h
|   |       comperr.h
|   |       conferr.h
|   |       context.h
|   |       crmferr.h
|   |       cryptlib.h
|   |       cryptoerr.h
|   |       cterr.h
|   |       ctype.h
|   |       decoder.h
|   |       decodererr.h
|   |       des_platform.h
|   |       dh.h
|   |       dherr.h
|   |       dsa.h
|   |       dsaerr.h
|   |       dso_conf.h
|   |       ec.h
|   |       ecerr.h
|   |       ecx.h
|   |       encoder.h
|   |       encodererr.h
|   |       engine.h
|   |       engineerr.h
|   |       err.h
|   |       ess.h
|   |       esserr.h
|   |       evp.h
|   |       evperr.h
|   |       httperr.h
|   |       lhash.h
|   |       md32_common.h
|   |       modes.h
|   |       objects.h
|   |       objectserr.h
|   |       ocsperr.h
|   |       pem.h
|   |       pemerr.h
|   |       pkcs12err.h
|   |       pkcs7.h
|   |       pkcs7err.h
|   |       poly1305.h
|   |       ppc_arch.h
|   |       punycode.h
|   |       rand.h
|   |       randerr.h
|   |       rand_pool.h
|   |       riscv_arch.h
|   |       rsa.h
|   |       rsaerr.h
|   |       security_bits.h
|   |       sha.h
|   |       siphash.h
|   |       siv.h
|   |       sm2.h
|   |       sm2err.h
|   |       sm4.h
|   |       sm4_platform.h
|   |       sparc_arch.h
|   |       sparse_array.h
|   |       store.h
|   |       storeerr.h
|   |       tserr.h
|   |       types.h
|   |       uierr.h
|   |       x509.h
|   |       x509err.h
|   |       x509v3err.h
|   |       __DECC_INCLUDE_EPILOGUE.H
|   |       __DECC_INCLUDE_PROLOGUE.H
|   |       
|   \---internal
|           asn1.h
|           bio.h
|           bio_addr.h
|           bio_tfo.h
|           common.h
|           comp.h
|           conf.h
|           constant_time.h
|           core.h
|           cryptlib.h
|           dane.h
|           deprecated.h
|           der.h
|           deterministic_nonce.h
|           dso.h
|           dsoerr.h
|           endian.h
|           err.h
|           event_queue.h
|           e_os.h
|           ffc.h
|           hpke_util.h
|           ktls.h
|           list.h
|           namemap.h
|           nelem.h
|           numbers.h
|           o_dir.h
|           packet.h
|           packet_quic.h
|           params.h
|           param_build_set.h
|           param_names.h
|           passphrase.h
|           priority_queue.h
|           property.h
|           propertyerr.h
|           provider.h
|           quic_ackm.h
|           quic_cc.h
|           quic_cfq.h
|           quic_channel.h
|           quic_demux.h
|           quic_error.h
|           quic_fc.h
|           quic_fifd.h
|           quic_reactor.h
|           quic_record_rx.h
|           quic_record_tx.h
|           quic_record_util.h
|           quic_rx_depack.h
|           quic_sf_list.h
|           quic_ssl.h
|           quic_statm.h
|           quic_stream.h
|           quic_stream_map.h
|           quic_thread_assist.h
|           quic_tls.h
|           quic_tserver.h
|           quic_txp.h
|           quic_txpim.h
|           quic_types.h
|           quic_vlint.h
|           quic_wire.h
|           quic_wire_pkt.h
|           recordmethod.h
|           refcount.h
|           ring_buf.h
|           safe_math.h
|           sha3.h
|           sizes.h
|           sm3.h
|           sockets.h
|           ssl.h
|           ssl3_cbc.h
|           sslconf.h
|           statem.h
|           symhacks.h
|           thread.h
|           thread_arch.h
|           thread_once.h
|           time.h
|           tlsgroups.h
|           tsan_assist.h
|           uint_set.h
|           unicode.h
|           __DECC_INCLUDE_EPILOGUE.H
|           __DECC_INCLUDE_PROLOGUE.H
|           
\---testutilapps_shims.cbasic_output.ccb.cdriver.cfake_random.cformat_output.cload.cmain.coptions.coutput.coutput.hprovider.crandom.cstanza.ctests.ctu_local.h

VS2019工程中看到的工程文件(不包含头文件, 都是根据头文件路径设置自动引用)
在这里插入图片描述
在openssl安装好的目录, 不需要添加任何openssl源码目录的文件, 保持原样.
自己在工程中添加的2个文件(my_openSSL_lib.*), 这块是是否能方便添加任何官方测试实现, 并能快速编译通过的点.

/*!
\file my_openSSL_lib.h
*/#ifndef __MY_OPENSSL_LIB_H__
#define __MY_OPENSSL_LIB_H__#ifdef  _WIN32
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib") // for select()#include <windows.h>
#endif /* #ifdef  _WIN32 */#pragma comment(lib, "libcrypto.lib")
#pragma comment(lib, "libssl.lib")// --------------------------------------------------------------------------------
// 开关宏 - begin
// 5个开关宏默认是打开的, 在没有加入openssl官方的测试实现(.c)时, 本工程模板也能正常编译过, 只是不干活
// 加入openssl官方的测试实现(.c)后, 如果工程提供了开关宏同名的函数实现, 只需要将对应开关宏关掉, 就可以将官方测试实现编译过.
// --------------------------------------------------------------------------------// 提供默认的 global_init()
#define MY_GLOBAL_INIT // 提供默认的 test_get_options()
#define USE_MY_OPTION_choice// 提供默认的setup_tests()
#define USE_MY_SETUP_TEST// 提供默认的 cleanup_tests()
#define USE_MY_CLEANUP_TEST// 提供默认的 opt_printf_stderr()
#define USE_MY_OPT_PRINT_ERR// --------------------------------------------------------------------------------
// 开关宏 - END
// --------------------------------------------------------------------------------#ifdef  _WIN32
#define MY_SLEEP(x) Sleep(x)
#else
#define MY_SLEEP(x) sleep(x)
#endif /* #ifdef  _WIN32 */#ifdef USE_MY_OPTION_choice#include "testutil.h"// 需要将其他实现中的enum定义拷贝过来
typedef enum OPTION_choice {OPT_CONFIG_FILE = 1,
} OPTION_CHOICE;#endif // #ifdef USE_MY_OPTION_choice#endif /* #ifndef __MY_OPENSSL_LIB_H__ */
/*!
* \file D:\my_dev\my_local_git_prj\study\openSSL\nmake_test\test_c\prj_005_afalgtest.c\my_openSSL_lib.c
*/#include "my_openSSL_lib.h"
#include "opt.h"
#include "testutil.h"
#include "tu_local.h" // for OPT_TEST_OPTIONS_DEFAULT_USAGE
#include "output.h" // for test_vprintf_stderr()#define MY_USE_APPLINK
#ifdef MY_USE_APPLINK
#include <openssl/applink.c> /*! for OPENSSL_Uplink(00007FF8B7EF0FE8,08): no OPENSSL_Applink */
#endif // #ifdef MY_USE_APPLINK#ifdef USE_MY_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;
}#endif // #ifdef USE_MY_OPTION_choice#ifdef USE_MY_SETUP_TEST
int setup_tests(void)
{return 0;
}# endif // #ifdef USE_MY_CLEANUP_TEST
void cleanup_tests(void)
{
}
#endif // #ifdef USE_MY_CLEANUP_TEST#ifdef USE_MY_OPT_PRINT_ERR
int opt_printf_stderr(const char* fmt, ...)
{va_list ap;int ret;va_start(ap, fmt);ret = test_vprintf_stderr(fmt, ap);va_end(ap);return ret;
}#endif // #ifdef USE_MY_OPT_PRINT_ERR#ifdef MY_GLOBAL_INITint global_init(void)
{
#ifndef OPENSSL_NO_TRACEsetup_trace(getenv("OPENSSL_TRACE"));
#endifreturn 1;
}#endif // #ifdef MY_GLOBAL_INIT

这个工程模板只适合官方测试工程中, 用于测试对外提供的那些API.
如果是官方内部测试的实现, 是编译不过的.
不过, openssl的用户, 基本也就关心外部API怎么用. 从openssl用户的立场出发, 这个工程模板就挺好的.

END

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

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

相关文章

架构设计 高性能带来的复杂度

架构设计的主要目的是为了解决软件系统复杂度带来的问题。 复杂度来源之一就是软件的高性能。 对性能孜孜不倦的追求是整个人类技术不断发展的根本驱动力。例如计算机&#xff0c;从电子管计算机到晶体管计算机再到集成电路计算机&#xff0c;运算性能从每秒几次提升到每秒几…

【华为 ICT HCIA eNSP 习题汇总】——题目集11

1、某公司的内网用户采用 NAT 技术的 NO-pat 方式访问互联网&#xff0c;若所有的公网地址均被使用&#xff0c;则后续上网的内网用户会&#xff08;&#xff09;。 A、挤掉前一个用户&#xff0c;强制进行 NAT 转换上网 B、将报文同步到其他 NAT 转换设备上进行 NAT 转换 C、自…

【vue2】路由之 Vue Router

文章目录 一、安装二、基础使用1、简单的示例2、动态路由2.1 定义动态路径参数2.2 获取动态路径的参数2.3 捕获所有路由 3、嵌套路由4、编程式的导航4.1 router.push4.2 router.replace4.3 router.go(n) 5、命名路由6、重定向 三、进阶1、导航守卫1.1 全局前置守卫1.2 全局后置…

无需 Root 卸载手机预装软件,精简过的老年机又行了

基础准备 准备目标手机、USB 数据线、以及一台电脑。手机 USB 连接电脑&#xff0c;开发者选项中打开 USB 调试。&#xff08;开发者选项默认隐藏&#xff0c;需要在关于手机中多次点击版本号才能调出&#xff09;。 安装手机驱动&#xff0c;下载安装 ADB 工具包。 开始操作…

ChatGPT 官方中文页面上线

根据页面显示&#xff0c;OpenAI 现已推出 ChatGPT 的多语言功能 Alpha 版测试&#xff0c;允许用户选择不同语言的界面进行交互。 如下图所示&#xff0c;ChatGPT 会检测系统当前所使用的语言&#xff0c;并提示用户进行语言切换。 用户也可通过设置页面选择其他语言。目前&a…

使用Promethues+Grafana监控Elasticsearch

PromethuesGrafana监控Elasticsearch 监控选用说明指标上报流程说明实现监控的步骤搭建elasticsearch-exporter服务搭建promethues和grafana服务 监控选用说明 虽然用Kibana来监控ES&#xff0c;能展示一些关键指标&#xff0c;但ES本身收集的指标并不全面&#xff0c;还需要在…

MicrosoftEdge浏览器打开网页出现“此网站被人举报不安全”问题时解决办法

1&#xff1a;有时候不知怎么回事用电脑自带的微软浏览器进行搜索会出现以下的问题 这可能是由于我们的浏览器安全审查过于严格引起的 Windows10正式版系统下&#xff0c;使用Edge浏览器浏览网页时候&#xff0c;发现整个页面突然变成了红色&#xff0c;显示“已有人举报此网站…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-5 Canvas 绘制三角形

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>Canvas 绘制三角形</title> </head><body><canvas id"cavsElem">您的浏览器不支持Canvas&#xff0c;请升级浏览器</canvas…

Android App开发-简单控件(1)——文本显示

本章介绍了App开发常见的几类简单控件的用法&#xff0c;主要包括&#xff1a;显示文字的文本视图、容纳视图的常用布局、响应点击的按钮控件、显示图片的图像视图等。然后结合本章所涉及的知识&#xff0c;完成一个实战项目“简单计算器”的设计与实现。 1.1 文本显示 本节介绍…

QWT开源库使用

源代码地址&#xff1a;Qwt Users Guide: Qwt - Qt Widgets for Technical Applications Qwt库包含GUI组件和实用程序类&#xff0c;它们主要用于具有技术背景的程序。除了2D图的框架外&#xff0c;它还提供刻度&#xff0c;滑块&#xff0c;刻度盘&#xff0c;指南针&#xf…

STM32F407移植OpenHarmony笔记6

继上一篇笔记&#xff0c;编译好STM32的裸机程序&#xff0c;能点亮LED灯了。 下一步就是启动liteos_m内核了。 不过为了更好的调试代码&#xff0c;需要先把printf重定向到串口&#xff0c;基于gcc的printf重定向和Keil不一样。 直接新建printf.c&#xff0c;在里面重写printf…

Gin 框架之jwt 介绍与基本使用

文章目录 一.JWT 介绍二.JWT认证与session认证的区别2.1 基于session认证流程图2.2 基于jwt认证流程图 三. JWT 的构成3.1 header : 头部3.2 payload : 负载3.2.1 标准中注册的声明 (建议但不强制使用)3.2.2 公共的声明3.2.3 私有的声明3.2.4 定义一个payload 3.3 signatrue : …

linux平台 LED情报板网关项目总结

LED情报板目前已经基本稳定 主要存在两个版本LED1.5 和LED2 两个版本的主要差别是 &#xff1a; 1.1.5的配置文件存在本地 2.0的存在平台 需要通过接口从平台获取 2.1.5的下发消息的时候需要同步返回 2.0的是异步返回&#xff0c;所以1.5的要尽可能完成 不然会导致发 布平台…

确认项目范围基准 常见的5大问题

确认项目范围基准的过程中&#xff0c;经常会遇到一些问题&#xff0c;如经常出现项目范围不明确、范围变更频繁等问题&#xff0c;往往会导致项目延期、超预算、质量下降等问题&#xff0c;严重的话可能会导致项目失败。 因此&#xff0c;我们在进行项目范围基准确认时&#x…

MySQL数据库基础合集

MySQL数据库基础合集 目录 MySQL数据库基础合集SQL关键字DDL关键字DML关键字DQL关键字DCL关键字约束关键字 SQL基础数据类型整数类型字符类型浮点类型时间类型 数据定义语言DDL1.查看数据库2.创建库3.删除库4.切换库5.创建表6.删除表7.查看表8.查看表属性9.插入列10.修改列11.设…

2023年数学大事件盘点

目录 ChatGPT驱动数学变革提速2023年阿贝尔奖花落得克萨斯大学奥斯汀分校教授路易斯卡法雷利一个全新的更紧的拉姆齐数的上界埃尔德什-图兰猜想新突破几何学家卡拉比逝世中国科学院院士、数学家杨乐逝世参考文献悄悄地,春节马上来临,在这辞旧迎新的日子里也是我们三行数学总结…

Adobe Camera Raw forMac/win:掌控原始之美的秘密武器

Adobe Camera Raw&#xff0c;这款由Adobe开发的插件&#xff0c;已经成为摄影师和设计师们的必备工具。对于那些追求完美、渴望探索更多创意可能性的专业人士来说&#xff0c;它不仅仅是一个插件&#xff0c;更是一个能够释放无尽创造力的平台。 在数字摄影时代&#xff0c;R…

github官网连接超时解决方案(图解版,亲测成功)

目录 一、521github镜像站1.1、521github镜像站访问地址 二、Github520镜像站2.1、Github520镜像站访问地址地址 三、UsbEAm Hosts Editor加速器3.1、UsbEAm加速器下载、安装及使用 四、SwitchHosts加速器4.1、SwitchHosts加速器下载、安装及使用 五、原名&#xff08;Steam)目…

blender 画笔的衰成曲线Falloff Curve

Blender画笔是用来在雕刻模式或绘画模式下对物体进行修改的工具。画笔有不同的类型和设置&#xff0c;可以影响画笔的效果和外观。你提到的选项是画笔的衰减曲线&#xff08;Falloff Curve&#xff09;的预设&#xff0c;它们决定了画笔的强度如何随着距离中心的距离而变化。 …

计算机设计大赛 深度学习 opencv python 实现中国交通标志识别

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 &#x1f525; 优质…