Dieses Repository enthält den SK-AD3-Kartenspender Python API. Die API implementiert hohe Endpunkte für den größten Teil des SK-AD3. Es ist wichtig, dass der SK-AD3 zwei unterschiedliche Operationssätze ausführt. Der erste Satz von Operationen sind native Befehle, um die mechanischen Komponenten und Sensoren des Geräts zu manipulieren (eine Karte in die Erfassungsbox verschieben, den Status des Staplers usw. lesen). Der zweite Satz von Operationen hat mit der Kommunikation mit RFID -Karten zu tun (diese API unterstützt derzeit nur die Kommunikation mit Desfire EV1 -Karten). Der erste Satz von Operationen beinhaltet eine serielle Kommunikation mit dem Spender. Der zweite Satz von Operationen beinhaltet die Kommunikation mit einer RFID -Karte durch eine serielle Verbindung zum Spender. In diesem Projekt enthält dieses Projekt zwei APIs, eine für grundlegende SK-AD3-Operationen und eine für RFID-Operationen. Da die RFID -Kommunikation jedoch über den Spender vergrößert wird, beruht die Desfire -API auf Ressourcen, die Teil des grundlegenden Spendercode sind.
Das Importieren des Moduls, das Erstellen eines Spenderobjekts und die Verwendung des SK AD3 ist ziemlich intuitiv. Jeder Befehl gibt eine Antwort zurück, mit der der Status des Geräts überprüft werden kann.
from SK_AD3_Card_Dispenser import SK_AD3
dispenser = SK_AD3 ( 'COM7' )
response = dispenser . init ()
if response . is_successful ():
print ( response . status ())Grundlegende mechanische Befehle wie das Verschieben einer Karte in eine bestimmte Position - wie die "RF" -Position - können wie SO ausgestellt werden:
response = dispenser . move_card ( 'RF' )Sobald sich eine Karte in der Position "RF" befindet, können Sie die Karte aktivieren und mit der Kommunikation beginnen. Dies ist ein Beispiel dafür, wie Sie eine RFID -Karte vom Typ A aktivieren und ihre UID erhalten können:
response = dispenser . activate_RF_card ( 'type_a' )
if response . is_successful ():
response = dispenser . get_card_uid ()
uid = response . data [ 'uid' ]
# Do something with uidBestimmte RFID -Operationen erfordern eine Authentifizierung. Der SK AD3 führt eine externe Authentifizierung auf Kartenebene und Anwendungsebene durch. Sie müssen die Einstellungen auf der Karte authentifizieren. Das Authentifizierungsantwortobjekt wird bequem den generierten Sitzungsschlüssel enthalten, der für verschlüsselte Kommunikations- und sensible RFID -Befehle verwendet werden kann.
response = dispenser . aes_authenticate ( SUPER_SECRET_AES_MASTER_KEY )
if response . is_successful ():
session_key = response . data [ 'session_key' ]Sobald sie ordnungsgemäß authentifiziert sind, können Anwendungen auf der Karte mit integrierten Voreinstellungen erstellt werden:
from SK_AD3_Card_Dispenser . file_objects . application import PermissiveDesfireApplication
my_app = PermissiveDesfireApplication ([ 0xAB , 0xCD , 0xEF ])
dispenser . create_application ( my_app )Gleiches gilt für Dateien:
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 ) Wenn Sie spezifische Anforderungen haben, können Sie generische Apdus an die Karte senden. Der folgende Code entspricht dem obigen Code, außer dass send_raw_apdu ein RAW -Befehlspaket in Form einer Liste von Ganzzahlen anstelle eines Response zurückgibt:
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 ])Python 3 (V3.11 empfohlen).
Dieses Projekt verwendet APDU -Utils als Git -Submodul. Klonen Sie dieses Projekt mit dem Flag ---recurse-submodules -Flag, um sicherzustellen, dass die APDU-Utils enthalten sind. Die folgenden Module müssen auch in Ihrer Umgebung installiert werden:
laufen
pip install -r requirements.txt
um Ihre Abhängigkeiten zu aktualisieren.
Die Dokumentation für Desfire EV1 -Karten unterliegt der NDA. Als solches verdankt dieses Repository seine Existenz denjenigen Personen, die ihre Bemühungen umgekehrt haben, diese Karten öffentlich. Die folgenden Quellen wurden für die Entwicklung dieses Projekts verwendet: