2012-04-22 47 views
3

我需要使用脫離字節代碼驗證器驗證Java卡程序(cap文件)。 我有手動修改帽文件中的信息,我想驗證新的帽文件是否是好的類型。字節代碼脫機驗證器的上限文件

我嘗試使用com.sun.javacard.scriptgen.CAP.verifyCAP()方法。我發送有效和無效的帽文件,但結果總是等於0.

+0

爲什麼不嘗試使用Java Card開發工具的CLI工具?如果你需要一個程序,那麼你可能只是直接調用主要方法... – 2012-04-23 00:44:20

+0

是的,但我嘗試使用Java程序,但結果是一樣的。 'capFile.verifyCAP()'或'com.sun.javacard.offcardverifier.Verifier'返回相同的結果。 – AAA 2012-04-23 21:16:08

+0

所以,離卡驗證者需要JAR cap文件,但是我發送了一個沒有JAR的cap文件。我修改我的程序來生成JAR cap文件。 然後我不能使用'int com.sun.javacard.scriptgen.CAP.verifyCAP()'方法。結果總是0. 然後我嘗試使用'com.sun.javacard.offcardverifier.Verifier.verifyCap(FileInputStream arg0,String arg1,Vector arg2)'方法,但我不知道我必須擁有哪些參數使用。 – AAA 2012-04-25 15:18:30

回答

1

我從來沒有發佈解決方案。那天終於到了;)

下載JavaCard SDK。它包含驗證器的編譯版本。例如java_card_kit-2_2_1。

我的文件:

./ 
./java_card_kit-2_2_1/ 
./java2CAP.sh 
./ValidApplet/ 
./ValidApplet/ValidApp.java 
./verifyCAP.sh 

java2CAP.sh:

#!/bin/bash 
export JC_HOME=./java_card_kit-2_2_1 
export CLASSPATH=$JC_HOME/lib/apduio.jar:$JC_HOME/lib/apdutool.jar:$JC_HOME/lib/jcwde.jar:$JC_HOME/lib/converter.jar:$JC_HOME/lib/scriptgen.jar:$JC_HOME/lib/offcardverifier.jar:$JC_HOME/lib/api.jar:$JC_HOME/lib/capdump.jar:$JC_HOME/lib/:$JC_HOME/samples/classes:$CLASSPATH 
PACKAGE=ValidApplet 
CLASS=ValidApp 
APPLET=$CLASS.java 
PACKAGE_AID=0x46:0x56:0x55:0x4c:0x4e:0x54:0x45:0x53:0x54:0x53 
APPLET_AID=0x46:0x56:0x55:0x4c:0x4e:0x54:0x45:0x53:0x54:0x53:0x41:0x70:0x70 
javac -g -source 1.3 -target 1.1 $PACKAGE/$APPLET 
java com.sun.javacard.converter.Converter -nobanner -out CAP -exportpath $JC_HOME/api_export_files -applet $APPLET_AID $CLASS $PACKAGE $PACKAGE_AID 1.0 -i 

verifyCAP.sh:

#!/bin/bash 
export JC_HOME=./java_card_kit-2_2_1 
export CLASSPATH=$JC_HOME/lib/apduio.jar:$JC_HOME/lib/apdutool.jar:$JC_HOME/lib/jcwde.jar:$JC_HOME/lib/converter.jar:$JC_HOME/lib/scriptgen.jar:$JC_HOME/lib/offcardverifier.jar:$JC_HOME/lib/api.jar:$JC_HOME/lib/capdump.jar:$JC_HOME/lib/:$JC_HOME/samples/classes:$CLASSPATH 

export CAPP_PATH=./ValidApplet/javacard 
export CAPP_NAME=ValidApplet.cap 

java -classpath $JC_HOME/lib/offcardverifier.jar com.sun.javacard.offcardverifier.Verifier $JC_HOME/api_export_files/javacard/framework/javacard/framework.exp $JC_HOME/api_export_files/java/lang/javacard/lang.exp $JC_HOME/api_export_files/javacard/security/javacard/security.exp $CAPP_PATH/$CAPP_NAME 

./ValidApplet/ValidApp.java:

package ValidApplet; 

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

public class ValidApp extends Applet //implements PIN 
{ 
    final static byte TEST_CLA = (byte)0x77; 

    public static class TestClassStatic {}; 

    protected ValidApp() 
    { 
     register(); 
    } 

    public static void install(byte[] bArray, short bOffset, byte bLength) 
    { 
     new ValidApp(); 
    } 

    public void process(APDU apdu) 
    { 
     byte buffer[] = apdu.getBuffer(); 

     try { 
      if (buffer[ISO7816.OFFSET_CLA] == TEST_CLA) { 
       test((byte)4, (short)2); 
      } else { 
       ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED); 
      } 
     } catch (ISOException e) { 

     } 
    } 
}