Вот расшифровка AFL:
Как правило, AFL будет кратен 4 байтам. Разделите ваш полный AFL на 4 байта. Давайте возьмем пример 1 чанка:
AABBCCDD
AA -> SFI (декодирование описано ниже)
BB -> Первая запись под этим SFI
CC -> Последняя запись под этим SFI
DD -> Запись задействована для аутентификации данных в автономном режиме (на данный момент не для использования)
Принимая ваш пример 10 02 04 01 18 01 01 00 20 01 10 00
Куски 10 02 04 01, 18 01 01 00, 20 01 10 00
10 02 04 01 ->
Получение 1-го байта 10: 00010000 Брать начальные 5 битов из MSB -> 00010 означает 2: Средство SFI 2
Взятие 2-го байта 02: первая запись в SFI 2 - 02
Взятие 3-го байта 04: последняя запись в SFI 2 - 04
Исключая 4-байтовое объяснение, так как не используется
Сводка: SFI 2 содержит записи от 2 до 4
Будет сформирована команда чтения записи:
Структура APDU: CLA INS P1 P2 LE
CLA 00
INS B2
P1 (Рек. №) 02 (в этой исходной записи SFI 2 - 02)
P2 (SFI) SFI 02: представить SFI в 5-значном бинарном разряде 00010, а затем добавить 100 в конце: 00010100: в шестнадцатеричном формате 14
Таким образом, P2 составляет 14
LE 00
APDU для чтения SFI 2 Rec 2: 00 B2 02 14 00
APDU для чтения SFI 2 Rec 3: 00 B2 03 14 00
APDU для чтения SFI 2 Rec 4: 00 B2 04 14 00
Теперь, если вы попытаетесь прочитать Rec 5, так как эта Rec отсутствует, вы получите SW 6A83 в этом случае.
Используйте одну и ту же процедуру для всех чанков, чтобы идентифицировать доступные Записи и SFI.
По этому механизму вы можете написать функцию для разбора AFL