(Javacard)APDU命令"选择文件"的类错误测试

use*_*459 2 class apdu javacard

那里

我不明白为什么不会出现错误'类不支持'.

首先,我的源代码和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 ;
    }
}
Run Code Online (Sandbox Code Playgroud)

<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
Run Code Online (Sandbox Code Playgroud)

通过命令3和4,由于源代码中的"Class Check"行,卡必须输出SW'FFFF5'.但是,它在CLA = 01~07输出6881(3R)(可能是JCRE).

我知道一旦选择了applet,JCRE就会将所有后续APDU命令转发到所选的applet.因此,我认为第3响应(3R)也像4R一样是'FFF5'.我不明白,也无法在我的代码中找到我的错误.

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

Maa*_*wes 5

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

请注意,这也可能发生INS: MANAGE CHANNEL.我可能不必解释AID的SELECT最初也是由运行时环境处理的.

关于逻辑信道和它们如何更多的信息可能被利用可以在ISO/IEC 7816-4中找到.

  • @ user2642459在将APDU发送到applet之前,平台*会解释CLA字节的低位.这就是为什么你的applet只能使用正确的逻辑通道(CLA字节的其余部分都是你的). (3认同)