项目需要进行递归克隆。仅下载 ZIP 文件是不够的。
软件 ICC(或 swICC)是一个框架,提供了一种简单灵活的方式来开发大多数类型的智能卡。它还允许任何基于 swICC 的卡通过 PC/SC 接口(使用 swICC PC/SC 读卡器)连接到 PC,PC/SC 是将智能卡连接到 PC 的事实标准。
./test/data/disk 中。文件系统可以保存为 .swiccfs 文件到磁盘,并可重新加载到卡中。make、cmake 和 gcc。没有额外的运行时依赖。sudo apt-get install make cmake gccgit clone --recurse-submodules [email protected]:tomasz-lisowski/swicc.gitcd swiccmake main-dbg(有关构建的更多信息,请查看 ./doc/install.md)。./build/libswicc.a(例如 -Llib/swicc/build -lswicc),并将 ./include 添加到包含路径中(例如 -Ilib/swicc/include)。#include <swicc/swicc.h> 以包含所有头文件。要创建一个最小化的智能卡,请执行以下操作:
./build/libswicc.a 存在。mkdir cardcd card./card 目录中名为 main.c 的文件中。#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <swicc/swicc.h>
swicc_net_client_st client_ctx = {0U};
static void sig_exit_handler(__attribute__((unused)) int signum)
{
fprintf(stderr, "Shutting down...\n");
swicc_net_client_destroy(&client_ctx);
fflush(NULL);
exit(0);
}
int32_t main(int32_t const argc, char const *const argv[const argc])
{
swicc_disk_st disk = {0U};
swicc_ret_et ret = swicc_diskjs_disk_create(&disk, "../test/data/disk/006-in.json");
if (ret == SWICC_RET_SUCCESS)
{
swicc_st swicc_ctx = {0U};
ret = swicc_fs_disk_mount(&swicc_ctx, &disk);
if (ret == SWICC_RET_SUCCESS)
{
ret = swicc_net_client_sig_register(sig_exit_handler);
if (ret == SWICC_RET_SUCCESS)
{
ret =
swicc_net_client_create(&client_ctx, "127.0.0.1", "37324");
if (ret == SWICC_RET_SUCCESS)
{
ret = swicc_net_client(&swicc_ctx, &client_ctx);
if (ret != SWICC_RET_SUCCESS)
{
fprintf(stderr, "Failed to run network client.\n");
}
swicc_net_client_destroy(&client_ctx);
}
else
{
fprintf(stderr, "Failed to create a client.\n");
}
}
else
{
fprintf(stderr, "Failed to register signal handler.\n");
}
swicc_terminate(&swicc_ctx);
}
else
{
fprintf(stderr, "Failed to mount disk.\n");
swicc_disk_unload(&disk);
}
}
else
{
fprintf(stderr, "Failed to create disk.\n");
}
return 0;
}
gcc main.c -I../include -L../build -lswicc -o card.elf 来构建卡。./card.elf,这将把卡连接到读卡器。pcsc_scan(pcsc-tools 包的一部分)将显示卡的一些详细信息。要实现自定义卡,需要(在运行网络客户端之前)通过 swicc_apduh_pro_register 注册 APDU 解复用器,以及根据接收到的命令由解复用器调用的 APDU 处理器。以更高级方式使用该框架的一个很好的示例是 swSIM 项目,它使用 swICC 实现了一张 SIM 卡。