2016-04-02 32 views
0

私は単純なJavaCard HelloWorldスクリプトを持っています。仮想リーダーでJCIDEで実行してから、pyapdutoolからapduコマンドを送信します:0000404000eの助けを借りて80000000を返し、javacard文字列を受け取ります。私の質問は:どのように私はその応答の代わりにtlv形式のデータを返すことができますか?私はこれについてのemv本4.3を見ていたし、googleもjavacardスクリプトでemv tlvタグを実装するための一例を見つけていない。 誰かがこれを理解するために正しい道に私を置くことができますか?要するにTLV形式のEMV JavaCard APDU応答

package helloworld; 
import javacard.framework.*; 

public class helloworld extends Applet 
{ 
private static final byte[] javacard = {(byte)'J',(byte)'a',(byte)'v'(byte)'a',(byte)' ',(byte)'C',(byte)'a',(byte)'r',(byte)'d',(byte)'!',}; 
private static final byte JC_CLA = (byte)0x80; 
private static final byte JC_INS = (byte)0x00; 

public static void install(byte[] bArray, short bOffset, byte bLength) 
{ 
    new helloworld().register(bArray, (short) (bOffset + 1), bArray[bOffset]); 
} 

public void process(APDU apdu) 
{ 
    if (selectingApplet()) 
    { 
    return; 
    } 

    byte[] buf = apdu.getBuffer(); 

    byte CLA = (byte) (buf[ISO7816.OFFSET_CLA] & 0xFF); 
    byte INS = (byte) (buf[ISO7816.OFFSET_INS] & 0xFF); 

    if (CLA != JC_CLA) 
    { 
     ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED); 
    } 

    switch (buf[ISO7816.OFFSET_INS]) 
    { 
    case (byte)0x00: 
    OutPut(apdu); 
    break; 
    default: 
    ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED); 
    } 
} 

private void OutPut(APDU apdu) 
    { 
    byte[] buffer = apdu.getBuffer(); 
    short length = (short) javacard.length; 
    Util.arrayCopyNonAtomic(javacard, (short)0, buffer, (short)0, (short) length); 
    apdu.setOutgoingAndSend((short)0, length); 
    } 
    } 

:私はそれをデコードすることができるようにhttp://www.emvlab.org/tlvutils/に行くときに6F1A840E315041592E5359532E4444463031A5088801025F2D02656E:私は、この形式でのようなものが応答を送信できるようにしたいです。

答えて

0

JavacardにはいくつかのTLVクラスがありますが、これらはオプションであり、私の知る限り、これらのクラスを実装したカード発行者はいません。だから、次のいずれかです。

  • 打ち任意のTLVは、彼らがすべての
  • で変更しない場合は、手動で部品を構築し、 または
  • のoccuranceすべての新しいTLVオブジェクトのコード内でそれらを連結することができますオブジェクトます

最後のオプションは、エラーフリーとジャバカードでパフォーマンスすることはかなり困難であるので、あなた自身のTLVパーサー/エンコーダ構築は、最初のオプションで初心者スティックであり、あなたがあまりにもイライラしている一度あなたが構築しようとすることができる場合tlvパーサ

+0

私はJavaCard APIをあまり好んでいません。それは複雑で、飢えており、完全には正しいとは言えません。単純なTLVパーサ/ジェネレータが推奨されるはずです。私のことを共有することはできません。 –