【免费下载链接】openHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
项目地址:https://gitcode.com/openHiTLS/openhitls
前言
openHiTLS 测试模块testcode
用来测试代码正常功能,该指导相比于官方文档提供更加详细的步骤说明,包括如下内容:
- 测试样例编译指导
- 自定义测试模块
- 通过测试模块检测内存泄露
- 通过测试模块检测代码覆盖率
本指导书帮助用户调试 openHiTLS 代码,检测内存泄露和检测代码覆盖率,提供细节指令说明及丰富图片介绍。
测试样例编译指导
openHiTLS 项目可调试编译
首先进入目录testcode/script
,执行如下指令,可以直接编译整个 openHiTLS 项目,而不必使用 cmake 等指令编译
bash
cd testcode/script
bash build_hitls.sh
想要开启 openHiTLS 项目代码调试、内存检测和代码覆盖率等功能,需要加入如下指令编译:
bash
cd testcode/script
bash build_hitls.sh gcov debug asan
此时编译出的项目,可以使用 gdb 等工具进行代码调试。
openHiTLS 测试模块编译
openHiTLS 测试模块的测试代码在目录testcode/sdv/testcase
下
bash
openhitls/testcode/sdv/testcase$ tree -L 2
├── bsl
│ ├── asn1
│ ├── base64
│ ├── err
│ ├── hash
│ ├── list
│ ├── log
│ ├── obj
│ ├── pem
│ ├── sal
│ ├── tlv
│ ├── uio
│ └── usr
├── crypto
│ ├── aes
│ ├── bn
│ ├── chacha-poly
│ ├── curve25519
│ ├── dh
│ ├── drbg
│ ├── dsa
│ ├── eal
│ ├── ealinit
│ ├── ecc
│ ├── encode
│ ├── entropy
│ ├── gcm
│ ├── hkdf
│ ├── hmac
│ ├── kdf_tls12
│ ├── md5
│ ├── pbkdf2
│ ├── provider
│ ├── rsa
│ ├── scrypt
│ ├── sha1
│ ├── sha2
│ ├── sha3
│ ├── sm2
│ ├── sm3
│ └── sm4
├── tls
│ ├── ciphersuite
│ ├── consistency
│ ├── feature
│ ├── interface
│ └── interface_tlcp
└── x509
├── cert
├── common
├── crl
└── verify
可以看到目录下有众多模块,以模块testcode/sdv/testcase/crypto
为例,里面包含各种加密算法的测试文件夹,分别测试了不同模块的功能。
以如下方式编译这些测试代码:
bash
cd testcode/script
bash build_sdv.sh gcov asan
注意,此时测试代码增加了gcov
和asan
选项,意味着开启了内存检测和覆盖率功能。
如何代码调试
我们以测试目录testcode/sdv/testcase/crypto/sm2/test_suite_sdv_eal_sm2_crypt.c
中的测试代码为例,进行说明
test_suite_sdv_eal_sm2_crypt.c
文件被编译成一个可执行文件放在目录testcode/output
中,我们进入这个目录,然后使用 gdb 指令进行调试
由于编译 openHiTLS 项目时,我们加入了debug
选项,所以此时可以调试到 openHiTLS 代码内部中。如果不加这个选项,只能调试test_suite_sdv_eal_sm2_crypt.c
文件中的代码。
自定义测试模块
用户如何自己加入测试函数呢?openHiTLS 提供了丰富的方法进行测试,方便用户测试自己编写的代码。
仍然以测试目录testcode/sdv/testcase/crypto/sm2/test_suite_sdv_eal_sm2_crypt.c
中的测试代码为例,我们看如下测试函数:
c
/**
* @test SDV_CRYPTO_SM2_ENC_DECODE_FUNC_TC001
* @title SM2: for testing sm2 ciphertext decode.
* @precon Vector: SM2 ciphertext.
* @brief
* 1. Call the ASN1_Sm2EncryptDataDecode to decode the SM2 ciphertext
* @expect
* 1. CRYPT_SUCCESS
*/
/* BEGIN_CASE */
void SDV_CRYPTO_SM2_ENC_DECODE_FUNC_TC001(Hex *cipher)
{
uint8_t decode[MAX_PLAIN_TEXT_LEN] = {0};
uint32_t decodelen = MAX_PLAIN_TEXT_LEN;
ASSERT_TRUE(ASN1_Sm2EncryptDataDecode(cipher->x, cipher->len, decode, &decodelen) == CRYPT_SUCCESS);
EXIT:
return;
}
/* END_CASE */
用户需要自己增加测试代码,需要按要求填写如下内容:
-
测试的注释,需要按照如上样例填写
-
/* BEGIN_CASE */
和/* END_CASE */
语句不能少,可能后续编译报错 -
在文件
testcode/sdv/testcase/crypto/sm2/test_suite_sdv_eal_sm2_crypt.data
中添加如下测试数据作为测试函数的输入。必须注意,函数名要对应。 - bash
SDV_CRYPTO_SM2_ENC_DECODE_FUNC_TC001: decode asn1 1 SDV_CRYPTO_SM2_ENC_DECODE_FUNC_TC001:"3072022100bd8ca9a0f10c6a0bd3300b245c9c6d97ab8edb20dbdb7fdfb719b8620bfba572021f54ef29045cfc7184ec183d0d794a36df208a2f77b412018a17f5dd7adfb7dd0420c5b1da28f1be6e75649509a103cef7a47ba0e458b71e2e3b83eeb06745a991e3040a8bd3ff51df65a08aeab4"
通过测试模块检测内存泄露
由于已经开启了内存检测,用户自定义的测试代码会报出内存泄露错误,使用如下指令,执行特定测试文件testcode/sdv/testcase/crypto/sm2/test_suite_sdv_eal_sm2_crypt.c
cd testcode/script
bash execute_sdv.sh test_suite_sdv_eal_sm2_crypt
如果出现内存泄露,那么会进行如下报错:
如果进入目录testcode/output
,使用如下指令运行代码,
./test_suite_sdv_eal_sm2_crypt
那么会有详细的报错信息如下
通过测试模块检测代码覆盖率
刚刚运行了 sm2 的相关测试代码,底层会调用 openHiTLS 的相关代码,进入如下目录/build/CMakeFiles/sm2-objs.dir/crypto/sm2/src
,可以查看测试代码覆盖了多少 openHiTLS 底层代码:
bash
gcov sm2_crypt.c.gcno