小程序安装过程中出现错误6985和6988

时间:2015-02-09 08:19:18

标签: java javacard

我为我的java卡写了一个非常简单的程序如下:

package myFirstApplet;

import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISOException;

public class ECHO extends Applet 
{

    private ECHO() 
        {
        }

    public static void install(byte bArray[], short bOffset, byte bLength)
            throws ISOException 
        {
        new ECHO().register();
        }

    public void process(APDU arg0) throws ISOException 
        {
        byte[] received=arg0.getBuffer();
        ++received[(short)(received.length+1)];
        arg0.setOutgoingAndSend((short)0, (short)received.length); 
        }

}

它以接收APDU命令的方式编写,将其添加一个并再次发送给持卡人。

成功将其转换为 .cap 文件后,当我想使用 GP工具安装它时,我收到6985错误:

GP: gp -install d:\myFirstApplet.cap
openkms.gp.GPException: LOAD failed SW: 6985
        at openkms.gp.GlobalPlatform.check(GlobalPlatform.java:924)
        at openkms.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:606)
        at openkms.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:565)
        at openkms.gp.GPTool.main(GPTool.java:330)

GP:

6985&当我尝试使用 JCManager

安装它时6988
Authenticated
************
UplaodCAP
*************
Get AID from header.cap file
FOR LOAD DATA: EF 04 C6 02 01 28
AID:01 02 03 04 05 06 07 08 09 00
Applet AID:01 02 03 04 05 06 07 08 09 00 00
Try to delete if existing...
-> 84 E4 00 00 18 90 5E F7 BC 5C 13 70 27 E5 F1 26 4F AC 70 96 B8 FE F5 89 CC 93 D7 2E 24
<- 6A 88
-> 84 E4 00 00 18 3D 62 7D 1A 35 76 4F 38 12 DE BB 69 9F 21 70 7F 29 23 08 D0 36 85 FF E5
<- 6A 88
Loading cap file. Please wait...
Install for Load
-> 84 E6 02 00 18 4F 24 95 04 0B 3A DE 26 24 1D D5 ED 5B 9A 0F D0 36 52 1E A1 AC 0B BB 76
<- 00 90 00
Load CAP
-> 84 E8 00 00 D8 52 EF 61 98 40 62 1B F1 BA D5 72 98 50 0A EC 14 27 09 59 23 57 3F FC D9 CC 74 6C 74 0D 4D 03 18 EB 86 C2 6F 2D C6 AB EF 57 01 FB 7C 6D 92 72 58 02 9C 35 2F BF 32 35 E7 26 5E 48 9E D9 81 B2 13 14 DF FA 7C D3 F7 09 D4 8B 01 4E 2C 1B BC B5 80 A9 36 32 86 13 DB D2 58 52 34 93 54 23 48 68 8E 05 A5 83 0A D0 EC D5 BA 0E E5 C5 3E 58 6E 9C F4 D8 D5 CE 53 D7 03 D7 3A 92 A9 71 10 F6 7C 1C 42 30 71 12 B1 E8 15 75 0A C3 8E 11 8E 95 C5 E8 42 8F 11 B4 E2 1E DF 78 EE FF FE 43 C6 53 E5 B2 45 CB FE B8 AE 19 1A 62 78 10 EE E3 A1 AD AA 3E 13 75 EB 7C A2 19 84 31 3D D8 BD 7D 35 43 A4 A8 F6 B3 01 C9 30 A3 F6 A8 3B DD 9E 71 5C C8 A0 BB 46 72 E4 CC 4A A0 09 46 F3
<- 69 85
-> 84 E6 0C 00 38 4F 24 95 04 0B 3A DE 26 82 5E CB 04 65 42 EB 3E 4F 8A 6D 37 18 E0 79 79 44 1F 58 55 DB 4E 50 BC 8F 4D 73 2A BC 60 80 42 60 A9 9B 3E 81 0A 95 85 DA 65 2B AA 91 82 CF 7A
<- 6A 88
Could not load applet. See debug for more info

我错了什么?

而且我对我的程序的process方法感到有些困惑。

在第一行中,我将APDU缓冲区的内容复制到名为Received的数组中:

    byte[] received=arg0.getBuffer();

在第二行中,我添加了一个数组的最后一个成员:

    ++received[(short)(received.length+1)];

现在我将APDU缓冲区发送给用户:

    arg0.setOutgoingAndSend((short)0, (short)received.length); 

右?如果是这样,我没有改变接收APDU命令!我刚收到它,制作了它的副本,更改了副本,然后再次发送原始缓冲区!正确?

1 个答案:

答案 0 :(得分:0)

加载软件的自述文件具有获得支持的非常简单的指南:

https://github.com/martinpaljak/GlobalPlatformPro#contact

此外,您的包名称表明您没有使用最新版本。请在发送任何日志之前使用最新版本。

我怀疑小程序不适合您的卡,因为您使用的是您的卡所没有的功能(包)。在这种情况下,我怀疑你的上限是针对较新的javacard版本。