Как отправлять и получать данные с помощью одного APDU на С++?

Я пишу код C++, используя winscard. Я заметил, что если я отправляю команду с помощью Scardtransmit, когда отправляются или только принимаются данные, проблем не возникает. Я могу отправить данные или получить правильный ответ. Однако, когда команда отправляет данные и ожидает ответа, я всегда получаю 61xx. Я знаю, что код ошибки 61xx означает, что есть ответ xx байт, где Le неверен, и проверил все возможные Le, включая возвращаемое значение xx, но ничего не изменилось. Например, пусть Apdu будет в виде CLA INS P1 P2 Lc Data Le, и я получаю 61XX, затем я отправляю CLA INS P1 P2 Lc Data XX, снова получаю 61XX.

Я проверил карту с помощью java и других инструментов и убедился, что с картой ничего нет.

Насколько я понимаю, для Lc и Le выделяется один байт P3. Есть ли способ получить ответы (кроме SW1SW2) от команд DATADATA?


person user1927822    schedule 31.07.2013    source источник


Ответы (1)


Когда вы отправляете команду, которая имеет данные команды, и команда также ожидает данные результата, а связь осуществляется с использованием протокола T = 0, вам необходимо отправить два APDU. Один для самой команды, а другой для получения результата.

61XX не является ошибкой. Это (успешное) слово состояния, указывающее, что у вас есть XX байта ответа, которые вы можете получить, используя GET RESPONSE (INS=0xC0).

Вот ссылка на команду.

person David    schedule 31.07.2013
comment
Спасибо за ваш ответ Дэвид. Означает ли это, что мне нужно сохранить результат, а затем получить его с помощью другого APDU? И, интересно, в чем разница между Java и C++, чтобы мне не нужно было отправлять два APDU в Java? - person user1927822; 02.08.2013
comment
Да, вам нужно сохранить значение SW2, а затем использовать его как Le в GET RESPONSE APDU. Вы также можете получить частичные данные, которые Le ‹ предыдущего SW2, если хотите. Это не должно быть связано с языком программирования (Java/C++), который вы используете, однако некоторые читатели имеют возможность автоматически получать данные ответа, если SW1 равен 61XX. - person David; 02.08.2013
comment
Еще раз спасибо за ваш ответ. - person user1927822; 05.08.2013