Ниже вы видите простой апплет, который возвращает 0x6781
на входящие APDU команды с INS = 0x70
или INS = 0x71
:Java Card имеют странный ответ на APDU с INS = 0x70
package testPack;
import javacard.framework.*;
public class TestApp extends Applet
{
public static void install(byte[] bArray, short bOffset, byte bLength)
{
new TestApp().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
}
public void process(APDU apdu)
{
if (selectingApplet())
{
return;
}
byte[] buf = apdu.getBuffer();
switch (buf[ISO7816.OFFSET_INS])
{
case (byte)0x70:
ISOException.throwIt((short)0x6781);
break;
case (byte)0x71:
ISOException.throwIt((short)0x6781);
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
}
Проблема заключается в том, что, Я получаю 0x6C01
команде APDU с INS = 0x70
:
Send: 00 A4 04 00 07 01 02 03 04 05 00 00 00
Recv: 90 00
Send: 00 70 00 00 00
Recv: 6C 01
Send: 00 70 00 00 01
Recv: 01 90 00
Send: 00 71 00 00 00
Recv: 67 81
я попробовал два различных Java-карт (Один NXP JCOP v2.4.2 r3, а другой представляет собой Java Card KONA) через оба контактных и бесконтактных интерфейсов и USI ng два разных файла cap, созданных внутри двух разных ноутбуков через две разные IDE !!! (Как подозрительно я? : D) Но ответ равен.
Я подозреваю, что у PCSC или Card Manager есть этот странный ответ. Потому что в симуляторе даже метод process
не требует этого специального значения INS.
Что в этом плохого?
Спасибо, дорогой Войта. Имеются ли эти специальные значения только для команды SELECT APDU и для команды MANAGE CHANNEL APDU? Или я должен использовать другую CLA, отличную от 0x00, для всех других команд ISO7816? Я имею в виду, например, я могу использовать 'A2' как INS с CLA = 00 в своем апплете или потому, что он определен для SEARCH RECORD, я должен избегать использования его с CLA = 0x00 тоже? (Можете ли вы, пожалуйста, проверить свой gmail на этот вопрос, связанный с разработкой апплета на SIM-карте?) – Abraham