Ce référentiel contient l'API Python du distributeur de carte SK-AD3. L'API met en œuvre des critères d'évaluation de haut niveau pour la plupart de ce dont le SK-AD3 est capable. Il est important de noter dès le départ que le SK-AD3 effectue deux ensembles d'opérations distincts. Le premier ensemble d'opérations est les commandes natives utilisées pour manipuler les composants mécaniques et les capteurs de l'appareil (déplaçant une carte vers la boîte de capture, lisant l'état de l'empileur, etc.). Le deuxième ensemble d'opérations a à voir avec la communication avec les cartes RFID (cette API ne prend actuellement en charge que la communication avec les cartes EV1 Desfire). Le premier ensemble d'opérations implique une communication en série avec le distributeur. Le deuxième ensemble d'opérations implique la communication avec une carte RFID via une connexion série au distributeur. En tant que tel, ce projet expose deux API, une pour les opérations SK-AD3 de base et une pour les opérations RFID. Cependant, étant donné que la communication RFID est procassée via le distributeur, l'API DESFIRE s'appuie sur des ressources qui font correctement partie du code de distributeur de base.
L'importation du module, la création d'un objet de distributeur et l'utiliser pour initialiser le SK AD3 est assez intuitif. Chaque commande renvoie une réponse qui peut être utilisée pour vérifier l'état de l'appareil.
from SK_AD3_Card_Dispenser import SK_AD3
dispenser = SK_AD3 ( 'COM7' )
response = dispenser . init ()
if response . is_successful ():
print ( response . status ())Des commandes mécaniques de base telles que déplacer une carte à une position donnée - comme la position "RF" - peuvent être émises comme:
response = dispenser . move_card ( 'RF' )Une fois qu'une carte est dans la position "RF", vous pouvez activer la carte et commencer la communication. Ceci est un exemple de la façon dont vous pouvez activer une carte RFID de type A et obtenir son UID:
response = dispenser . activate_RF_card ( 'type_a' )
if response . is_successful ():
response = dispenser . get_card_uid ()
uid = response . data [ 'uid' ]
# Do something with uidCertaines opérations RFID nécessitent une authentification. Le SK AD3 effectue une authentification externe au niveau de la carte et du niveau d'application. Vous devrez vous authentifier en fonction des paramètres de la carte. L'objet de réponse d'authentification conservera facilement la clé de session générée, qui peut être utilisée pour la communication cryptée et les commandes RFID sensibles.
response = dispenser . aes_authenticate ( SUPER_SECRET_AES_MASTER_KEY )
if response . is_successful ():
session_key = response . data [ 'session_key' ]Une fois correctement authentifiés, les applications peuvent être créées sur la carte en utilisant des préréglages intégrés:
from SK_AD3_Card_Dispenser . file_objects . application import PermissiveDesfireApplication
my_app = PermissiveDesfireApplication ([ 0xAB , 0xCD , 0xEF ])
dispenser . create_application ( my_app )Il en va de même pour les fichiers:
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 ) Ou, si vous avez des besoins spécifiques, vous pouvez envoyer des APDU génériques à la carte. Le code ci-dessous est équivalent au code ci-dessus, sauf send_raw_apdu renvoie un package de commande brut sous la forme d'une liste d'entiers au lieu d'un objet 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 ])Python 3 (v3.11 recommandé).
Ce projet utilise APDU Utils comme sous-module GIT. Clone ce projet à l'aide du drapeau ---recurse-submodules pour s'assurer que les utilisations d'APDU sont incluses. Les modules suivants doivent également être installés dans votre environnement:
courir
pip install -r requirements.txt
pour mettre à jour vos dépendances.
La documentation des cartes EV1 Desfire est soumise à NDA. En tant que tel, ce référentiel doit son existence aux personnes qui ont rendu leurs efforts à rétro-ingénierie ces cartes publiques. Les sources suivantes ont été utilisées dans le développement de ce projet: