2016-04-02 38 views
0

Basit bir JavaCard HelloWorld betiğim var, sanal okuyucu ile JCIDE'da çalıştırıyorum, sonra pyapdutool'dan apdu komutları gönderiyorum: 00a404000e yardım sonra 80000000 ve javacard dizesini alıyorum, her şey yolunda gidiyor. Sorum şu: Bu yanıt yerine bir tlv biçim verisini nasıl iade edebilirim? Bununla ilgili 4.3 numaralı kitapta ve google'da javacard komut dosyasında emv tlv etiketlerini uygulamak için tek bir örnek bulamadım. Birisi bunu anlamak için beni doğru yola sokabilir mi?EMV JavaCard APDU TLV'de Yanıt Format

Kısacası
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); 
    } 
    } 

: Ben bu biçimde yanıt göndermek için mümkün istiyorum, böyle bir şey: i http://www.emvlab.org/tlvutils/ giderken 6F1A840E315041592E5359532E4444463031A5088801025F2D02656E sonra deşifre edebilmek için.

cevap

0

Javacard'da birkaç TLV sınıfı var, ancak bunlar isteğe bağlı ve benim bildiğim kadarıyla bu sınıfları uygulayan herhangi bir kart yayıncısı yok. Yani birini yapabilirsiniz:

  • kod gömmek herhangi TLV hepsi
  • de değiştirmezseniz el parçaları oluşturmak ve veya
  • bir oluşumu her yeni TLV nesnesi için kodunuzda bunları arada kullanabilirsiniz nesneleri sen

Son seçenek hatasız ve javacard içinde ölçülebilir olması oldukça zordur, bu nedenle kendi TLV ayrıştırıcı/kodlayıcı inşa ilk seçeneklerle bir acemi sopa vardır ve çok rahatsız kez inşa deneyebilirsiniz eğer tlv ayrıştırıcısı

+0

JavaCard API'sine aşırı derecede düşkün değilim. Karmaşık, kaynak aç ve tamamen doğru değil. Basit bir TLV ayrıştırıcı/üreteci muhtemelen tercih edilmelidir. Benimkini paylaşamam. –