8.2.4. 测试指南

CE 的测试主要覆盖以下几个要点:

  • 驱动所实现的所有算法

  • 不同数据长度的处理

  • 输入输出 buffer 是否 4KB 对齐(需要支持不对齐的情况)

  • 多进程/线程并发访问

测试的方式主要是通过对算法处理后的数据进行“比数”的方式进行,结果与参考结果一致,则表明测试通过。

8.2.4.1. 测试工具

主机端工具:

  • OpenSSL (主机需要安装)

平台端工具:

  • crypto_kcapi (编译 source/zx/test-ce)

编译 crypto_kcapi 需要在 SDK 顶层目录执行:

make menuconfig

选择配置:

zx (openwrt)
    sample-code
        [*] test-ce

8.2.4.2. 测试对象

需要测试的算法有:

对称密钥算法

非对称密钥算法

消息摘要算法

  • cbc(des3_ede)

  • ecb(des3_ede)

  • cbc(des)

  • ecb(des)

  • xts(aes)

  • cts(aes)

  • ctr(aes)

  • cbc(aes)

  • ecb(aes)

  • huk-protected(xts(aes))

  • huk-protected(cts(aes))

  • huk-protected(cbc(aes))

  • huk-protected(ecb(aes))

  • ssk-protected(cbc(aes))

  • ssk-protected(ecb(aes))

  • rsa

  • psk3-protected(rsa)

  • psk2-protected(rsa)

  • psk1-protected(rsa)

  • psk0-protected(rsa)

  • pnk-protected(rsa)

  • sha512

  • sha384

  • sha256

  • sha224

  • sha1

  • md5

  • hmac(sha256)

  • hmac(sha1)

8.2.4.3. 测试方法

8.2.4.3.1. 创建测试用例的脚本

HOST 端,通过 gen_xxx_test_data.sh 脚本,生成对应算法的测试脚本。 gen_xxx_test_data.sh 脚本所做的事情包括:

  • 生成测试数据:指定长度的 0x00 ~ 0xFF 循环数据

  • 使用 OpenSSL 工具,根据指定的密钥,生成对应算法加解密后的数据

  • 使用 OpenSSL 工具,对生成的结果计算 MD5 值

  • 将对应的 MD5 值写入生成的 test_xxx_script_kcapi.sh 中,作为比较依据

  • 生成的 test_xxx_script_kcapi.sh 使用 DEVICE 端的 crypto_kcapi 工具进行测试

相关的脚本和数据在 source/zx/test-ce/test 目录下。目前有下列用于生成测试用例的脚本:

gen_hash_test_data.sh
gen_rsa_test_data.sh
gen_skcipher_ssram_test_data.sh
gen_skcipher_test_data.sh
../../../_images/ce_test_host.png

图 8.12 生成测试脚本

8.2.4.3.2. 测试用例脚本

DEVICE 端在系统运行起来之后,可以在 /usr/local/bin/test 目录下,运行测试用例脚本。

测试脚本所做的事情包括:

  • 生成测试数据:与 HOST 端一样,指定长度的 0x00 ~ 0xFF 循环数据

  • 使用 crypto_kcapi 工具,根据指定的密钥,生成对应算法加解密后的数据

  • 使用 crypto_kcapi 工具,对生成的结果计算 MD5 值

  • 对比测试脚本中的 MD5 值,如果一样,则测试通过,否则失败

../../../_images/ce_test_device.png

图 8.13 运行测试脚本

目前有下列用于测试的脚本:

test_aes_cbc_huk_script_kcapi.sh
test_aes_cbc_script_kcapi.sh
test_aes_cbc_ssk_script_kcapi.sh
test_aes_ctr_huk_script_kcapi.sh
test_aes_ctr_script_kcapi.sh
test_aes_ctr_ssk_script_kcapi.sh
test_aes_ecb_huk_script_kcapi.sh
test_aes_ecb_script_kcapi.sh
test_aes_ecb_ssk_script_kcapi.sh
test_des_cbc_script_kcapi.sh
test_des_ecb_script_kcapi.sh
test_hash_all_script_kcapi.sh
test_md5_script_kcapi.sh
test_rsa_1024_script_kcapi.sh
test_rsa_2048_script_kcapi.sh
test_rsa_512_script_kcapi.sh
test_sha1_script_kcapi.sh
test_sha224_script_kcapi.sh
test_sha256_script_kcapi.sh
test_sha384_script_kcapi.sh
test_sha512_script_kcapi.sh
test_skciper_all_script_kcapi.sh