快速开始

下载预编译库

前往 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。解压后即可参考测试代码直接使用动态库。

环境要求

源码编译

# 克隆项目
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(全局单例约束)