使用 JCOP SDK 时 JavaCard CAP 转换失败并出现“无效 AID”错误

问题描述 投票:0回答:1

我尝试了大约 100 种不同的

converter
命令、不同的 AID,仅使用小程序 AID,删除了“1.0”。它总是导致“无效的 AID”。

我使用不同的 Java 版本和 XML 成功创建了一次 cap,但 cap 文件几乎有 400kB,而且显然创建不正确。

我正在使用并且更喜欢 Java 7。

命令如下:

./converter.sh \
  -classdir /Users/X/Desktop/javacard/emvcoapplet/bin \
  -d /Users/X/Desktop/javacard/emvcoapplet/cap \
  -exportpath /Users/X/Desktop/javacard/jc320v24.0_kit/lib/api_classic-3.0.5.jar \
  -applet A000000333010101 emvcoapplet.EMVCoApplet \
  emvcoapplet 1.0 A0000003330102

产生的错误消息:

Error Message:error: invalid AID A000000333010101.
Usage for compact CAP files:
    converter <options> package_name package_aid major_version.minor_version
    OR
    converter -config <filename>
    ...

小程序片段:

package emvcoapplet;

import javacard.framework.*;
import javacard.security.*;
import javacardx.crypto.*;
import javacard.framework.ISO7816;
import javacard.framework.ISOException;

import javacard.framework.*;
import javacard.security.*;
import javacardx.crypto.*;

public class EMVCoApplet extends Applet {

    private static final byte[] AID = { (byte) 0xA0, 0x00, 0x00, 0x03, 0x33, 0x01, 0x01, 0x01 };
public static void install(byte[] bArray, short bOffset, byte bLength) {
        new EMVCoApplet().register(AID, (short) 0, (byte) AID.length);
    }

    private EMVCoApplet() {
        cipherAESCBC = Cipher.getInstance(Cipher.ALG_AES_BLOCK_128_CBC_NOPAD, false);
        initializePreStoredTLVStructure();
        initializeKeys();
        initializeOwnerPin();
    }

    public void process(APDU apdu) throws ISOException {
        byte[] buffer = apdu.getBuffer();
        byte cla = buffer[ISO7816.OFFSET_CLA];
        byte ins = buffer[ISO7816.OFFSET_INS];

        try {
            if (selectingApplet()) {
                return;
            }

            if (buffer[ISO7816.OFFSET_CLA] != CLA_EMV_APPLET) {
                ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
            }....

项目结构:

emvcoapplet
├── bin
│   └── emvcoapplet
│       ├── EMVCoApplet$TLV.class
│       └── EMVCoApplet.class
├── build.xml
├── cap
├── lib
└── src
    └── emvcoapplet
        └── EMVCoApplet.java

Java 卡套件:

jc320v24.0_kit
├── bin
│   ├── capdump.bat
│   ├── capdump.sh
│   ├── capgen.bat
│   ├── capgen.sh
│   ├── converter.bat
│   ├── converter.sh
│   ├── exp2text.bat
│   ├── exp2text.sh
│   ├── verifycap.bat
│   ├── verifycap.sh
│   ├── verifyexp.bat
│   ├── verifyexp.sh
│   └── verifyrev.sh
├── legal
│   └── THIRDPARTYREADME.txt
└── lib
    ├── api_classic-3.0.4.jar
    ├── api_classic-3.0.5.jar
    ├── api_classic-3.1.0.jar
    ├── api_classic-3.2.0.jar
    ├── api_classic_annotations-3.0.4.jar
    ├── api_classic_annotations-3.0.5.jar
    ├── api_classic_annotations-3.1.0.jar
    ├── api_classic_annotations-3.2.0.jar
    ├── asm-9.4.jar
    ├── commons-cli-1.6.0.jar
    ├── commons-logging-1.3.0.jar
    ├── jctasks_tools.jar
    ├── json.jar
    ├── logging.properties
    └── tools.jar
applet javacard cap jcop
1个回答
0
投票

如果这就是答案,那么可能值得一巴掌,但这里是......

从错误信息来看:

major_version.minor_version package_aid major_version.minor_version

根据您的命令:

emvcoapplet 1.0 A0000003330102

版本号和AID已互换。

© www.soinside.com 2019 - 2024. All rights reserved.