このリポジトリには、SK-AD3カードディスペンサーPython APIが含まれています。 APIは、SK-AD3ができるもののほとんどのために高レベルのエンドポイントを実装しています。 SK-AD3が2つの異なる操作セットを実行することにすぐに注意することが重要です。最初の操作セットは、デバイスの機械的コンポーネントとセンサーを操作するために使用されるネイティブコマンドです(カードをキャプチャボックスに移動し、スタッカーの状態を読み取ります)。 2番目の操作セットは、RFIDカードとの通信に関係しています(このAPIは現在、Desfire EV1カードとの通信のみをサポートしています)。最初の一連の操作には、ディスペンサーとのシリアル通信が含まれます。 2番目の操作セットには、ディスペンサーへのシリアル接続を介してRFIDカードとの通信が含まれます。そのため、このプロジェクトは2つのAPIを公開します。1つは基本的な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' )カードが「RF」位置にあると、カードをアクティブにして通信を開始できます。これは、タイプA RFIDカードをアクティブにして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 ) または、特定のニーズがある場合は、一般的なAPDUをカードに送信できます。以下のコードは上記のコードに相当しますが、 send_raw_apdu 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のユーティルが含まれていることを確認します。次のモジュールも環境にインストールする必要があります。
走る
pip install -r requirements.txt
依存関係を更新します。
Desfire EV1カードのドキュメントは、NDAの対象となります。そのため、このリポジトリは、これらのカードを公開している努力を努力した個人にその存在を負っています。このプロジェクトの開発には、次の情報源が使用されました。