Android Смарт-карта T = 1 протокол обработки ответа I-блока - PullRequest
0 голосов
/ 19 июня 2020

У меня такая же проблема . Я успешно отправляю и получаю команды TPDU протокола T = 1. Но не может обрабатывать длинные ответы, которые отправляются обратно в цепочку.

Вот данные: отправлено: 6f 08000000 00 06 00 0000 00 40 04 00 82 00 00 c6

получено: 80 24 00 00 00 00 06 00 00 00 00 20 20 76 72 30 81 98 00 81 98 00 00 00 85 80 20 00 23 80 00 00 00 00 00 00 00 00 20 20 06 03 54 19 15 ef

Ожидается длина данных 56, но получено 32 байта

1 Ответ

0 голосов
/ 27 июня 2020

Мне удалось подключиться по протоколу T = 1 Согласно документации ISO / IEC 7816-3 Чтобы получить ответ в цепочке, мы должны проверить PCB (байт управления протоколом) Prologue поле. PCB указывает тип принимаемого блока:

  1. I-блок - если он начинается с байта 0XXXXXX
  2. R-блок - если он начинается с байта 10XXXXX
  3. S -block - если он начинается с байта 11XXXXX

Полученные данные состоят из данных заголовка и данных, обернутых TPDU:

1.

80 24 00 00 00 00 06 00 00 00
00 20 20 76 72 30 81 98 00 81 98 00 00 00 85 80 20 00 23 80 00 00 00 00 00 00 00 00 20 20 06 03 54 19 15 ef

Обернутые данные TPDU состоят из: поля пролога; Поле ИНФО (необязательно); Поле эпилога.

  1. Поле пролога: 002020

  2. Информационное поле: 76723081980081980000008580200023800000000000000020200603541915

  3. Поле эпилога: ef - контрольная сумма

Поле пролога состоит из NAD 00 + PCB 20 + LEN 20

NAD: 0x00 PCB: 0x20 = 00100000 LEN: 0x20 - длина информационного поля

Как мы видим, тип блока - I-Block. Бит 6 печатной платы I-блока указывает, что есть дополнительные данные, которые необходимо запросить. Чтобы получить другие данные, мы должны отправить подтверждение R-блока

RCB 100-N (R) -0000, где N (R ) - порядковый номер запрашиваемых данных (0x80 или 0x90)

Данные для отправки:

6f 08 00 00 00 00 06 00 00 00 00 80 00 80
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...