Как отправить ответный APDU, содержащий возвращаемые данные И слово состояния, отличное от 0x9000?

Я хотел бы отправить ответный APDU, содержащий поле данных ответа, а также слово состояния, отличное от 0x9000. Учитывая мое понимание ISO 7816-4, в целом это должно быть возможно.

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

Напротив, я могу явно установить произвольные слова состояния и отправить их как ISOException, но не имею возможности прикрепить возвращаемые данные.

Такое поведение подходит для ошибок, т. е. слов состояния 0x64XX - 0x69XX, но что делать с 0x63XX? Это должно быть нормально, чтобы отправить предупреждение и по-прежнему передавать возвращаемые данные.

Итак, можно ли отправлять ответные APDU, содержащие возвращаемые данные И слово состояния, отличное от 0x9000, и как мне это сделать?


person Thomas Lieven    schedule 29.11.2013    source источник


Ответы (1)


Просто убедитесь, что вы отправляете данные, прежде чем создавать исключение. Вы можете, конечно, захотеть запомнить слово состояния, которое вы хотите бросить, до конца. Затем вы можете просто использовать ISOException.throwIt(short sw) для создания слова состояния.

Обратите внимание, что, как вы указали, вы должны возвращать данные только в том случае, если ваше слово состояния указывает либо 9000, либо предупреждение (т.е. в диапазоне от 62xx до 63xx). Возврат данных и слова состояния, указывающего на ошибку, является неправильным толкованием ISO 7816-4.

Я согласен с тем, что создание исключения для генерации предупреждения кажется неправильным, но в настоящее время это так.

person Maarten Bodewes    schedule 29.11.2013
comment
Эй, это было быстро ;-) ... и решило мою проблему, хотя интуиция подсказывала мне обратное, или я бы попробовал это очевидное? сочетание обоих подходов сам. - person Thomas Lieven; 29.11.2013
comment
По-видимому, APDU не отправляется до тех пор, пока метод процесса не завершится. Никогда не думал об этом, но кажется правдоподобным. - person Thomas Lieven; 29.11.2013