GM/T 0018-2023

SDF Mock SDK

无需密码硬件,在任意开发环境中调用标准 SDF 接口
纯 Rust 实现 · 标准 C ABI · 国密算法全覆盖

SM2 SM3 SM4 Rust cdylib

核心特性

📋

完整 SDF 接口

覆盖 GM/T 0018-2023 标准的设备管理、密钥管理、非对称运算、对称运算、哈希运算,共 20+ 个导出函数。

🔑

国密算法全覆盖

SM2(签名/加密)、SM3(哈希/HMAC)、SM4(ECB/CBC/CFB/OFB/CTR/GCM/CCM),基于 gm-sdk-rs 纯软件实现。

🔌

标准 C ABI

输出 .so/.dll 动态库,附带完整 sdf.h 头文件,与任意 C/C++ 项目一行代码集成。

⚙️

预置密钥配置

通过 mock_keys.toml 预置 KEK、SM2 签名/加密密钥对,模拟真实硬件设备的密钥区行为。

🚀

零硬件依赖

无需 USB Key、PCI 密码卡等硬件设备,在 CI/CD 流水线、容器环境中开箱即用。

🧪

37 个自动化测试

完整的单元测试 + 集成测试,覆盖正常流程与错误路径,保障接口行为符合标准。

标准调用流程

严格遵循 GM/T 0018 规定的设备生命周期,每步均有错误码保护

1
SDF_OpenDevice
加载 config.toml
初始化设备上下文
2
SDF_OpenSession
创建会话
加载预置密钥
3
Generate/ImportKey
生成或导入
会话密钥
4
密码运算
加解密 / 签验签
哈希 / MAC
5
DestroyKey → CloseSession → CloseDevice
清理资源

代码示例

#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✓ 支持
SM3HMACSGD_SM3✓ 支持
SM4ECB / CBCSGD_SM4_ECB/CBC✓ 支持
SM4CFB / OFB / CTRSGD_SM4_CFB/OFB/CTR✓ 支持
SM4GCM / CCM(AEAD)SGD_SM4_GCM/CCM✓ 支持
SM4CBC-MACSGD_SM4_MAC✓ 支持
SM9签名 / 加密⚠ Stub