【密码学实战】openHiTLS测试模块实用指导书

【免费下载链接】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

注意,此时测试代码增加了gcovasan选项,意味着开启了内存检测和覆盖率功能。

如何代码调试

我们以测试目录testcode/sdv/testcase/crypto/sm2/test_suite_sdv_eal_sm2_crypt.c中的测试代码为例,进行说明

test_suite_sdv_eal_sm2_crypt.c文件被编译成一个可执行文件放在目录testcode/output中,我们进入这个目录,然后使用 gdb 指令进行调试

image-20241227201350442

由于编译 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

如果出现内存泄露,那么会进行如下报错:

image-20241227203249352

如果进入目录testcode/output,使用如下指令运行代码,

./test_suite_sdv_eal_sm2_crypt

那么会有详细的报错信息如下

image-20241227203516359

通过测试模块检测代码覆盖率

刚刚运行了 sm2 的相关测试代码,底层会调用 openHiTLS 的相关代码,进入如下目录/build/CMakeFiles/sm2-objs.dir/crypto/sm2/src,可以查看测试代码覆盖了多少 openHiTLS 底层代码:

bash

gcov sm2_crypt.c.gcno

image-20241227203916839

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值