Java Card APDU's

Hello,
I'm new to Java Card and I'm having trouble getting started. I installed the Java Card plugin into Eclipse and I also set up Netbeans with the plugins as well. I know how to convert the java file into a .cap file and from there into a script. In Eclipse I'm successful in running the script with the CREF but I don't really know how to work with the output. When working with Java I can fix my programs by seeing what's happening but I can't do that with Java Card. In Netbeans I saw that you can send APDU commands to their Default Device. Is there somewhere I can go to find out what commands to send to it to interact with my applet?
I want to understand how this works before putting a cap file on a smart card...or is that the only way to test it?

You can also use OpenCard Framework (OCF) to communicate with the CREF emulator from a host application. You should be able to search the forum for related posts for details.
It is a very good idea to test against an emulator when developing as it is faster and may allow you to debug your code as well. Just remember that the CREF and JCWDE emulators have limitations. These are described in the documentation that ships with the JCDK.
Cheers
Shane

Similar Messages

  • Urgent ! writing a java card applet -APDU problem

    hi
    i'm fairly new to the java programming language. i'm trying to write an RSA java card applet to run on a java card simulator.
    I am not sure at all what code i need to write for the CLA byte in the command APDU and what code i need to write for the INS byte in the command APDU, and where exactly to put it in my program.
    if anybody knows please could you help me out.
    So far i have written the code below.
    thanx
    louise
    import javacard.framework.*;
    import java.math.*;
    import java.util.*;
    /*the public key is the public part of the key. Anyone
    can have it. It can only encrypt data, not decrypt.*/
    public class publickey extends Applet{
    //code of the CLA byte in the command APDU header
    final static byte publickey_CLA = (byte)0x00;
    //max number of characters for text message is 60
    final static char MAX_TXT_MSG = 0x3c;
    //MAX number of tries (3) before PIN is blocked
    final static byte PIN_TRY_LIMIT = (byte)0x03;
    //size of PIN must be 4 digits long
    final static byte PIN_SIZE = (byte)0x04;
    //below status word(SW) values are returned by applet
    //in certain circumstances:
    //signal that the PIN verification failed
    final static short SW_PIN_VERIFICATION_FAIL = 0x6300;
    //signal that PIN validation required for txt msging
    final static short SW_PIN_VERIFICATION_REQUIRED = 0x630;
    //instance variables declaration
    OwnerPIN pin; //variable for holding owners pin
    BigInteger n,e;
    String owner;//variable for holding owners name
    /*make a public key. Do not do it yourself, but
    make a public key from a private key.*/
    publickey(String iowner,BigInteger in,BigInteger ie){
    owner=iowner;
    n=in;
    e=ie;
    public void process (APDU apdu) {
    byte[] buffer = apdu.getBuffer();
    //check Select APDU command
    if((buffer[ISO7816.OFFSET_CLA] ==0) &&
    (buffer[ISO7816.OFFSET_INS] ==(byte) (0xA4)) )
    return;
    if(buffer[ISO7816.OFFSET_CLA] !=publickey_CLA)
    ISOException.throwIt
    (ISO7816.SW_CLA_NOT_SUPPORTED);
    /*read the key back from a string.*/
    publickey(String from){
    StringTokenizer st=new StringTokenizer(from," ");
    owner=st.nextToken();
    n=readBI(st.nextToken());
    e=readBI(st.nextToken());
    /*use the key to encrypt a 'message' m. m should be a
    number from 1 to n (n not included).
    use makemessage to convert your message to a BigInteger.
    BigInteger encrypt(BigInteger m){
    return m.modPow(e,n);
    /*make a string from this key.*/
    public String toString(){
    return owner+" "+printBI(n)+" "+printBI(e);
    /*help methods for reading and writing:*/
    final static int radix=36;
    static String printBI(BigInteger b){
    return b.toString(radix);
    static BigInteger readBI(String s){
    return new BigInteger(s,radix);
    /* these methods convert an arbitrary message,
    in the form of an array of bytes, to a message
    suitable for encryption. To do this random bits
    are added (this is needed to make cracking of the
    system harder), and it is converted to a BigInteger.*/
    BigInteger makemessage(byte[] input){
    /*to understand this part of the program,
    read the description of the BigInteger constructor
    (in the standard java help). */
    if(input.length>128 ||
    input.length*8+24>=n.bitLength())
    return new BigInteger("0"); //error! message to long.
    byte[] paddedinput=new byte[n.bitLength()/8-1];
    for(int i=0;i<input.length;i++)
    paddedinput[i+1]=input;
    paddedinput[0]=(byte)input.length;
    for(int i=input.length+1;i<paddedinput.length;i++)
    paddedinput[i]=(byte)(Math.random()*256);
    return new BigInteger(paddedinput);
    /*the inverse of makemessage.*/
    static byte[] getmessage(BigInteger b){
    byte[] paddedoutput=b.toByteArray();
    byte[] output=new byte[paddedoutput[0]];
    for(int i=0;i<output.length;i++)
    output[i]=paddedoutput[i+1];
    return output;
    class privatekey{
    /*the data of a key*/
    BigInteger n,e,d;
    String owner;
    int bits;
    Random ran;
    /*unimportant things, needed for calculations:*/
    static int certainty=32;
    static BigInteger one=new BigInteger("1"),
    three=new BigInteger("3"),
    seventeen=new BigInteger("17"),
    k65=new BigInteger("65537");
    /*make a new key. supply the name of the owner of the
    key, and the number of bits.
    owner: all spaces will be replaced with underscores.
    bits: the more bits the better the security. Every
    value above 500 is 'safe'. If you are a really paranoid
    person, you should use 2000.*/
    privatekey(String iowner,int ibits){
    BigInteger p,q;
    bits=ibits;
    owner=iowner.replace(' ','_');//remove spaces from owner name.
    ran=new Random();
    p=new BigInteger(bits/2,certainty,ran);
    q=new BigInteger((bits+1)/2,certainty,ran);
    n=p.multiply(q);
    BigInteger fi_n=fi(p,q);
    e=chooseprimeto(fi_n);
    d=e.modInverse(fi_n);
    /*read the key back from a string*/
    privatekey(String from){
    StringTokenizer st=new StringTokenizer(from," ");
    st.nextToken();
    n=readBI(st.nextToken());
    e=readBI(st.nextToken());
    d=readBI(st.nextToken());
    /*some help methods:*/
    static BigInteger fi(BigInteger prime1,BigInteger prime2){
    return prime1.subtract(one).multiply(prime2.subtract(one));
    static BigInteger BI(String s)
    {return new BigInteger(s);}
    BigInteger chooseprimeto(BigInteger f){
    /*returns a number relatively prime to f.
    this number is not chosen at random, it first
    tries a few primes with few 1's in it. This
    doesn't matter for security, but speeds up computations.*/
    if(f.gcd(three).equals(one))
    return three;
    if(f.gcd(seventeen).equals(one))
    return seventeen;
    if(f.gcd(k65).equals(one))
    return k65;
    BigInteger num;
    do{
    num=new BigInteger(16,ran);
    }while(!f.gcd(num).equals(one));
    return num;
    final static int radix=36;
    static String printBI(BigInteger b){
    return b.toString(radix);
    static BigInteger readBI(String s){
    return new BigInteger(s,radix);
    /*returns the public key of this private key.*/
    publickey getpublickey(){
    return new publickey(owner,n,e);
    /*the same encryption that the public key does.*/
    BigInteger encrypt(BigInteger m){
    return m.modPow(e,n);
    /*decryption is the opposite of encryption: it
    brings the original message back.*/
    BigInteger decrypt(BigInteger m){
    return m.modPow(d,n);
    public String toString(){
    return owner+" "+printBI(n)+" "+printBI(e)+" "+printBI(d);
    /*this main demonstrates the use of this program.*/
    public static void main(String[] ps){
    say("************ make key:");
    privatekey priv=new privatekey("sieuwert",92);
    publickey pub=priv.getpublickey();
    say("the public key:"+priv);
    say("************ encrypt message:");
    byte[] P="RUOK?".getBytes();
    BigInteger Pc=pub.makemessage(P);
    say("converted:\t"+printBI(Pc));
    BigInteger C=pub.encrypt(Pc);
    say("coded message: "+printBI(C));
    say("************ decrypt message:");
    BigInteger Pc2=priv.decrypt(C);
    say("decoded:\t"+printBI(Pc2));
    byte[] P2=publickey.getmessage(Pc2);
    say("deconverted: "+new String(P2));
    static void say(String s){
    System.out.println(s);

    Command APDU is not written in your source code, rather it is sent from PC or programmed Card Acceptance Device/ Card Reader/ Terminal.
    The code installed in the Java Card should be able to handle the Command APDU received and process it accordingly, and finally your code should be able to send out response APDU.
    You may think your code as a decoder, to retrieve each byte (CLA, INS, P1, P2, DATA, LC) using the Java Card API, you should be able to do it.
    Also, I notice in your code that you want to work out with strings, but Java Card does not support strings, chars, long, float, double ...
    to send out reponse APDU, there are certain steps that you can use, not just simply print like ordinary J2SE may use.
    hope this will help u

  • I cannot load my java card applet Response APDU: 69 85

    I know there have been many threads on this subject, I am a newbie to Java card development.
    Please someone help me.
    I am using the gpj for downloading the applet.
    The following is the output from the command "java -jar gpj.jar -load JCHelloWorld.cap -install"
    Thanks in advance
    run:
    Found terminals: [PC/SC terminal Generic PCSC Smartcard Reader 0]
    Found card in terminal: Generic PCSC Smartcard Reader 0
    ATR: 3B DB 96 00 80 B1 FE 45 1F 83 00 31 C0 64 C7 FC 10 00 01 90 00 74
    INFO: Selecting Security Domain OP201a, AID=A000000003000000
    DEBUG: Command APDU: 00 A4 04 00 08 A0 00 00 00 03 00 00 00
    DEBUG: Response APDU: 6F 6E 84 08 A0 00 00 00 03 00 00 00 A5 62 73 2F 06 07 2A 86 48 86 FC 6B 01 60 0C 06 0A 2A 86 48 86 FC 6B 02 02 01 01 63 09 06 07 2A 86 48 86 FC 6B 03 64 0B 06 09 2A 86 48 86 FC 6B 04 01 05 9F 6E 2A 48 20 50 2B 82 31 80 30 00 63 03 12 63 00 07 BB 03 00 11 42 12 97 11 43 12 97 11 44 12 97 01 00 00 00 00 00 00 00 00 00 00 00 9F 65 01 FF 90 00
    Successfully selected Security Domain OP201a A0 00 00 00 03 00 00 00
    DEBUG: Command APDU: 80 50 00 00 08 FC 81 DB FE 80 72 19 28
    DEBUG: Response APDU: 00 00 03 12 63 00 07 BB 03 00 FF 01 DA 26 EF 49 10 B7 72 00 9A 24 7F B4 A0 1F C7 C8 90 00
    INFO: INITIALIZE UPDATE Successful
    DEBUG: Command APDU: 84 82 00 00 10 D5 41 CE BE F4 A8 E4 DD 36 6C C5 3E 19 9C 77 93
    DEBUG: Response APDU: 90 00
    DEBUG: Command APDU: 84 82 00 00 08 D5 41 CE BE F4 A8 E4 DD
    DEBUG: Response APDU: 90 00
    INFO: External Authentication Successful
    DEBUG: packagePath: com/samptah/card/javacard/
    DEBUG: package: com.samptah.card
    DEBUG: package AID: 9C 25 F6 5E AB 3F
    DEBUG: applet AIDs: [9C 25 F6 5E AB CD ]
    DEBUG: Command APDU: 80 E6 02 00 13 06 9C 25 F6 5E AB 3F 08 A0 00 00 00 03 00 00 00 00 00 00
    DEBUG: Response APDU: 00 90 00
    DEBUG: Command APDU: 80 E8 00 00 FF C4 82 01 4C 01 00 10 DE CA FF ED 01 02 04 00 01 06 9C 25 F6 5E AB 3F 02 00 1F 00 10 00 1F 00 0A 00 15 00 2E 00 0C 00 7F 00 18 00 12 00 00 00 6F 00 02 00 01 00 0B 02 01 00 04 00 15 02 04 01 07 A0 00 00 00 62 01 01 00 01 07 A0 00 00 00 62 00 01 03 00 0A 01 06 9C 25 F6 5E AB CD 00 08 06 00 0C 00 80 03 00 FF 00 07 01 00 00 00 1C 07 00 7F 00 01 10 18 8C 00 00 7A 05 30 8F 00 01 3D 8C 00 02 18 1D 04 41 18 1D 25 8B 00 03 7A 02 23 18 8B 00 04 60 03 7A 19 8B 00 05 2D 1A 03 25 11 00 FF 53 5B 32 1A 04 25 11 00 FF 53 5B 29 04 1F 10 80 6A 08 11 6E 00 8D 00 06 16 04 75 00 10 00 01 00 00 00 09 18 19 8C 00 07 70 08 11 6D 00 8D 00 06 7A 05 22 19 8B 00 05 2D 7B 00 08 92 32 7B 00 08 03 1A 03 1F 8D 00 09 3B 19 03 1F 8B 00 0A 7A 08 00 18 00 02 00 01 00 01 03 00 0B 48 65 6C 6C
    DEBUG: Response APDU: 69 85
    net.sourceforge.gpj.cardservices.exceptions.GPLoadException: Load failed, SW: 69 85
    at net.sourceforge.gpj.cardservices.GlobalPlatformService.loadCapFile(GlobalPlatformService.java:707)
    at net.sourceforge.gpj.cardservices.GlobalPlatformService.main(GlobalPlatformService.java:1675)
    at gpj.Main.main(Main.java:26)
    BUILD SUCCESSFUL (total time: 1 second)

    Quite similar problem here. Here's what I got from GPShell:
    enable_trace
    establish_context
    card_connect
    select -AID a0000000030000
    Command --> 00A4040007A0000000030000
    Wrapped command --> 00A4040007A0000000030000
    Response <-- 6F658408A000000003000000A5599F6501FF9F6E06479181023100734A06072A864
    886FC6B01600C060A2A864886FC6B02020101630906072A864886FC6B03640B06092A864886FC6B0
    40215650B06092B8510864864020103660C060A2B060104012A026E01029000
    open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4
    f -enc_key 404142434445464748494a4b4c4d4e4f // Open secure channel
    Command --> 805000000804C1C46CBC9932AA00
    Wrapped command --> 805000000804C1C46CBC9932AA00
    Response <-- 000010700108859552580101AA4F3AEC5503E7A7435A0560E047AF489000
    Command --> 84820100100C2766279A1FC158181037B7A811AB93
    Wrapped command --> 84820100100C2766279A1FC158181037B7A811AB93
    Response <-- 9000
    delete -AID D0D1D2D3D4D50101
    Command --> 80E400000A4F08D0D1D2D3D4D5010100
    Wrapped command --> 84E40000124F08D0D1D2D3D4D501014018673D5E89975900
    Response <-- 6A88
    delete() returns 0x80206A88 (6A88: Referenced data not found.)
    delete -AID D0D1D2D3D4D501
    Command --> 80E40000094F07D0D1D2D3D4D50100
    Wrapped command --> 84E40000114F07D0D1D2D3D4D501887135A5C0B424D500
    Response <-- 6A88
    delete() returns 0x80206A88 (6A88: Referenced data not found.)
    delete -AID D0D1D2D3D4D50101
    Command --> 80E400000A4F08D0D1D2D3D4D5010100
    Wrapped command --> 84E40000124F08D0D1D2D3D4D501017144DF5DE0D2DE9F00
    Response <-- 6A88
    delete() returns 0x80206A88 (6A88: Referenced data not found.)
    install -file helloworld.cap -nvDataLimit 500 -instParam 00 -priv 2
    Command --> 80E602001907D0D1D2D3D4D50107A00000000300000006EF04C60201600000
    Wrapped command --> 84E602002107D0D1D2D3D4D50107A00000000300000006EF04C602016000
    C6EDAE8F91652A3B00
    Response <-- 6A88
    install_for_load() returns 0x80206A88 (6A88: Referenced data not found.)And this is what I've got from gpj
    Found terminals: [PC/SC terminal ACS ACR1281 1S Dual Reader ICC 0, PC/SC termina
    l ACS ACR1281 1S Dual Reader PICC 0, PC/SC terminal ACS ACR1281 1S Dual Reader S
    AM 0]
    Found card in terminal: ACS ACR1281 1S Dual Reader ICC 0
    ATR: 3B F8 18 00 00 81 31 FE 45 4A 43 4F 50 76 32 34 31 BC
    DEBUG: Command  APDU: 00 A4 04 00 07 A0 00 00 01 51 00 00
    DEBUG: Response APDU: 6A 82
    Failed to select Security Domain GP211 A0 00 00 01 51 00 00 , SW: 6A 82
    DEBUG: Command  APDU: 00 A4 04 00 08 A0 00 00 00 18 43 4D 00
    DEBUG: Response APDU: 6A 82
    Failed to select Security Domain GemaltoXpressPro A0 00 00 00 18 43 4D 00 , SW:
    6A 82
    DEBUG: Command  APDU: 00 A4 04 00 08 A0 00 00 00 03 00 00 00
    DEBUG: Response APDU: 6F 65 84 08 A0 00 00 00 03 00 00 00 A5 59 9F 65 01 FF 9F 6
    E 06 47 91 81 02 31 00 73 4A 06 07 2A 86 48 86 FC 6B 01 60 0C 06 0A 2A 86 48 86
    FC 6B 02 02 01 01 63 09 06 07 2A 86 48 86 FC 6B 03 64 0B 06 09 2A 86 48 86 FC 6B
    04 02 15 65 0B 06 09 2B 85 10 86 48 64 02 01 03 66 0C 06 0A 2B 06 01 04 01 2A 0
    2 6E 01 02 90 00
    Successfully selected Security Domain OP201a A0 00 00 00 03 00 00 00
    DEBUG: Command  APDU: 80 50 00 00 08 A5 6A EB 5F E3 31 30 37
    DEBUG: Response APDU: 00 00 10 70 01 08 85 95 52 58 01 01 2E 43 22 1A A3 0A 65 4
    0 AA 8B D1 2A D5 89 8D 70 90 00
    DEBUG: Command  APDU: 84 82 00 00 10 B8 3A E1 AD 36 01 D8 E3 5F CC 77 B4 A7 F2 B
    E 68
    DEBUG: Response APDU: 90 00
    DEBUG: Command  APDU: 84 82 00 00 08 B8 3A E1 AD 36 01 D8 E3
    DEBUG: Response APDU: 90 00
    DEBUG: packagePath: com/tru/card/javacard/
    DEBUG: package: com.tru.card
    DEBUG: package AID: C3 79 3E 65 A1 00 EB F3 FD 20
    DEBUG: applet AIDs: [C3 79 3E 65 A1 C9 85 3B ]
    DEBUG: Command  APDU: 80 E6 02 00 17 0A C3 79 3E 65 A1 00 EB F3 FD 20 08 A0 00 0
    0 00 03 00 00 00 00 00 00
    DEBUG: Response APDU: 00 90 00
    DEBUG: Command  APDU: 80 E6 02 00 17 0A C3 79 3E 65 A1 00 EB F3 FD 20 08 A0 00 0
    0 00 03 00 00 00 00 00 00
    DEBUG: Response APDU: 00 90 00
    DEBUG: Command  APDU: 80 E8 00 00 FF C4 82 04 32 01 00 14 DE CA FF ED 01 02 04 0
    0 01 0A C3 79 3E 65 A1 00 EB F3 FD 20 02 00 1F 00 14 00 1F 00 0C 00 15 00 86 00
    12 02 CE 00 0A 00 53 00 00 00 F9 00 00 00 00 00 00 02 01 00 04 00 15 02 04 01 07
    A0 00 00 00 62 01 01 00 01 07 A0 00 00 00 62 00 01 03 00 0C 01 08 C3 79 3E 65 A
    1 C9 85 3B 00 01 06 00 12 00 80 03 0C 00 06 04 04 00 00 00 0C FF FF FF FF 01 27
    07 02 CE 00 02 30 8F 00 0C 3D 8C 00 0E 3B 7A 01 10 18 8C 00 0D AD 00 8B 00 0F 7A
    05 10 18 8C 00 10 18 10 08 88 01 18 11 3F 02 89 02 18 11 3F 03 89 03 18 11 3F 0
    4 89 04 18 11 3F 05 89 05 18 8B 00 1E 18 10 08 90 0B 3D 03 10 54 38 3D 04 10 52
    38 3D 05 10 55 38 3D 06 10 53 38 3D 07 10 4D 38 3D 08 10 41 38 3D 10 06 10 52 38
    3D 10 07 10 54 38 87 06 18 10 06 90 0B 3D 03 10 54 38 3D 04 10 53 38 3D 05 10 4
    3
    DEBUG: Response APDU: 6A 80
    DEBUG: Command  APDU: 80 E8 00 00 FF C4 82 04 32 01 00 14 DE CA FF ED 01 02 04 0
    0 01 0A C3 79 3E 65 A1 00 EB F3 FD 20 02 00 1F 00 14 00 1F 00 0C 00 15 00 86 00
    12 02 CE 00 0A 00 53 00 00 00 F9 00 00 00 00 00 00 02 01 00 04 00 15 02 04 01 07
    A0 00 00 00 62 01 01 00 01 07 A0 00 00 00 62 00 01 03 00 0C 01 08 C3 79 3E 65 A
    1 C9 85 3B 00 01 06 00 12 00 80 03 0C 00 06 04 04 00 00 00 0C FF FF FF FF 01 27
    07 02 CE 00 02 30 8F 00 0C 3D 8C 00 0E 3B 7A 01 10 18 8C 00 0D AD 00 8B 00 0F 7A
    05 10 18 8C 00 10 18 10 08 88 01 18 11 3F 02 89 02 18 11 3F 03 89 03 18 11 3F 0
    4 89 04 18 11 3F 05 89 05 18 8B 00 1E 18 10 08 90 0B 3D 03 10 54 38 3D 04 10 52
    38 3D 05 10 55 38 3D 06 10 53 38 3D 07 10 4D 38 3D 08 10 41 38 3D 10 06 10 52 38
    3D 10 07 10 54 38 87 06 18 10 06 90 0B 3D 03 10 54 38 3D 04 10 53 38 3D 05 10 4
    3
    DEBUG: Response APDU: 6A 80
    net.sourceforge.gpj.cardservices.exceptions.GPLoadException: Load failed, SW: 6A
    80
            at net.sourceforge.gpj.cardservices.GlobalPlatformService.loadCapFile(Un
    known Source)
            at net.sourceforge.gpj.cardservices.GlobalPlatformService.main(Unknown S
    ource)
    javax.smartcardio.CardNotPresentException: No card present
            at sun.security.smartcardio.TerminalImpl.connect(Unknown Source)
            at net.sourceforge.gpj.cardservices.GlobalPlatformService.main(Unknown S
    ource)
    Caused by: sun.security.smartcardio.PCSCException: SCARD_W_REMOVED_CARD
            at sun.security.smartcardio.PCSC.SCardConnect(Native Method)
            at sun.security.smartcardio.CardImpl.<init>(Unknown Source)
            ... 2 more
    Found card in terminal: ACS ACR1281 1S Dual Reader PICC 0
    java.lang.NullPointerException
            at net.sourceforge.gpj.cardservices.GlobalPlatformService.main(Unknown S
    ource)
    javax.smartcardio.CardNotPresentException: No card present
            at sun.security.smartcardio.TerminalImpl.connect(Unknown Source)
            at net.sourceforge.gpj.cardservices.GlobalPlatformService.main(Unknown S
    ource)
    Caused by: sun.security.smartcardio.PCSCException: SCARD_W_REMOVED_CARD
            at sun.security.smartcardio.PCSC.SCardConnect(Native Method)
            at sun.security.smartcardio.CardImpl.<init>(Unknown Source)
            ... 2 more
    Found card in terminal: ACS ACR1281 1S Dual Reader SAM 0
    java.lang.NullPointerException
            at net.sourceforge.gpj.cardservices.GlobalPlatformService.main(Unknown S
    ource)What can I do to fix this? Did I missed any steps? Thanks for any reply.

  • Does java card support PIN encryption on APDU Verify Command???

    hello
    I want to know if java card allows PIN encryption in the APDU verify command? because such an action necessits that a section key has to be set between the server (SC applet) and the client application.
    thanks a lot

    Many Java cards support the GlobalPlatform Open Platform specification
    which can be downloaded for free from http://www.globalplatform.org .
    This specification contains a mechanism called "secure messaging".
    All APDUs sent to applications or the cardmanager and the corresonding
    responses can be enrypted when using secure messaging.
    In order to use secure messaging a "mutual authentication" is necessary
    where the off-card entity authenticates itself to an application,
    e.g. the card manager, and the application authenticates itself to the
    off-card entity.
    Naturally, this involves static keys on/off-card and session keys.

  • Java Card without APDU

    Hi,
    during my practise with Java Card I'm finally able to write some applets. I did this the "classic" way. This means to install the .cap files using the APDU tool. But that is not really what I am looking for. I like to develop in the embedded sector and not smartcards. So my question is whether there is a way to use the Java Card VM without at least the APDU stuff. I found something about ROM applets. Are there still any APDU commands needed if I burn the applet in the ROM( any interface between user and applet isn't required (like PIN validation)). Or are there maybe other ways to avoid the installer.
    thanks

    then how will you do I/O with the card?
    to verify a PIN, an apdu exchange is required.
    do you want to code a library to be used by other applets? Just code it in java, put it in a cap, upload the cap. Then link the applet with the export file generated when you converted the library. ROM is not needed to write a library.
    javacard by itself does no specify anything to allow rom access. To do this, you have to deal with the card manufacturer (gemalto, nxp, etc)
    (And ROM is ROM, it cannot be burnt, it's made with a mask when the silicon chip is done.
    Only EEPROM or OTP EPROM can be burned.)
    Regards

  • Please ..give me some example APDU for writing data to java card

    morning everybody .. :)
    I need some example APDUs for writing data to java card. (CLA || INS || P1 || P2 etc)..
    please..thank for your attention .. god blessing u.

    Hi,
    did you check some articles about JavaCards:
    [Understanding Java Card 2.0|http://www.javaworld.com/cgi-bin/mailto/x_java.cgi?pagetosend=/export/home/httpd/javaworld/javaworld/jw-03-1998/jw-03-javadev.html&pagename=/javaworld/jw-03-1998/jw-03-javadev.html&pageurl=http://www.javaworld.com/javaworld/jw-03-1998/jw-03-javadev.html&site=jw_core]
    [How to write a Java Card applet: A developer's guide|http://www.javaworld.com/cgi-bin/mailto/x_java.cgi?pagetosend=/export/home/httpd/javaworld/javaworld/jw-07-1999/jw-07-javacard.html&pagename=/javaworld/jw-07-1999/jw-07-javacard.html&pageurl=http://www.javaworld.com/javaworld/jw-07-1999/jw-07-javacard.html&site=jw_core]
    Hope it helps,
    Tex

  • How to check the output of a java card program ?

    Hi,
    I am new to java card technology.I am trying to run a simple helloworld program given in the java development kit2.2 -windows samples in eclipse3.5.
    For running I followed the following steps:-
    1) Firstly,I went to JCWDE->start
    2) then on Project->java tools->deploy
    It shows me following output :-
    Java Card 2.2.2 APDU Tool, Version 1.3
    Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.
    Opening connection to localhost on port 9025.
    Connected.
    Received ATR = 0x3b 0xf0 0x11 0x00 0xff 0x00
    CLA: 00, INS: a4, P1: 04, P2: 00, Lc: 09, a0, 00, 00, 00, 62, 03, 01, 08, 01, Le: 00, SW1: 90, SW2: 00
    CLA: 80, INS: b0, P1: 00, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
    CLA: 80, INS: b2, P1: 01, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
    CLA: 80, INS: b4, P1: 01, P2: 00, Lc: 18, 01, 00, 15, de, ca, ff, ed, 01, 02, 04, 00, 01, 0b, 01, 02, 03, 04, 05, 06, 07, 08, 09, 00, 01, Le: 00, SW1: 64, SW2: 3a
    CLA: 80, INS: bc, P1: 01, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b2, P1: 02, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b4, P1: 02, P2: 00, Lc: 20, 02, 00, 1f, 00, 15, 00, 1f, 00, 0f, 00, 15, 00, 36, 00, 0c, 00, 69, 00, 0a, 00, 14, 00, 00, 00, 6c, 00, 00, 00, 00, 00, 00, 02, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b4, P1: 02, P2: 00, Lc: 02, 01, 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: bc, P1: 02, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b2, P1: 04, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b4, P1: 04, P2: 00, Lc: 18, 04, 00, 15, 02, 03, 01, 07, a0, 00, 00, 00, 62, 01, 01, 00, 01, 07, a0, 00, 00, 00, 62, 00, 01, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: bc, P1: 04, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b2, P1: 03, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b4, P1: 03, P2: 00, Lc: 12, 03, 00, 0f, 01, 0b, 01, 02, 03, 04, 05, 06, 07, 08, 09, 00, 00, 00, 14, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: bc, P1: 03, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b2, P1: 06, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b4, P1: 06, P2: 00, Lc: 0f, 06, 00, 0c, 00, 80, 03, 01, 00, 01, 07, 01, 00, 00, 00, 21, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: bc, P1: 06, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b2, P1: 07, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b4, P1: 07, P2: 00, Lc: 20, 07, 00, 69, 00, 02, 10, 18, 8c, 00, 01, 18, 11, 01, 00, 90, 0b, 87, 00, 18, 8b, 00, 02, 7a, 02, 30, 8f, 00, 03, 3d, 8c, 00, 04, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b4, P1: 07, P2: 00, Lc: 20, 8b, 00, 02, 7a, 05, 23, 19, 8b, 00, 05, 2d, 19, 8b, 00, 06, 32, 03, 29, 04, 70, 19, 1a, 08, ad, 00, 16, 04, 1f, 8d, 00, 0b, 3b, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b4, P1: 07, P2: 00, Lc: 20, 16, 04, 1f, 41, 29, 04, 19, 08, 8b, 00, 0c, 32, 1f, 64, e8, 19, 8b, 00, 07, 3b, 19, 16, 04, 08, 41, 8b, 00, 08, 19, 03, 08, 8b, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b4, P1: 07, P2: 00, Lc: 0c, 00, 09, 19, ad, 00, 03, 16, 04, 8b, 00, 0a, 7a, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: bc, P1: 07, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b2, P1: 08, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b4, P1: 08, P2: 00, Lc: 0d, 08, 00, 0a, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: bc, P1: 08, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b2, P1: 05, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b4, P1: 05, P2: 00, Lc: 20, 05, 00, 36, 00, 0d, 02, 00, 00, 00, 06, 80, 03, 00, 03, 80, 03, 01, 01, 00, 00, 00, 06, 00, 00, 01, 03, 80, 0a, 01, 03, 80, 0a, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b4, P1: 05, P2: 00, Lc: 19, 06, 03, 80, 0a, 07, 03, 80, 0a, 09, 03, 80, 0a, 04, 03, 80, 0a, 05, 06, 80, 10, 02, 03, 80, 0a, 03, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: bc, P1: 05, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b2, P1: 09, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: b4, P1: 09, P2: 00, Lc: 17, 09, 00, 14, 00, 03, 0e, 27, 2c, 00, 0d, 05, 0c, 06, 04, 03, 07, 05, 10, 0c, 08, 09, 06, 09, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: bc, P1: 09, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    CLA: 80, INS: ba, P1: 00, P2: 00, Lc: 00, Le: 00, SW1: 64, SW2: 21
    Can anyone tell me what is this output? And Am i deplyoing in the right way?

    Hi,
    You might want to check the JCDK user guide (cJDK_Users_Guide_bin_do.pdf) for details of using an emulated card environment. It outlines how to use the simulators provided with the JCDK. This should tell you how the deploy process works and will give you some insight into what this script is doing.
    Cheers,
    Shane

  • How to load a java card applet into a java card

    Dear All,
    I am a novice to java card technology..
    I have done some search on how to load a java card applet into a smart card but haven't found a satisfactory answer. I have read about installer.jar and scriptgen tool but I want to load the applet from a java program and not from command line. It would be of great help if somebody can help me out.
    If somebody can share a sample program which load a javacard applet(.CAP file) into a smart card, I will be very thankful.
    I am able to find some client applications which help us send APDU commands and recieve response APDU's to interact with an applet loaded on to the smart card but not application which actually load the applet.
    I have heard of OCF and GP.. some say that OCF technology is outdated and no longer in use.. can somebosy throw some light on this too..
    cheers,
    ganesh

    hi siavash,
    thanks for the quick response.. i checked out GPShell as suggested, it looked like a tool by which one can load an applet on to card and send some sample apdu commands... but I want to load the applet from the code.
    My application should look something like this.. it will be a swing applicaton where I have a drop down with a list of readers, I select the one desired and then click on "LOAD" after inserting a blank java card, at this point my applet which is stored in my DB should get loaded on to the java card. The next step should be to personalize it where I enter the values for the static variables of my applet and click "PERSONALIZE", at this point all these values should be embedded into APDU commands and sent to the java card for processing.
    For achieving this I am yet to find a comprehensive sample or documentation on the net.
    Please help...
    regards,
    ganesh

  • Java card query

    I am a student in my final year of university and im looking into using the java card as part of my final project. could somebody clarify for me some things i am unsure of. Am i able to use any smart card reader or do i need one specific for a java card, if so which one. If i can use any im ok as i can get hold of some. Also, am i correct in that i would write my java code as normal then use a program to write it to the card? any help would be much appreciated. Thanks

    Hi,
    you can use any reader.
    the java code has to be compiled , then converted using the sun-provided JCDK tool "converter" then loaded in the card using globalplatform, with the gpshell tool.
    beware, there are some restrictions to what can be written in the code. specifically, there is no "int" "float" "java.lang.String" and the memory is very small.
    and yes, objects are allocated in non volatile memory. So the "new" keyword must not be used too often, except in the initialization methods.
    why? because the JC virtual machine is always live. it does not stop. When you tear the card, the VM is suspended, then resumed when you reinsert the card, but the objects are still here.
    when an apdu is sent to the card, the JCVM calls a callback in your code. But your Applet object still exists.
    regards
    sebastien.

  • Java Card Kit - development environment

    Hello!
    I need to upgrade to the latest Java Card Kit, because I need some of the classes in javacardx.framework, which is not supported by version 2.2.1.
    But some problems arises when I'm trying to use version 2.2.2
    1) It requires jdk1.5. Ok, no problem (ehh)
    2) I'm using eclipseME 1.6.0. This requires jdk 1.4.2.
    3) I downloaded WTK2.5 which supports jdk 1.5, but I cannot get this to work properly. This is the error output of WTK when my application tries to connect to the running cref-simulator:
    java.io.IOException: error 10054 during TCP read
    I have not found a solution for this problem yet. But my question is:
    What is the optimal development environment for java card 2.2.2? What kind of MIDlet-emulator and which version are people using together with java card 2.2.2? Is there a eclipse plugin that supports jdk 1.5?
    Regards
    Haavard

    Only cref can create and use EEPROM images.
    You do not communicate with cref via SATSA apdu.... In emulation environment APDU commands are forwarded via satsa-apduio.jar to any process which can accept these commands. It's a pity but you just cannot replace satsa-apduio.jar with apduio.jar from JCDK 2.2.2 (which uses T=0 by default).
    As for my proxy - it's not necessary to include it in your project - it's just an utility to accept T=0 APDU and forward them to smart-card. I think there's need to add new functionality - forwarding T=0 APDUs to other process which accepts T=1. I think it will solve your problem.

  • Java card confusing Issues!!!!!!! java card architecture, advantage!!!!!

    QUESTION -1
    As I know about architecture of any application is -
                    //normal java software                          java card                                  java card
                      //  1                                               2                                      3
    1-            application program                        host application                           host application
    2-                     JVM                                   Applets                                       Applets
    3-              operating system                JCRE(which contain all classes, JVM ....)                 JCRE(act as a O.S too)
    4                    hardware                              Operating system                                 H/W
    5                                                                        hardwareWhat do u think- case 2 is right? or 3 is!!!!!!!!!!!
    I think - case 3 is right!!!!
    As i study from several sources , JCRE is complete package - it behaves as a operation system and use the functionality of component it contain. I also think if i will purchase a java card from any vendor , it would have JCRE inside it (means everthing inside it,), i only need to develop the applet according to my requirement and install it by on card installer program
    QUESTION 2- what is the advantage of java card.?
    // I think.
    as i read out , i got the line that it is platform independent and support multiple application. applicaton point of
    view , I am agree but how it is platfrom independent. if we use java card for smart card development, then
    i will purchase Java card from differnt vendor , all will provide me card with supported jcre inside it, so why
    this is advantage here?
    // in case of window based application , it really make sense  because if i will make any window application with java
    // i can run it in windows , linux , unix and most of os flavours, here i can see the beauty of java language.
    Clear me this and add some other java card advantages, which make java card goodquestion 3-
    Now I am capaple to make simple applets, so I want to check the entire java card process atleast once before
    going in deep of something, I am thinking to implement prepaid card concept , i made it applet for it ,it will
    contain a page with 2 text box ( 1- for recharge 2- for money deduction ) and two button , with button click i
    want to select the applet and want to pass the apdu.
    ( a) how i can make host window application ? (i think awt will work for me? , *
    i never make any java window application yet) *
    ( b) still i dont have any java card , i want to make it by using simulator, is it possible?
      (c) in this scenario what framework i need to study Ex. Import javacard.framework.* for making
    applet or from where i need to start.Regards:
    rohit pathak
    Edited by: rohit pathak on Feb 9, 2012 10:10 PM

    Hi,
    QUESTION -1
    As I know about architecture of any application is -
    //normal java software                          java card                                  java card
    //  1                                               2                                      3
    1-            application program                        host application                           host application
    2-                     JVM                                   Applets                                       Applets
    3-              operating system                JCRE(which contain all classes, JVM ....)                 JCRE(act as a O.S too)
    4                    hardware                              Operating system                                 H/W
    5                                                                        hardwareWhat do u think- case 2 is right? or 3 is!!!!!!!!!!! If you are using Java Card then JCRE+JVM = OS and if you put this on ein package 3 then 3 is correct according to me.
    As i study from several sources , JCRE is complete package - it behaves as a operation system and use the functionality of component it contain. I also think if i will purchase a java card from any vendor , it would have JCRE inside it (means everthing inside it,), i only need to develop the applet according to my requirement and install it by on card installer program Actually it depends. There can be following models in this regards:
    1. Buy a empty smart card, Install your own OS and then write your applets for it.
    2. As you said, Buy a card with preloaded OS and then write applets for it.
    QUESTION 2- what is the advantage of java card.?
    * Interoperable: Applets developed with Java Card technology will run on any Java Card technology-enabled smart card, independently of the card vendor and underlying hardware.
    * Secure: Java Card technology relies on the inherent security of the Java programming language to provide a secure execution environment. Designed through an open process, the platform's proven industry deployments and security evaluations ensure that card issuers benefit from the most capable and secure technology available today.
    * Multi-Application-Capable: Java Card technology enables multiple applications to co-exist securely on a single smart card.
    * Dynamic: New applications can be installed securely after a card has been issued, enabling card issuers to respond to their customer's changing needs dynamically.
    * Compatible with Existing Standards: The Java Card API is compatible with international standards for smart cards such as ISO7816, or EMV. Major industry-specific standards such as Global Platform and ETSI refer to it.
    * Developers creating Java Card applications enjoy all the advantages of working in the Java programming language:
    Object-oriented programming yields greater code modularity and reusability, leading to higher programmer productivity.
    Protection features characteristic of the Java programming language apply to Java Card applets, enforcing strong typing and protection attributes.
    Powerful off-the-shelf development tools are readily available.
    source: http://java.sun.com/javacard/overview.jsp
    And also, in case of SIM card if you are using java card then RAM is possible and native cards don't have this ability.
    question 3
    Now I am capaple to make simple applets, so I want to check the entire java card process atleast once before
    going in deep of something, I am thinking to implement prepaid card concept , i made it applet for it ,it will
    contain a page with 2 text box ( 1- for recharge 2- for money deduction ) and two button , with button click i
    want to select the applet and want to pass the apdu.
    ( a) how i can make host window application ? (i think awt will work for me? , *You can use swing for this to make interface and use smartcardIO http://docs.oracle.com/javase/6/docs/jre/api/security/smartcardio/spec/javax/smartcardio/package-summary.html for sending APDUs.
    i never make any java window application yet) * It is easy you can look here and start: http://www.roseindia.net/java/example/java/swing/
    ( b) still i dont have any java card , i want to make it by using simulator, is it possible?Actually, smartcardIO will only interact with actuall card and for simulator you will have to use console for sending APDUs.
    (c) in this scenario what framework i need to study Ex. Import javacard.framework.* for making
    applet or from where i need to start.For your current case it is enough and for host app you should study smartcardio as i mentioned above.
    Hope it helps.
    Regards
    Umer

  • Java Card File System ...Please reply

    Hi all ,
    I am working on Java Card technology for last one year . Presently I am facing some problem regarding some file concept of java card .
    I know that Java Card 2.1 does not support file system . But I want to simulate the file system in java card using applets . i.e . I want to write an application(applet) , which can simulate the EF , DF in smart card . Whenever APDU command is send to the file system applet , it should generate a Elementary file (EF) or dedicated file (DF) etc and store data to that file.
    Can I do this type of thing using Java Card ? I am really in doubt .
    If you have any idea on this , please let me know your view on this . If you know any open source code for this type of simulated Java card file system , please let me know .
    I am desperately looking for a help .
    regards
    Dibyendu .
    you can contact me to this email
    [email protected]

    dear duran ,
    You have written that
    "Follow the guidelines for the different supported filesystems on the JC"
    But after Java Card version 2.0 , it does not support file system . I am using Java Card 2.1 .
    Could please some sample code to my mail Id , so that I can take a look at it .
    My mail id is : [email protected]
    Please share the idea , as I am really need some help.
    Regards ,
    Dibyendu.

  • Java Card 2.2.2 draft is out for public review

    A draft for the upcoming release of the Java Card Specification is available for public review.
    The Java Card 2.2.2 Specification will provide numerous enhancements to the award-winning Java Card platform. In particular it will include specific support for contactless communication and ID cards :
    * enhancements to ease the management and increase interoperability of contactless cards.
    * additional cryptography and security features
    * utility APIs for memory-efficient applet development
    Java Card technology v2.2.2 is ready for the next generations of smart card standards, and is fully backward-compatible with previous versions.
    New features in Java Card 2.2.2 :
    * Utility APIs for TLV, BCD, short, int
    * ISO7816-based Extended length APDU support
    * Support for up to 20 logical channels
    * External memory access API
    * Multiple Interfaces management
    * Additional cryptography algorithms : HMAC-MD5, HMAC-SHA1, SHA-256 and Korean Seed
    * Signature with message recovery
    * Partial message digest
    * Standardized Biometrics API
    Please direct your comments on this draft at [email protected] Feedback received before December 15th will be considered for the final version of the specification. For more information on the Java Card Platform Specification v2.2.2, Public Review Draft, refer to the release notes on http://java.sun.com/products/javacard/RELEASENOTES_jcspecsp.html

    The Installer and the Applet Deletion Manager are implemented in the JCRE and GlobalPlatform. On-card the Card Manager manages the content management, communication and the related security. JCRE specifies how it has to handle installation and deletion, but leaves room for different implementations. To the outside world, on a GP card, the Installer/ADM is the Card Manager with a specific AID.
    Installer and ADM are optional. For instance a Java Card Static product does not need an Installer/ADM.
    JCOP cards have the Installer/ADM fully implemented. It uses the GP functionality. The CM has to be selected to install or delete a package/applet.

  • A question about share interface in java card

    I meet a big problem in java card recently.
    I try to develop a loyalty and a purse in the JCOP 20 . I use the share interface to share data between two applets.At first I write two small applets to test the share interface.Then I manully dowon the two applets into the card but it doesn't work. The error always happen to the "getAppletShareableInterfaceObject" method.
    Following is part of the code.
    buffer[0]=(byte)0x06; buffer[1]=(byte)0x05; buffer[2]=(byte)0x04; buffer[3]=(byte)0x03; buffer[4]=(byte)0x02; buffer[5]=(byte)0x01; buffer[6]=(byte)0x01;
    //server applet ID
    AID loyaltyAID2 = JCSystem.lookupAID(buffer, (short) 0,(byte)7);
    if(loyaltyAID2==null) ISOException.throwIt((short)0x0902);
    loyaltySIO = (JavaLoyaltyInterface) JCSystem.getAppletShareableInterfaceObject(loyaltyAID2,(byte)0);
    //...........................................error happen in this line
    I try to find the error I find the error, so I trace to the server applet,I add a "ISOException.throwIt " method in the getShareableInterfaceObject in the server applet.
    I find if I add it,the "getAppletShareableInterfaceObject" will return but get the null object.
    It's correct.But when I remark the "ISOException.throwIt" and just return "this" ,the card will get "6F00".
    Following is my code.
    public Shareable getShareableInterfaceObject(AID clientAID,byte parameter)
    //ISOException.throwIt((short)0x9999);
    return this; } error happen in this line
    TKS...

    Yes I did do it,I modify the sample code of the SUN micro's loality and purse .Following is my source code.
    Client code(purseeasy).......
    //=========================
    package purseeasy;
    import com.sun.javacard.samples.JavaLoyalty.JavaLoyaltyInterface;
    import javacard.framework.*;
    public class purseeasy extends javacard.framework.Applet
    private byte[] echoBytes;
    private static final short LENGTH_ECHO_BYTES = 256;
         public purseeasy()
         echoBytes = new byte[LENGTH_ECHO_BYTES];
    register();
    public static void install(byte[] bArray, short bOffset, byte bLength)
    new purseeasy();
    public void process(APDU apdu)
    byte buffer[] = apdu.getBuffer();
    short bytesRead = apdu.setIncomingAndReceive();
    short echoOffset = (short)0;
    switch(buffer[2])
    case 0x31:
    AID loyaltyAID1 =JCSystem.getAID();
    short i=loyaltyAID1.getBytes(buffer,(short)0);
    if(loyaltyAID1==null)
              ISOException.throwIt((short)0x0901);
    buffer[0]=(byte)0xd1;buffer[1]=(byte)0x58;
         buffer[2]=(byte)0x00;buffer[3]=(byte)0x00;
         buffer[4]=(byte)0x01;buffer[5]=(byte)0x00;
         buffer[6]=(byte)0x00;buffer[7]=(byte)0x00;
         buffer[8]=(byte)0x00;buffer[9]=(byte)0x00;
         buffer[10]=(byte)0x00;buffer[11]=(byte)0x00;
         buffer[12]=(byte)0x00;buffer[13]=(byte)0x00;
         buffer[14]=(byte)0x31;buffer[15]=(byte)0x00;
         AID loyaltyAID2 = JCSystem.lookupAID(buffer,
    (short)0,(byte)16);
    if(loyaltyAID2==null)
         ISOException.throwIt((short)0x0902);
         JavaLoyaltyInterface loyaltySIO =
    (JavaLoyaltyInterface)
         JCSystem.getAppletShareableInterfaceObject(loyaltyAID2,(byte)1);
    if(loyaltySIO ==null)
         ISOException.throwIt((short)0x0903);
    loyaltySIO.grantPoints (buffer);
    break;
    apdu.setOutgoingAndSend((short)0, (short)18);
    //=====================================
    //Server program....share interface
    package com.sun.javacard.samples.JavaLoyalty;
    import javacard.framework.Shareable;
    public interface JavaLoyaltyInterface extends Shareable
    public abstract void grantPoints (byte[] buffer);
    //=============================================
    //Server program....loyalty
    package com.sun.javacard.samples.JavaLoyalty;
    import javacard.framework.*;
    public class JavaLoyalty extends javacard.framework.Applet     implements JavaLoyaltyInterface
    public static void install(byte[] bArray, short bOffset,
    byte bLength)
    {new JavaLoyalty(bArray, bOffset, bLength);
    public JavaLoyalty(byte[] bArray, short bOffset, byte
    bLength)
    register();
    public Shareable getShareableInterfaceObject(AID
    clientAID,byte parameter)
    return (this);
    public void process(APDU apdu)
    byte buffer[] = apdu.getBuffer();
    short bytesRead = apdu.setIncomingAndReceive();
    apdu.setOutgoingAndSend((short)0, (short)18);
    public void grantPoints (byte[] buffer)
         buffer[0]=0x08;
         buffer[1]=0x08;
         buffer[2]=0x08;
         buffer[3]=0x08;
         buffer[4]=0x08;
         buffer[5]=0x08;
         buffer[6]=0x08;
         buffer[7]=0x08;
    Could you tell me what wrong with my code???
    Thanks....

  • Give me *.scr script to simulate java card class

    this is the java file
    ++++++++++++++++++++++++++++++++
    //Package AID: 'D2 76 00 00 60 50 02'
    // Applet AID: 'D2 76 00 00 60 41 02'
    // Specification of the proprietary command READ
    // command APDU CLA = '80' || INS = '02' ||
    // P1 (= '00') || P2 (= offset [byte]) ||
    // Le (= number of bytes to read = DATA)
    // response APDU (good case) DATA (with length Le) || SW1 || SW2
    // response APDU (bad case) SW1 || SW2
    // Specification of the proprietary command WRITE
    // command APDU CLA = '80' || INS = '04' ||
    // P1 (= '00') || P2 (= offset [byte]) ||
    // Lc (= number of bytes to write) // DATA (bytes to write)
    // response APDU (all cases) SW1 || SW2
    package packmini; // this is the package name
    import javacard.framework.*; // import all neccessary packages for java card
    public class ReadWrite extends Applet {
    final static byte CLASS = (byte) 0x80; // class of the APDU commands
    final static byte INS_READ = (byte) 0x02; // instruction for the READ APDU command
    final static byte INS_WRITE = (byte) 0x04; // instruction for the WRITE APDU command
    final static short SIZE_MEMORY = (short) 9; // size of the data storage area
    static byte[] memory; // this is the data memory for the application
    //----- installation and registration of the applet -----
    public static void install(byte[] buffer, short offset, byte length) {
    memory = new byte[SIZE_MEMORY]; // this is the data storage area
    new ReadWrite().register();
    } // install
    //----- this is the command dispatcher -----
    public void process(APDU apdu) {
    byte[] cmd_apdu = apdu.getBuffer();
    if (cmd_apdu[ISO7816.OFFSET_CLA] == CLASS) {  // it is the rigth class
    switch(cmd_apdu[ISO7816.OFFSET_INS]) {      // check the instruction byte
    case INS_READ: // it is a READ instruction
    cmdREAD(apdu);
    break;
    case INS_WRITE: // it is a WRITE instruction
    cmdWRITE(apdu);
    break;
    default : // the instruction in the command apdu is not supported
    ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
    } // switch
    } // if
    else {                                        // the class in the command apdu is not supported
    ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
    } // else
    } // process
    //----- program code for the APDU command READ -----
    private void cmdREAD(APDU apdu) {
    byte[] cmd_apdu = apdu.getBuffer();
    //----- check the preconditions -----
    // check if P1=0
    if (cmd_apdu[ISO7816.OFFSET_P1] != 0) ISOException.throwIt(ISO7816.SW_WRONG_P1P2);
    // check if offset P2 is inside the bound of the memory array
    short offset = (short) (cmd_apdu[ISO7816.OFFSET_P2] & 0x00FF); // calculate offset
    if (offset >= SIZE_MEMORY) ISOException.throwIt(ISO7816.SW_WRONG_P1P2);
    // check if offset P2 and expected length Le is inside the bounds of the memory array
    short le = (short)(cmd_apdu[ISO7816.OFFSET_LC] & 0x00FF); // calculate Le (expected length)
    if ((offset + le) > SIZE_MEMORY) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
    // check if expected length Le is 0
    if (le == 0) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
    //----- now all preconditions are fulfilled, the data can be send to the IFD -----
    apdu.setOutgoing(); // set transmission to outgoing data
    apdu.setOutgoingLength((short)le); // set the number of bytes to send to the IFD
    apdu.sendBytesLong(memory, (short)offset, (short)le); // send the requested number of bytes to the IFD
    } // cmdREAD
    //----- program code for the APDU command WRITE -----
    private void cmdWRITE(APDU apdu) {
    byte[] cmd_apdu = apdu.getBuffer();
    //----- check the preconditions -----
    // check if P1=0
    if (cmd_apdu[ISO7816.OFFSET_P1] != 0) ISOException.throwIt(ISO7816.SW_WRONG_P1P2);
    // check if offset P2 is inside the bound of the memory array
    short offset = (short) (cmd_apdu[ISO7816.OFFSET_P2] & 0x00FF); // calculate offset
    if (offset >= SIZE_MEMORY) ISOException.throwIt(ISO7816.SW_WRONG_P1P2);
    // check if offset P2 and expected length Le is inside the bounds of the memory array
    short lc = (short)(cmd_apdu[ISO7816.OFFSET_LC] & 0x00FF); // calculate Lc (expected length)
    if ((offset + lc) > SIZE_MEMORY) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
    // check if command length Lc is 0
    if (lc == 0) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
    receiveAPDUBody(apdu); // receive now the rest of the APDU
    //----- now all preconditions are fulfilled, the data can be copied to the memory -----
    Util.arrayCopy(cmd_apdu, (short)((ISO7816.OFFSET_CDATA) & 0x00FF), memory, offset, lc); // this copy precedure is atomic
    ISOException.throwIt(ISO7816.SW_NO_ERROR); // command proper executed
    } // cmdWRITE
    //----- receive the body of the command APDU
    public void receiveAPDUBody(APDU apdu) {
    byte[] buffer = apdu.getBuffer();
    short lc = (short)(buffer[ISO7816.OFFSET_LC] & 0x00FF); // calculate Lc (expected length)
    // check if Lc != number of received bytes of the command APDU body
    if (lc != apdu.setIncomingAndReceive()) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
    } // receiveAPDUBody
    ++++++++++++++++++++++++++++++++
    I hope u can give me sollution for my problem..
    Thank u all..

    need help ... somebody can help me ??
    I have java file..(on this below)..I want to run it with JCWDE...can you give me script APDU to run it on JCWDE ???
    thank for your attention .
    package packmini;
    import javacard.framework.APDU;
    import javacard.framework.ISO7816;
    import javacard.framework.Applet;
    import javacard.framework.ISOException;
    import javacard.framework.Util;
    public class IdCard extends Applet {
         //The Cla Value
         final static byte claValue = (byte) 0x08;
         //The Ins Value
         final static byte readName = (byte)0x01;
         final static byte readPhone = (byte) 0x02;
         final static byte writeName = (byte) 0x03;
         final static byte writePhone = (byte) 0x04;
         byte[] nameID;;
         byte[] phone ;
         public IdCard()
              nameID = new byte[12];
              phone = new byte[12];
         public static void install(byte[] bArray, short bOffset, byte bLength) {
              // GP-compliant JavaCard applet registration
              new packmini.IdCard().register(bArray, (short) (bOffset + 1),
                        bArray[bOffset]);
         public void process(APDU apdu) {
              // Good practice: Return 9000 on SELECT
              if (selectingApplet()) {
                   return;
              byte[] buf = apdu.getBuffer();
              if(buf[ISO7816.OFFSET_CLA]!= claValue)
                   ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
              switch (buf[ISO7816.OFFSET_INS]) {
              case writeName :     
                        writeNameIn(apdu);
                        break;
              case writePhone:
                        writePhoneIn(apdu);
                        break;
              case readName:
                        readNameOut(apdu);
                        break;
              case readPhone:
                        readPhoneOut(apdu);
                        break;
              default:
                   // good practice: If you don't know the INStruction, say so:
                   ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
         public void writeNameIn(APDU apdu)
              byte[] buff = apdu.getBuffer();
              short lcLength = buff[ISO7816.OFFSET_LC];
              short readCount = apdu.setIncomingAndReceive();
              if(readCount== 0 || lcLength == 0)
                   ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
              Util.arrayCopy(buff,(short) ISO7816.OFFSET_CDATA, nameID, (short)0, readCount);     
         public void writePhoneIn(APDU apdu)
              byte [] buff = apdu.getBuffer();
              short readCount = apdu.setIncomingAndReceive();
              short lcLength = buff[ISO7816.OFFSET_LC];
              if(readCount== 0 || lcLength == 0)
                   ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
              Util.arrayCopy(buff, ISO7816.OFFSET_CDATA, phone, (short)0, readCount);     
         public void readNameOut(APDU apdu)
              byte [] buff = apdu.getBuffer();
              short le = apdu.setOutgoing();
              apdu.setOutgoingLength((short) nameID.length);
              Util.arrayCopy(nameID,(short) 0, buff,(short) 0,(short) nameID.length);
              apdu.sendBytes((short)0, (short) nameID.length);
         public void readPhoneOut(APDU apdu)
              byte [] buff = apdu.getBuffer();
              short le = apdu.setOutgoing();
              apdu.setOutgoingLength((short) phone.length);
              Util.arrayCopy(phone,(short) 0, buff,(short) 0,(short) phone.length);
              apdu.sendBytes((short)0, (short) phone.length);
    }

Maybe you are looking for

  • Can't display month view

    Every time I try to display month view on my calendar ical just disappears, it can't do it for some reason. It can display week or day views just not month. Does anyone know what might be going on?

  • SSRS 2012 Blank Screen Report Manager

    Installed SQL Server 2012 and configured Reporting through configuration manager but whenever i use the http://<servername>/Reports it gives me blank screen. Things i tried >Opening browser with Admin privileges > Trusted sites inclusion >Changing po

  • Restoring Address Book with Time Machine

    I am trying to restore my Address Book contacts all but one of which vanished a couple days ago - but when I look at it in Time Machine it reads "last update 5/11/12" even as far back as Sep 2011.  I've checked other files and TM has saved the correc

  • Importing web pages as graphics

    I'm trying to import a webpage into a sequence montage. I can't seem to figure out a way to turn the page into a "snapshot" to then import as a .jpg or .tiff into FCP. Any suggestions?

  • My MacBook Pro will clear my desktop even when I'm writing or when viewing a video.

    To anyone out there, I would like for someone to tell me how to keep all my apps and icons on the screen without them getting cleared out by the program or system? Thanks for any help, procedure or steps to avoid this dilemma.