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

网站开发的售后 维保1688货源网官方网站

网站开发的售后 维保,1688货源网官方网站,网站的代运营,同城信息平台推广文章目录 openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板概述笔记工程中需要的openssl的库实现补充 - 最终的模板工程END openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板 概述 openssl3.2 - 测试程序的学习 整了几个test.c, 每开一个新的测试工… 文章目录 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) -Iinclude -Iapps\include $(BIN_CPPFLAGS) -c $(COUTFLAG)$ test\afalgtest.ccmd /C $(CC) /Zs /showIncludes $(BIN_CFLAGS) -Iinclude -Iapps\include $(BIN_CPPFLAGS) test\afalgtest.c test\afalgtest-bin-afalgtest.d 21// 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.objapps\lib\libtestutil-lib-opt.obj: apps\lib\opt.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ apps\lib\opt.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) apps\lib\opt.c apps\lib\libtestutil-lib-opt.d 21 apps\lib\libtestutil-lib-win32_init.obj: apps\lib\win32_init.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ apps\lib\win32_init.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) apps\lib\win32_init.c apps\lib\libtestutil-lib-win32_init.d 21 test\testutil\libtestutil-lib-apps_shims.obj: test\testutil\apps_shims.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\apps_shims.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\apps_shims.c test\testutil\libtestutil-lib-apps_shims.d 21 test\testutil\libtestutil-lib-basic_output.obj: test\testutil\basic_output.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\basic_output.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\basic_output.c test\testutil\libtestutil-lib-basic_output.d 21 test\testutil\libtestutil-lib-cb.obj: test\testutil\cb.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\cb.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\cb.c test\testutil\libtestutil-lib-cb.d 21 test\testutil\libtestutil-lib-driver.obj: test\testutil\driver.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\driver.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\driver.c test\testutil\libtestutil-lib-driver.d 21 test\testutil\libtestutil-lib-fake_random.obj: test\testutil\fake_random.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\fake_random.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\fake_random.c test\testutil\libtestutil-lib-fake_random.d 21 test\testutil\libtestutil-lib-format_output.obj: test\testutil\format_output.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\format_output.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\format_output.c test\testutil\libtestutil-lib-format_output.d 21 test\testutil\libtestutil-lib-load.obj: test\testutil\load.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\load.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\load.c test\testutil\libtestutil-lib-load.d 21 test\testutil\libtestutil-lib-main.obj: test\testutil\main.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\main.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\main.c test\testutil\libtestutil-lib-main.d 21 test\testutil\libtestutil-lib-options.obj: test\testutil\options.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\options.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\options.c test\testutil\libtestutil-lib-options.d 21 test\testutil\libtestutil-lib-output.obj: test\testutil\output.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\output.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\output.c test\testutil\libtestutil-lib-output.d 21 test\testutil\libtestutil-lib-provider.obj: test\testutil\provider.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\provider.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\provider.c test\testutil\libtestutil-lib-provider.d 21 test\testutil\libtestutil-lib-random.obj: test\testutil\random.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\random.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\random.c test\testutil\libtestutil-lib-random.d 21 test\testutil\libtestutil-lib-stanza.obj: test\testutil\stanza.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\stanza.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\stanza.c test\testutil\libtestutil-lib-stanza.d 21 test\testutil\libtestutil-lib-test_cleanup.obj: test\testutil\test_cleanup.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\test_cleanup.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\test_cleanup.c test\testutil\libtestutil-lib-test_cleanup.d 21 test\testutil\libtestutil-lib-test_options.obj: test\testutil\test_options.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\test_options.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\test_options.c test\testutil\libtestutil-lib-test_options.d 21 test\testutil\libtestutil-lib-tests.obj: test\testutil\tests.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\tests.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\tests.c test\testutil\libtestutil-lib-tests.d 21 test\testutil\libtestutil-lib-testutil_init.obj: test\testutil\testutil_init.c$(CC) $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) -c $(COUTFLAG)$ test\testutil\testutil_init.ccmd /C $(CC) /Zs /showIncludes $(LIB_CFLAGS) -Iinclude -Iapps\include -I. $(LIB_CPPFLAGS) test\testutil\testutil_init.c test\testutil\libtestutil-lib-testutil_init.d 21 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 1prj_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.hkea.cn/news/14444449/

相关文章:

  • 模板网站 知乎兼职做网站安全么
  • 用旧手机做网站福州便民生活网
  • 捕鱼网站怎么做wordpress 自动关键词
  • 酒店类网站开发策略网站开发与软件研发有什么区别
  • 一元云购手机网站建设常见的网络推广方法有哪些
  • 吉林省建设项目招标网站做微博类的网站难吗
  • 网站哪个公司做企业免费网站建设哪里比较好
  • 网页设计和网站编辑跨境电商面试自我介绍范文
  • 全球做的比较好的网站平台营销型网站建设
  • 全球做的比较好的网站深圳画册设计公司怎么样
  • 网站空间支持功能半厘米wordpress
  • 网站营销 海外培训班网页设计
  • 设计网站公司力荐亿企邦免费一站式网站建设
  • 怎样创作网站游戏推广是什么工作
  • 没有主机怎么做自己的网站美容美发网站模板
  • 建设门户网站的请示平台建设网站
  • 做中考试卷的网站seo做的比较好的网站的几个特征
  • 印刷建设网站国内c2c电子商务平台有哪些
  • 人才招聘网站建设数商云公司
  • 郑州手机网站建设多少钱企业站
  • 做网站简约学校网站微信小程序代码生成器
  • 相机网站建设策划书小程序开发用什么语言
  • 西宁网站维护网站开发立项
  • 做矿业的郑州公司网站寄生虫做网站流量
  • 网站建设后期费用市场监督管理局官网
  • 架设仿冒网站挂马东莞市企业网站制作企业
  • 网站开发需要书籍品牌推广是什么工作
  • 赚钱平台网站直播网站建设重庆
  • 建设学院实验室网站的作用编程scratch网站
  • 网站模板种类中学生做的安全作业网站