
إطار عمل لإنشاء البطاقات الذكية (بطاقات قائمة على ICC مع نقاط تلامس).
يجب استنساخ المشروع بشكل متكرر. تنزيل ملف ZIP ليس كافيًا.
برنامج ICC (أو swICC) هو إطار عمل يوفر طريقة سهلة ومرنة لتطوير معظم أنواع البطاقات الذكية. كما يسمح لأي بطاقة مبنية على swICC بالاتصال بالحاسب عبر واجهة PC/SC (باستخدام قارئ swICC PC/SC) وهي المعيار الفعلي لتوصيل البطاقات الذكية بأجهزة الحاسب.
./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 cardmain.c داخل دليل ./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 لبناء البطاقة../card.elf، والذي سيقوم بتوصيل البطاقة بقارئ البطاقات.pcsc_scan (جزء من حزمة pcsc-tools) سيعرض بعض تفاصيل البطاقة.لتنفيذ بطاقة مخصصة، يجب تسجيل وحدة فك توجيه APDU (قبل تشغيل عميل الشبكة) من خلال swicc_apduh_pro_register، بالإضافة إلى معالجات APDU التي يتم استدعاؤها بواسطة وحدة فك التوجيه اعتمادًا على الأمر المستلم. مثال جيد لاستخدام الإطار بطريقة أكثر تقدمًا هو مشروع swSIM الذي ينفّذ بطاقة SIM باستخدام swICC.