
Um framework para criação de cartões inteligentes (cartões baseados em ICC com contatos).
O projeto precisa ser clonado recursivamente. Baixar o ZIP não é suficiente.
O ICC por software (ou swICC) é um framework que fornece uma maneira fácil e flexível de desenvolver a maioria dos tipos de cartões inteligentes. Ele também permite que qualquer cartão baseado em swICC seja conectado ao PC por meio da interface PC/SC (usando o leitor PC/SC do swICC), que é o padrão de facto para conectar cartões inteligentes a PCs.
./test/data/disk. O FS pode ser salvo em disco como um arquivo .swiccfs e carregado de volta para o cartão.make, cmake e gcc para compilar o projeto. Sem dependências adicionais em tempo de execução.sudo apt-get install make cmake gccgit clone --recurse-submodules [email protected]:tomasz-lisowski/swicc.gitcd swiccmake main-dbg (para mais informações sobre a compilação, consulte ./doc/install.md)../build/libswicc.a (ex.: -Llib/swicc/build -lswicc) e adicione ./include ao caminho de inclusão (ex.: -Ilib/swicc/include).#include <swicc/swicc.h> para incluir todos os cabeçalhos.Para criar um cartão inteligente mínimo, faça o seguinte:
./build/libswicc.a exista.mkdir cardcd cardmain.c dentro do diretório ./card.#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 para compilar o cartão../card.elf que conectará o cartão ao leitor de cartões.pcsc_scan (parte do pacote pcsc-tools) mostrará alguns detalhes do cartão.Para implementar um cartão personalizado, é necessário registrar um demuxer de APDU (antes de executar o cliente de rede) por meio de swicc_apduh_pro_register, bem como manipuladores de APDU que são chamados pelo demuxer dependendo do comando recebido. Um bom exemplo de uso do framework de maneira mais avançada é o projeto swSIM, que implementa um cartão SIM usando swICC.