there(Javacard)APDU命令'選擇文件'的類錯誤測試
我不明白爲什麼錯誤'類不支持'不會發生。
首先,我的源代碼和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',因爲源代碼中有'Class Check'行。但是,它在CLA = 01〜07輸出6881(3R)(也許由JCRE)。
我知道,一旦applet被選中,JCRE就會將所有後續的APDU命令轉發給選定的applet。因此,我認爲第三個響應(3R)也是像4R那樣的'FFF5'。我不明白,在我的代碼中找不到我的錯誤。
我希望你寶貴的意見。提前致謝。
其實,我想我的小程序處理所有的命令和錯誤代碼,一旦它選擇。那麼,你有沒有辦法讓我的小程序輸出FFF5? – user2642459
@ user2642459在將APDU發送到您的小程序之前,由平臺*解釋CLA字節的低位。這就是爲什麼你的applet只能使用正確的邏輯通道(CLA字節的其餘部分都是你的)。 – vojta
@vojta感謝您的好評 – user2642459