配置说明
概述
skf-mock 通过 TOML 配置文件 mock_keys.toml 模拟真实 USB Key 的设备信息、应用、容器、密钥对和证书。配置文件可选,缺失时使用内置默认值(不报错),但加密相关功能需配置后才能使用。
查找顺序
skf-mock 按以下顺序查找配置文件(从高到低):
| 优先级 | 方式 | 说明 |
|---|---|---|
| 1 | 环境变量 SKF_MOCK_CONFIG | 指定配置文件绝对路径或相对路径 |
| 2 | 当前工作目录 ./mock_keys.toml | 启动进程时 shell 的 pwd |
| 3 | 内置默认值 | 空应用、空容器,不报错 |
[device] 设备信息
配置 Mock 设备的基本信息,将在 SKF_GetDevInfo 中返回。
[device]
name = "MockSKFDevice" # 设备名称,SKF_ConnectDev 需要匹配
manufacturer = "Mock Manufacturer" # 厂商名
serial = "MOCK-SKF-001" # 序列号
label = "Test Token" # 用户标签
[[applications]] 应用配置
每个应用独立配置 PIN 和容器。可以配置多个应用。
[[applications]]
name = "MyApp" # 应用名称
admin_pin = "11111111" # 管理员 PIN
user_pin = "22222222" # 用户 PIN
admin_pin_retry = 6 # 管理员 PIN 最大重试次数
user_pin_retry = 6 # 用户 PIN 最大重试次数
PIN 验证规则:PIN 错误时返回
SAR_PIN_INCORRECT 并递减重试计数;重试次数归零后返回 SAR_PIN_LOCKED。重启进程后重试计数重置(Mock 不持久化)。
[[applications.containers]] 容器与密钥对
每个容器包含签名密钥对、加密密钥对和对应证书。SM2 密钥使用十六进制字符串表示。
[[applications.containers]]
name = "MyContainer"
# ── 签名密钥对(SGD_SM2_1)──
sign_private_key = "cc54df687d98e2cac86786f469f04c69b280f19a0eccf8bdf15bfeab778cada0"
sign_public_key_x = "28a446e687b7a4c27e2c4d7a8c9f3b2a1e5d6c7b8a9f0e1d2c3b4a5f6e7d8c9a"
sign_public_key_y = "3b2a1e5d6c7b8a9f0e1d2c3b4a5f6e7d8c9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c"
sign_cert = """
MIIB...(base64 DER 格式证书,支持换行)
"""
# ── 加密密钥对(SGD_SM2_3)──
enc_private_key = "..."
enc_public_key_x = "..."
enc_public_key_y = "..."
enc_cert = """..."""
密钥格式约定:
- 私钥:32 字节 hex(64 字符)
- 公钥坐标 x/y:各 32 字节 hex(64 字符)
- 证书:DER 格式,base64 编码,支持多行字符串(
"""...""")
证书格式示例
sign_cert = """
MIICBTCCAaugAwIBAgIJALVY9GVU3bT7MAoGCCqBHM9VAYN1MGQxCzAJBgNVBAYT
AkNOMRAwDgYDVQQIDAdCZWlqaW5nMRAwDgYDVQQHDAdCZWlqaW5nMQ8wDQYDVQQK
DAZNb2NrQ0ExDjAMBgNVBAsMBURldlBrMRAwDgYDVQQDDAdNb2NrVXNlcjAeFw0y
... (省略中间行)
"""
证书从 GmSSL 或其他国密 CA 工具导出的 PEM 去除头尾后可直接使用。
完整示例
# mock_keys.toml — 完整示例
[device]
name = "MockSKFDevice"
manufacturer = "Mock Manufacturer"
serial = "MOCK-SKF-001"
label = "Test Token"
# ─── 应用 1:业务应用 ───
[[applications]]
name = "BusinessApp"
admin_pin = "11111111"
user_pin = "22222222"
admin_pin_retry = 6
user_pin_retry = 6
[[applications.containers]]
name = "SignContainer"
sign_private_key = "cc54df687d98e2cac86786f469f04c69b280f19a0eccf8bdf15bfeab778cada0"
sign_public_key_x = "28a446e687b7a4c27e2c4d7a8c9f3b2a1e5d6c7b8a9f0e1d2c3b4a5f6e7d8c9a"
sign_public_key_y = "3b2a1e5d6c7b8a9f0e1d2c3b4a5f6e7d8c9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c"
[[applications.containers]]
name = "EncContainer"
enc_private_key = "aa11bb22cc33dd44ee55ff66001122334455667788990011223344556677aabb"
enc_public_key_x = "11223344556677889900aabbccddeeff00112233445566778899aabbccddeeff"
enc_public_key_y = "ffeeddccbbaa00998877665544332211ffeeddccbbaa0099887766554433221100"
# ─── 应用 2:测试应用 ───
[[applications]]
name = "TestApp"
admin_pin = "88888888"
user_pin = "12345678"
admin_pin_retry = 10
user_pin_retry = 10
相关环境变量
| 变量 | 说明 | 示例 |
|---|---|---|
SKF_MOCK_CONFIG |
指定配置文件路径 | /etc/skf/mock_keys.toml |
RUST_LOG |
日志级别 | debug / info |
⚠️ 安全警告:配置文件中的示例密钥为公开测试值,严禁用于生产环境。skf-mock 仅供开发和测试使用。