快速开始
下载预编译库
前往 GitHub Releases 下载对应平台的发布包:
skf-mock-linux-x86_64.tar.gz # Linux x86_64
├── libskf_mock.so # 动态库
├── mock_keys.toml # 示例配置
├── tests/integration_test.rs # 集成测试代码
└── README.md
Release 包含:动态库 + 示例配置 + 测试代码 + README。解压后即可参考测试代码直接使用动态库。
环境要求
- 使用预编译库:glibc 2.31+(Ubuntu 20.04 / CentOS 8 / Debian 11 及以上)
- 从源码编译:Rust 1.75+(rustup.rs)
- GCC / Clang(仅 C 集成时需要)
- Linux x86_64 / Windows x64(WSL 同样支持)
源码编译
# 克隆项目
git clone https://github.com/ccasa-project/0016-skf-mock.git
cd 0016-skf-mock
# 编译动态库(Linux 输出 libskf_mock.so,Windows 输出 skf_mock.dll)
cargo build --release
# 运行全部测试(自动单线程,全局单例不支持并发)
cargo test
# 查看测试日志
RUST_LOG=debug cargo test -- --nocapture
配置文件
skf-mock 通过 mock_keys.toml 配置设备信息、应用、容器、密钥对。完整格式参见 配置说明。
# mock_keys.toml 最小示例
[device]
name = "MockSKFDevice"
manufacturer = "Mock Manufacturer"
serial = "MOCK-SKF-001"
label = "Test Token"
[[applications]]
name = "MyApp"
admin_pin = "11111111"
user_pin = "22222222"
admin_pin_retry = 6
user_pin_retry = 6
[[applications.containers]]
name = "MyContainer"
sign_private_key = "cc54df687d98e2cac86786f469f04c69b280f19a0eccf8bdf15bfeab778cada0"
sign_public_key_x = "28a446e687b7a4c27e2c4d7a8c9f3b2a1e5d6c7b8a9f0e1d2c3b4a5f6e7d8c9a"
sign_public_key_y = "3b2a1e5d6c7b8a9f0e1d2c3b4a5f6e7d8c9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c"
配置文件查找顺序:环境变量
SKF_MOCK_CONFIG → 当前工作目录 ./mock_keys.toml → 内置默认值。缺失时不会报错,但加密相关功能需配置后才能使用。
C 动态库集成
skf-mock 输出标准 cdylib,C 程序通过 dlopen / LoadLibrary 动态加载:
/* main.c */
#include <stdio.h>
#include <dlfcn.h>
typedef unsigned long ULONG;
typedef void* HANDLE;
int main() {
void *lib = dlopen("./libskf_mock.so", RTLD_LAZY);
if (!lib) { fprintf(stderr, "%s\n", dlerror()); return 1; }
/* 连接设备 */
ULONG (*ConnectDev)(const char*, HANDLE*);
ConnectDev = dlsym(lib, "SKF_ConnectDev");
HANDLE hDev = NULL;
ULONG rv = ConnectDev("MockSKFDevice", &hDev);
printf("SKF_ConnectDev = 0x%lX\n", rv);
dlclose(lib);
return 0;
}
编译:
gcc main.c -o demo -ldl
LD_LIBRARY_PATH=. ./demo
mPlugin 集成
skf-mock 可直接作为 龙脉 mPlugin 的底层 SKF DLL 使用,无需修改 JS 代码:
// 方式 A:JS 直接指定(推荐)
SOF_LoadLibrary("libskf_mock.so"); // Linux
SOF_LoadLibrary("skf_mock.dll"); // Windows
# 方式 B:覆盖原有 DLL
# Windows
copy target\release\skf_mock.dll <mPlugin目录>\mtoken_gm3000.dll
# Linux
cp target/release/libskf_mock.so <mPlugin目录>/libgm3000.1.0.so
运行测试
项目包含完整的集成测试,覆盖设备连接、PIN 验证、SM2 签名验签、SM4 加解密等场景:
# 全量测试
cargo test
# 运行单个测试
cargo test test_sm2_sign_verify
# 使用自定义配置
SKF_MOCK_CONFIG=./my_keys.toml cargo test
环境变量
| 变量 | 说明 |
|---|---|
SKF_MOCK_CONFIG | 指定 mock_keys.toml 路径,优先级最高 |
RUST_LOG | 日志级别:debug / info / warn / error |
RUST_TEST_THREADS | .cargo/config.toml 已固定为 1(全局单例约束) |