يحتوي هذا المستودع على واجهة برمجة تطبيقات بطاقة SK-AD3 Python API. تقوم API بتنفيذ نقاط نهاية عالية المستوى لمعظم ما يمكن لـ SK-AD3 قادرًا على. من المهم أن نلاحظ مباشرة الخفافيش أن SK-AD3 يقوم بمجموعتين متميزتين من العمليات. المجموعة الأولى من العمليات هي الأوامر الأصلية المستخدمة لمعالجة المكونات الميكانيكية وأجهزة استشعار الجهاز (تحريك البطاقة إلى مربع الالتقاط ، وقراءة حالة المكدس ، إلخ). تتعلق المجموعة الثانية من العمليات بالتواصل مع بطاقات RFID (تدعم واجهة برمجة التطبيقات هذه حاليًا التواصل مع بطاقات Desfire EV1 فقط). المجموعة الأولى من العمليات تنطوي على التواصل التسلسلي مع الموزع. تتضمن المجموعة الثانية من العمليات التواصل مع بطاقة RFID من خلال اتصال متسلسل بالمصادقة. على هذا النحو ، يعرض هذا المشروع اثنين من واجهات برمجة التطبيقات ، واحدة لعمليات SK-AD3 الأساسية ، وواحدة لعمليات RFID. ومع ذلك ، نظرًا لأن اتصال RFID يتم تنفيذه من خلال الموزع ، فإن واجهة برمجة تطبيقات Desfire تعتمد على الموارد التي تشكل بشكل صحيح جزءًا من رمز الموزع الأساسي.
استيراد الوحدة النمطية ، وإنشاء كائن موزع ، واستخدامه لتهيئة SK AD3 أمر بديهي إلى حد ما. يقوم كل أمر بإرجاع استجابة يمكن استخدامها للتحقق من حالة الجهاز.
from SK_AD3_Card_Dispenser import SK_AD3
dispenser = SK_AD3 ( 'COM7' )
response = dispenser . init ()
if response . is_successful ():
print ( response . status ())يمكن إصدار الأوامر الميكانيكية الأساسية مثل نقل البطاقة إلى موضع معين - مثل موضع "RF" - مثل ذلك:
response = dispenser . move_card ( 'RF' )بمجرد أن تكون البطاقة في موضع "RF" ، يمكنك تنشيط البطاقة وبدء الاتصال. هذا مثال على كيفية تنشيط بطاقة RFID من النوع A والحصول على UID:
response = dispenser . activate_RF_card ( 'type_a' )
if response . is_successful ():
response = dispenser . get_card_uid ()
uid = response . data [ 'uid' ]
# Do something with uidتتطلب بعض عمليات RFID المصادقة. يقوم SK AD3 بإجراء المصادقة الخارجية على مستوى البطاقة ومستوى التطبيق. ستحتاج إلى المصادقة وفقًا للإعدادات الموجودة على البطاقة. سيعقد كائن استجابة المصادقة مفتاح الجلسة الذي تم إنشاؤه بشكل مناسب ، والذي يمكن استخدامه للاتصال المشفر وأوامر RFID الحساسة.
response = dispenser . aes_authenticate ( SUPER_SECRET_AES_MASTER_KEY )
if response . is_successful ():
session_key = response . data [ 'session_key' ]بمجرد المصادقة بشكل صحيح ، يمكن إنشاء التطبيقات على البطاقة باستخدام الإعدادات المسبقة المدمجة:
from SK_AD3_Card_Dispenser . file_objects . application import PermissiveDesfireApplication
my_app = PermissiveDesfireApplication ([ 0xAB , 0xCD , 0xEF ])
dispenser . create_application ( my_app )الشيء نفسه ينطبق على الملفات:
from SK_AD3_Card_Dispenser . file_objects . file import PermissiveStandardDataFile
my_file = PermissiveStandardDataFile ([ 0x00 ])
dispenser . select_application ([ 0xAB , 0xCD , 0xEF ])
dispenser . create_standard_data_file ( my_file ) أو ، إذا كان لديك احتياجات محددة ، فيمكنك إرسال APDUS عام إلى البطاقة. الرمز أدناه يعادل الرمز أعلاه ، باستثناء send_raw_apdu سيعيد حزمة الأوامر RAW في شكل قائمة من الأعداد الصحيحة بدلاً من كائن Response :
dispenser . send_raw_apdu ([ 0x90 , 0x5A , 0x00 , 0x00 , 0x03 , 0xAB , 0xCD , 0xEF , 0x00 ])
dispenser . send_raw_apdu ([ 0x90 , 0xCD , 0x00 , 0x00 , 0x07 , 0x00 , 0x00 , 0xEE , 0xEE , 0x10 , 0x00 , 0x00 , 0x00 ])بيثون 3 (V3.11 الموصى به).
يستخدم هذا المشروع استخدامات APDU كوحدة فرعية GIT. استنساخ هذا المشروع باستخدام العلم ---recurse-submodules لضمان تضمين atils APDU. يجب أيضًا تثبيت الوحدات النمطية التالية في بيئتك:
يجري
pip install -r requirements.txt
لتحديث تبعياتك.
تخضع وثائق بطاقات Desfire EV1 ل NDA. على هذا النحو ، يدين هذا المستودع بوجوده لأولئك الأفراد الذين بذلوا جهودهم في هندسة هذه البطاقات العامة. تم استخدام المصادر التالية في تطوير هذا المشروع: