Этот репозиторий содержит диспенсер SK-AD3 Python API. API реализует конечные точки высокого уровня для большей части того, на что способен SK-AD3. Важно сразу отметить, что SK-AD3 выполняет два различных набора операций. Первым набором операций являются собственные команды, используемые для манипулирования механическими компонентами и датчиками устройства (перемещение карты в коробку захвата, чтение состояния укладчика и т. Д.). Второй набор операций связан с общением с RFID -картами (в настоящее время этот API поддерживает только общение с картами Desfire EV1). Первый набор операций включает в себя последовательную связь с дозатором. Второй набор операций включает в себя связь с RFID -картой через серийное соединение с дозатором. Таким образом, этот проект разоблачает два API, один для основных операций SK-AD3 и один для операций RFID. Однако, поскольку общение RFID прокси через диспенсер Desfire API опирается на ресурсы, которые должным образом являются частью базового кода дозатора.
Импорт модуля, создание объекта дозатора и использование его для инициализации 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' )Как только карта находится в позиции «РФ», вы можете активировать карту и начать общение. Это пример того, как вы можете активировать 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 ])Python 3 (v3.11 рекомендуется).
Этот проект использует apdu utils в качестве подмодуля GIT. Клонировать этот проект, используя флаг ---recurse-submodules чтобы убедиться, что APDU UTILS включает в себя. Следующие модули также должны быть установлены в вашей среде:
бегать
pip install -r requirements.txt
обновить ваши зависимости.
Документация для карт Desfire EV1 подлежит NDA. Таким образом, этот репозиторий обязан своим существованием тем людям, которые сделали свои усилия обратить вспять эти карты. Следующие источники использовались в разработке этого проекта: