请写一个单独的测试函数,而不是写在main函数当中
时间: 2024-02-18 12:01:06 浏览: 25
好的,下面是一个单独的测试函数:
```c
void test_SKF_ECCVerify() {
ULONG rv;
HCONTAINER hContainer;
ECCPUBLICKEYBLOB eccPubKeyBlob;
BYTE *pbData;
ULONG ulDataLen;
BYTE *pbSignature;
ULONG ulSigLen;
ECCSIGNATUREBLOB eccSignatureBlob;
ULONG ulAlgId = SGD_SM2_1;
ULONG ulVerifyResult;
// 打开容器
rv = SKF_OpenContainer("TestContainer", &hContainer);
CU_ASSERT_EQUAL(rv, SAR_OK);
// 获取容器的公钥
rv = SKF_ExportPublicKey(hContainer, TRUE, &eccPubKeyBlob);
CU_ASSERT_EQUAL(rv, SAR_OK);
// 准备待验签数据
pbData = (BYTE*)malloc(MAX_BUFFER_SIZE);
CU_ASSERT_PTR_NOT_NULL(pbData);
memset(pbData, 0x01, MAX_BUFFER_SIZE);
ulDataLen = MAX_BUFFER_SIZE;
// 计算待验签数据的摘要
rv = SKF_Digest(hContainer, ulAlgId, pbData, ulDataLen, NULL, &ulSigLen);
CU_ASSERT_EQUAL(rv, SAR_OK);
pbSignature = (BYTE*)malloc(ulSigLen);
CU_ASSERT_PTR_NOT_NULL(pbSignature);
rv = SKF_Digest(hContainer, ulAlgId, pbData, ulDataLen, pbSignature, &ulSigLen);
CU_ASSERT_EQUAL(rv, SAR_OK);
// 验证签名
eccSignatureBlob.rLen = eccPubKeyBlob.BitLen / 8;
eccSignatureBlob.sLen = eccSignatureBlob.rLen;
memcpy(eccSignatureBlob.r, pbSignature, eccSignatureBlob.rLen);
memcpy(eccSignatureBlob.s, pbSignature + eccSignatureBlob.rLen, eccSignatureBlob.sLen);
rv = SKF_ECCVerify(hContainer, &eccPubKeyBlob, pbData, ulDataLen, &eccSignatureBlob, ulAlgId, &ulVerifyResult);
CU_ASSERT_EQUAL(rv, SAR_OK);
CU_ASSERT_EQUAL(ulVerifyResult, 0);
// 释放内存和关闭容器
free(pbData);
free(pbSignature);
SKF_CloseContainer(hContainer);
}
```
该测试函数与前面的测试用例类似,只不过使用了CUnit库中的断言函数来进行测试结果的判断。在函数执行完成后,释放内存和关闭容器。你可以将该测试函数集成到自己的测试框架中,以便进行统一的测试管理。