配置说明
SDF Mock SDK 使用两个独立的配置文件:config.toml 控制日志行为,mock_keys.toml 预置密钥数据。
配置文件搜索顺序
两个配置文件按以下优先级依次查找(找到即停止):
- 环境变量:
SDF_MOCK_CONFIG_DIR指定的目录(仅 mock_keys.toml) - 可执行文件目录:调用方
.exe/demo所在目录 - 当前工作目录:进程启动时的 CWD
推荐将两个配置文件与可执行文件放在同一目录,这样无论从哪里启动程序都能正确加载。
config.toml
SDF_OpenDevice 启动时必须能找到此文件,否则返回 SDR_CONFIGERR。当前只有 [log] 段生效。
# 日志配置
[log]
# 日志级别:debug | info | warn | error | off
# 推荐:开发调试用 debug,集成测试用 info,生产用 warn
level = "info"
# 日志文件输出目录(相对或绝对路径)
# 日志文件名为 sdf_mock.log
directory = "./"
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
log.level | string | info | 日志级别,从详细到静默:debug > info > warn > error > off |
log.directory | string | ./ | 日志文件目录,目录不存在时使用 stderr 输出 |
mock_keys.toml
可选。提供预置密钥,使 SDF_GenerateKeyWithKEK、SDF_InternalSign_ECC 等内部密钥相关接口可用。缺失时使用空配置,所有密钥须在运行时动态生成。
[device] 段
[device]
manufacturer = "MyCompany" # 厂商名称,最多 40 字节
device_name = "SDF_MOCK_V1" # 设备名称,最多 16 字节
device_serial = "SN20250101" # 序列号,最多 16 字节
firmware_version = "1.0.0" # 固件版本(仅描述性字段)
[root_key] 段
[root_key]
# SM4 128位根密钥,32个十六进制字符(16字节)
value = "0123456789ABCDEF0123456789ABCDEF"
[[kek_keys]] 段(可多个)
[[kek_keys]]
index = 1 # 索引,从 1 开始,不可重复
algorithm = "SM4" # 固定为 SM4
value = "FEDCBA9876543210FEDCBA9876543210" # 32个十六进制字符
[[kek_keys]]
index = 2
algorithm = "SM4"
value = "0011223344556677889900AABBCCDDEE"
[[sign_keys]] 段(可多个)
[[sign_keys]]
index = 1
# SM2 私钥:64个十六进制字符(32字节)
private_key = "3945208F7B2144B13F36E38AC6D39F95889393692860B51A42FB81EF4DF7C5B8"
# SM2 公钥:130个十六进制字符(65字节,以 04 开头)
public_key = "04BB34D0B28F49ABAFAD1AEE5E44B489B730B8B2A2CB6CC068C8B9DABE7C1F0D0809DBAAD5D932A64D5FF9C5C4B5E3B2CE1DB05E3F7B2F16EAEF87AAA6E9B07C0A"
[[enc_keys]] 段(可多个)
[[enc_keys]]
index = 1
private_key = "56B96C94AF649D75F1738B4A2A0E563D39B1D488E3B9C42D2E7E7C6E5CF2D3B7"
public_key = "04C0D5E3A2B1F49876543210FEDCBA9876543210FEDCBA9876543210FEDCBA98760102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20"
密钥格式规范
| 密钥类型 | 长度 | 十六进制字符数 | 备注 |
|---|---|---|---|
| SM4 密钥 | 16 字节 | 32 字符 | KEK、根密钥 |
| SM2 私钥 | 32 字节 | 64 字符 | 大端字节序 |
| SM2 公钥 | 65 字节 | 130 字符 | 非压缩格式,必须以 04 开头 |
常见错误:私钥或公钥十六进制字符数不符合规范时,
SDF_OpenDevice 会静默使用空配置(所有内部密钥操作返回 SDR_KEYINDEX)。请用计数器验证字符数:echo -n "YOUR_KEY" | wc -c
完整配置示例
# GM/T 0018 Mock SDK 密钥配置文件
[device]
manufacturer = "MockDevice"
device_name = "SDF_MOCK_V1"
device_serial = "MOCK20250101"
firmware_version = "1.0.0"
[root_key]
value = "0123456789ABCDEF0123456789ABCDEF"
[[kek_keys]]
index = 1
algorithm = "SM4"
value = "FEDCBA9876543210FEDCBA9876543210"
[[kek_keys]]
index = 2
algorithm = "SM4"
value = "0011223344556677889900AABBCCDDEE"
[[sign_keys]]
index = 1
private_key = "3945208F7B2144B13F36E38AC6D39F95889393692860B51A42FB81EF4DF7C5B8"
public_key = "04BB34D0B28F49ABAFAD1AEE5E44B489B730B8B2A2CB6CC068C8B9DABE7C1F0D0809DBAAD5D932A64D5FF9C5C4B5E3B2CE1DB05E3F7B2F16EAEF87AAA6E9B07C0A"
[[enc_keys]]
index = 1
private_key = "56B96C94AF649D75F1738B4A2A0E563D39B1D488E3B9C42D2E7E7C6E5CF2D3B7"
public_key = "04C0D5E3A2B1F49876543210FEDCBA9876543210FEDCBA9876543210FEDCBA98760102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20"
常见问题
SDF_OpenDevice 返回 SDR_CONFIGERR
找不到 config.toml。检查:
- 可执行文件目录下是否有
config.toml - 当前工作目录是否有
config.toml - 运行时 stderr 会打印具体提示信息
SDF_GenerateKeyWithKEK 返回 SDR_KEYINDEX
指定的 KEK 索引不存在。检查:
mock_keys.toml是否被正确加载(日志中查找"密钥仓库已加载: KEK=N")- 请求的 KEK 索引是否在配置文件中定义
- 配置文件中密钥十六进制字符数是否正确
密钥加载后 KEK=0
mock_keys.toml 存在但解析失败(通常是密钥格式错误)。检查:
# 验证私钥字符数(应为 64)
echo -n "YOUR_PRIVATE_KEY_HEX" | wc -c
# 验证公钥字符数(应为 130)
echo -n "YOUR_PUBLIC_KEY_HEX" | wc -c