覆盖 GM/T 0018-2023 标准的设备管理、密钥管理、非对称运算、对称运算、哈希运算,共 20+ 个导出函数。
SM2(签名/加密)、SM3(哈希/HMAC)、SM4(ECB/CBC/CFB/OFB/CTR/GCM/CCM),基于 gm-sdk-rs 纯软件实现。
输出 .so/.dll 动态库,附带完整 sdf.h 头文件,与任意 C/C++ 项目一行代码集成。
通过 mock_keys.toml 预置 KEK、SM2 签名/加密密钥对,模拟真实硬件设备的密钥区行为。
无需 USB Key、PCI 密码卡等硬件设备,在 CI/CD 流水线、容器环境中开箱即用。
完整的单元测试 + 集成测试,覆盖正常流程与错误路径,保障接口行为符合标准。
严格遵循 GM/T 0018 规定的设备生命周期,每步均有错误码保护
#include "sdf.h"
int main() {
void *hDevice = NULL, *hSession = NULL;
/* 1. 打开设备与会话 */
SDF_OpenDevice(&hDevice);
SDF_OpenSession(hDevice, &hSession);
/* 2. SM3 哈希 */
SDF_HashInit(hSession, SGD_SM3, NULL, NULL, 0);
SDF_HashUpdate(hSession, (const unsigned char*)"hello", 5);
unsigned char hash[32]; unsigned int hlen;
SDF_HashFinal(hSession, hash, &hlen);
/* 3. SM2 临时密钥对签名 */
ECCrefPublicKey pub; ECCrefPrivateKey pri;
SDF_GenerateKeyPair_ECC(hSession, SGD_SM2_1, 256, &pub, &pri);
ECCSignature sig;
SDF_ExternalSign_ECC(hSession, SGD_SM2_1, &pri, hash, 32, &sig);
SDF_ExternalVerify_ECC(hSession, SGD_SM2_1, &pub, hash, 32, &sig);
/* 4. 清理 */
SDF_CloseSession(hSession);
SDF_CloseDevice(hDevice);
return 0;
}
| 算法 | 模式/用途 | 标识常量 | 状态 |
|---|---|---|---|
| SM2 | 数字签名 | SGD_SM2_1 | ✓ 支持 |
| SM2 | 公钥加密 | SGD_SM2_3 | ✓ 支持 |
| SM3 | 哈希摘要 | SGD_SM3 | ✓ 支持 |
| SM3 | HMAC | SGD_SM3 | ✓ 支持 |
| SM4 | ECB / CBC | SGD_SM4_ECB/CBC | ✓ 支持 |
| SM4 | CFB / OFB / CTR | SGD_SM4_CFB/OFB/CTR | ✓ 支持 |
| SM4 | GCM / CCM(AEAD) | SGD_SM4_GCM/CCM | ✓ 支持 |
| SM4 | CBC-MAC | SGD_SM4_MAC | ✓ 支持 |
| SM9 | 签名 / 加密 | — | ⚠ Stub |