Я пытаюсь отправить команду на смарт-карту. Я использую Gemalto IDBridge CT30 (PC TWIN reader) и IDBridge K30, подключенные к устройству Android через USB.Общайтесь с считывателем смарт-карт через хост Android USB
Я пытаюсь отправить ВЫБЕРИТЕ команду APDU над USB:
boolean claim = openedConnection.claimInterface(usbInterface, true);
byte[] data = new byte[]{
(byte) 0x00, (byte) 0xA4, (byte) 0x04, (byte) 0x0C,
(byte) 0x07, (byte) 0xA0, (byte) 0x00, (byte) 0x00,
(byte) 0x01, (byte) 0x18, (byte) 0x45, (byte) 0x4E};
После этого я получаю ответ:
final int dataTransferred = this.openedConnection.bulkTransfer(endPointOut, data, data.length, TIMEOUT_MS);
if(!(dataTransferred == 0 || dataTransferred == data.length)) {
throw new Exception("Error durring sending command [" + dataTransferred + " ; " + data.length + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
final byte[] responseBuffer = new byte[endPointIn.getMaxPacketSize()];
final int dataTransferred = this.openedConnection.bulkTransfer(this.endPointIn, responseBuffer, responseBuffer.length, TIMEOUT_MS);
Console.writeLine("USB Retrieve: " + dataTransferred + " " + responseBuffer.length);
if(dataTransferred >= 0){
return responseBuffer;
}
throw new Exception("Error durring receinving response [" + dataTransferred + "]");
Этот ответ является
0x00 0x00 0x00 0x00 0x00 0xA0 0x00 0x41 0x03 0x00
Однако, я должен получить ответ от 0x90 0x00
согласно test project here.
Что я делаю неправильно? Кто-нибудь может мне помочь? Использую ли я правильный подход? Я не использую классы пакетов по умолчанию javax.smartcardio
. Я напрямую использую классы интерфейса USB (например, UsbDevice).
Этот набор байтов (команда) был отправлен в классическом проекте Java по умолчанию (ссылка в главном вопросе) через классы пакета javax.smartcardio и те же самые байты, которые я пытаюсь отправить с помощью интерфейса Android с такими классами, как UsbDevice, но ответ совсем другой. @guidot – user997777
(Остерегайтесь) OP отправляет APDU на конечную точку USB, поэтому ему нужно использовать CCID - см. ответ Майкла Роланда (вы не можете напрямую отправлять APDU здесь) – vlp