(爪哇卡)APDU命令'Select File'类错误测试



我不明白为什么没有出现错误"Class is Not Supported"。

首先,我的源代码和APDU命令如下

<源代码>

package SelectFileTest;
import javacard.framework.*;
public class SelectFileTest extends Applet{
    public static void install(byte[] bArray, short bOffset, byte bLength) {
        new SelectFileTest(bArray, bOffset, bLength);
    }   
    private SelectFileTest(byte bArray[], short bOffset, byte bLength){     
        register();
    }
    public void process(APDU apdu){
        byte buf[] = apdu.getBuffer();
        if (buf[1]==(byte)0xA4) {       
            if((buf[0]&0xff)!=0x00)                         // Class Check (Question)
                ISOException.throwIt((short)0xfff5);
            if(selectingApplet()) 
                {   }
            else
                ISOException.throwIt((short)0xffff);        // 6881
        }
        return ;
    }
}

<APDU命令>

[Card-1C] <== 00 A4 04 00 07 A0000000031234
[Card-1R] ==> 9000
[Card-2C] <== 00 A4 00 00 02 F801
[Card-2R] ==> FFFF                              // Expected
[Card-3C] <== 01 A4 00 00 02 F801
[Card-3R] ==> 6881                              // (Question) Expect the SW 'FFF5'
[Card-4C] <== 08 A4 00 00 02 F801
[Card-4R] ==> FFF5                              // Expected

根据命令3和4,由于源代码中的行"类检查",板卡必须输出SW"FFF5"。但是,它在CLA=01~07时输出6881(3R((可能通过JCRE(。

我知道,一旦选择了小程序,JCRE就会将所有后续的APDU命令转发给所选的小程序。因此,我认为第三个响应(3R(也是像4R一样的"FFF5"。我不明白,在代码中找不到我的错误。

我希望你的宝贵意见。提前谢谢。

在CLA字节中,逻辑通道用低位表示。您正在选择一个逻辑通道,平台然后尝试将其发送到正确的小程序。但是,除了基本通道(ID=0(之外,它将找不到任何开放通道。因此,平台将处理错误,而不是小程序。这种情况发生在小程序接收APDU之前;则不会通知小程序。

注意,对于INS: MANAGE CHANNEL也可能发生这种情况。我可能不需要解释,SELECT by AID最初也是由运行时环境处理的。

有关逻辑通道以及如何使用它们的更多信息,请参阅ISO/IEC 7816-4。

实际上,有一次我遇到了这个问题,因为我在代码中设置了类字节。。。由于我的类字节,我的命令被中止,并给了我意想不到的东西。。。

在将类字节发送到卡之前,您需要对其含义进行解码。ISO7816-3和-4将有助于准确解码您的类字节。。。

希望它能帮助。。。

最新更新