Este repositorio contiene la API Python de la tarjeta SK-AD3. La API implementa puntos finales de alto nivel para la mayor parte de lo que es capaz el SK-AD3. Es importante tener en cuenta que el SK-AD3 realiza dos conjuntos distintos de operaciones. El primer conjunto de operaciones son los comandos nativos utilizados para manipular los componentes y sensores mecánicos del dispositivo (mover una tarjeta a la caja de captura, leer el estado del apilador, etc.). El segundo conjunto de operaciones tiene que ver con la comunicación con las tarjetas RFID (esta API actualmente solo admite la comunicación con las tarjetas EV1 Desfire). El primer conjunto de operaciones implica la comunicación en serie con el dispensador. El segundo conjunto de operaciones implica la comunicación con una tarjeta RFID a través de una conexión serie al dispensador. Como tal, este proyecto expone dos API, una para operaciones básicas de SK-AD3 y otra para operaciones RFID. Sin embargo, dado que la comunicación RFID se proxena a través del dispensador, la API de Desfire se basa en recursos que forman parte del código básico del dispensador.
Importar el módulo, crear un objeto dispensador y usarlo para inicializar el SK AD3 es bastante intuitivo. Cada comando devuelve una respuesta que se puede usar para verificar el estado del dispositivo.
from SK_AD3_Card_Dispenser import SK_AD3
dispenser = SK_AD3 ( 'COM7' )
response = dispenser . init ()
if response . is_successful ():
print ( response . status ())Los comandos mecánicos básicos, como mover una tarjeta a una posición determinada, como la posición de "RF", se pueden emitir de la misma manera:
response = dispenser . move_card ( 'RF' )Una vez que una tarjeta está en la posición "RF", puede activar la tarjeta y comenzar la comunicación. Este es un ejemplo de cómo puede activar una tarjeta RFID Tipo A y obtener su UID:
response = dispenser . activate_RF_card ( 'type_a' )
if response . is_successful ():
response = dispenser . get_card_uid ()
uid = response . data [ 'uid' ]
# Do something with uidCiertas operaciones de RFID requieren autenticación. El SK AD3 realiza una autenticación externa en el nivel de tarjeta y el nivel de aplicación. Deberá autenticarse de acuerdo con la configuración de la tarjeta. El objeto de respuesta de autenticación contendrá convenientemente la clave de sesión generada, que puede usarse para la comunicación cifrada y los comandos confidenciales de RFID.
response = dispenser . aes_authenticate ( SUPER_SECRET_AES_MASTER_KEY )
if response . is_successful ():
session_key = response . data [ 'session_key' ]Una vez que se autentican correctamente, las aplicaciones se pueden crear en la tarjeta utilizando presets incorporados:
from SK_AD3_Card_Dispenser . file_objects . application import PermissiveDesfireApplication
my_app = PermissiveDesfireApplication ([ 0xAB , 0xCD , 0xEF ])
dispenser . create_application ( my_app )Lo mismo ocurre con los archivos:
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 ) O, si tiene necesidades específicas, puede enviar APDUS genérico a la tarjeta. El siguiente código es equivalente al código anterior, excepto send_raw_apdu devolverá un paquete de comando sin procesar en forma de una lista de enteros en lugar de un objeto 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 recomendado).
Este proyecto utiliza APDU Utils como un submódulo GIT. Clon este proyecto utilizando el indicador ---recurse-submodules para garantizar que se incluya APDU Utils. Los siguientes módulos también deben instalarse en su entorno:
correr
pip install -r requirements.txt
para actualizar sus dependencias.
La documentación para las tarjetas EV1 Desfire está sujeta a NDA. Como tal, este repositorio debe su existencia a aquellos individuos que han hecho sus esfuerzos inversos en ingeniería pública de estas tarjetas. Las siguientes fuentes se utilizaron en el desarrollo de este proyecto: