Java Card ROM Applets

Hi
I need to develop Java Card ROM Applets. I need to write native C Code for the Card.
I read in forums that ROM Applets can only be loaded by Vendors. I am the Vendor.
How can I write, compile and test native code for Java Card?
I didn't find any support in Java Card Development Kit downloaded from Sun. Does it have support?
Or is there any other Software kit which supports development of ROM Applets?
Thanks
Abheesh

Most OS providers offer a so called custom masking process, where they merge your applications with the OS into ROM. For instance for JCOP @ NXP, you choose the mask (e.g. JCOP v2.4.1), provide the Java class files and Java Card export files and AIDs. They have an internal tool which created a custom mask where your application source code is residing in ROM. All you need to do now is to instantiate and personalize your application.
Advantages
- Free EEPROM
- Shorter personalization as applications do not need to be loaded
- ROM read is fast than EEPROM read --> better performance as code is read all the time
- ROM cannot as easy be attacked by e.g. light attacks
Disadvantages
- Long lead time of 4 - 6 weeks to produce the mask
- Volume needs to be ordered (2 to 3 wafers minimum = ~10k ICs)
- Dependent on the OS provider <-- compared to loading in EEPROM

Similar Messages

  • Why Applet in the Java Card?

    I'm studying the Java Card and GP. I have one question which just hit my head.
    Why did the Java Card choose Applets? There are applications, servlets, and so on which can be developed using Java technology.
    Does anyone know?
    Thanks,
    Julie.

    No, Java Card applets run on the card. What runs off the card can be ANY language because that's what called middleware. It sits in the middle of the OS and the CAD. PCSC is a middleware. It's written in C. Java Cards don't know anything about an OS or middleware because all communications is to a CAD.
    As far as client side Java, that can be a Java Application, or a Java Applet for browsers.

  • 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.

  • How do I test a Java card applet with different AIDs on the fly?

    ... Like sweeping cards from employees in a queue of people lining up in the morning?
    When I created my applet, the aid is a fixed value inside the class.
    Whenever I wanted to test it with another value, I changed that AID and rerun the applet.
    I find it very cumbersome that needs to be rerun and rerun, over and over again.
    How do I test the applet easily with any values of AIDs that I'd like to put in, on the fly.
    I know I can't simulate the sweeps of card in the applet because I can't have a main method with a signature
    of Strings[] args or String[] args. I can only have JUnit to help me out, but still java card doesn't allow either
    main(Strings[] args) or TestCase to inherit from.
    Thanks
    Jack

    your question is hard to understand but:
    an applet always has one definite AID and you cant change it after install as far as i know
    a) you want to test many cards with diffrent AIDs?
    ->send a list of select commands and check the return values
    b)you want one card with the same applet to be available for many AIDs?
    ->install many dummy applets forwarding the commands to one core applet
    c)i think i didnt get your point :/

  • 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

  • How to ensure applet is written in java card?

    Hi all,
    I have written a java card applet, in which i am using the Biometry API of java card to enroll a fingerprint template in java card. Code is attached below:
    package classicapplet1;
    import javacard.framework.*;
    import javacardx.biometry.BioBuilder;
    import javacardx.biometry.OwnerBioTemplate;
    import javacardx.biometry.SharedBioTemplate;
    import javacardx.biometry.BioException;
    public class JavaBiometrics extends Applet implements SharedBioTemplate{
            public final static byte CLA = (byte)0xCF;
         public final static byte INS_ENROLL = (byte)0x10;
         public final static byte MATCH_TRY_LIMIT = (byte)3;
         public final static byte INVALID_DATA = (byte)0x77;
         public final static byte ERROR_MATCH_FAILED = (byte)0x9101;
         public static final byte CARD_ENROLL_SUCCESS = (byte)0x9000;
         public static final byte CARD_ENROL_FAILED = (byte)0x6900;
         private OwnerBioTemplate bio_temp;
         * Installs this applet.
         * @param bArray
         *            the array containing installation parameters
         * @param bOffset
         *            the starting offset in bArray
         * @param bLength
         *            the length in bytes of the parameter data in bArray
        public static void install(byte[] bArray, short bOffset, byte bLength) {
            new JavaBiometrics(bArray, bOffset, bLength);
         * Only this class's install method should create the applet object.
        protected JavaBiometrics(byte[] bArray, short bOffset, short bLength) {
        byte aidLen = bArray[bOffset];
              if(aidLen == (byte)0)
                   register();
              else
                   register(bArray, (short)(bOffset+1), aidLen);
              bio_temp = BioBuilder.buildBioTemplate(BioBuilder.FINGERPRINT, MATCH_TRY_LIMIT);
    public boolean select()
    return true;
         * Processes an incoming APDU.
         * @see APDU
         * @param apdu
         *            the incoming APDU
        public void process(APDU apdu) {
            //get the incoming APDU buffer
         byte []buffer = apdu.getBuffer();
         //Get the CLA; mask out the logical-channel info
         buffer[ISO7816.OFFSET_CLA] = (byte)(buffer[ISO7816.OFFSET_CLA] & (byte)0xFC);
         //If the INS Select, return -no need to process select
         if(buffer[ISO7816.OFFSET_CLA] == 0 && buffer[ISO7816.OFFSET_INS] == (byte)(0xA4))
              return;
         //If unrecognized class, return "Unsupported class."
         if(buffer[ISO7816.OFFSET_CLA] != CLA)
              ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
         switch(buffer[ISO7816.OFFSET_INS])
         case INS_ENROLL:
              enroll(apdu);
              break;
         default:
              ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
    public void enroll(APDU apdu)
            byte[] buffer = apdu.getBuffer();
            short bytesRead = apdu.setIncomingAndReceive();
            bio_temp.init(buffer, ISO7816.OFFSET_CDATA, bytesRead);
            bio_temp.doFinal();
        public Shareable getShareableInterfaceObject(AID clientAID, byte parameter) {
            return this;
    ///////////// These methods implemets the ShareableBio interface///////////////
    public boolean isInitialized() {
            return bio_temp.isInitialized();
        public boolean isValidated() {
            return bio_temp.isValidated();
        public void reset() {
            bio_temp.reset();
        public byte getTriesRemaining() {
            return bio_temp.getTriesRemaining();
        public byte getBioType() {
            return bio_temp.getBioType();
        public short getVersion(byte[] dest, short offset) {
            return bio_temp.getVersion(dest, offset);
        public short getPublicTemplateData(short publicOffset, byte[] dest, short destOffset, short length)
                throws BioException {
            return bio_temp.getPublicTemplateData(publicOffset, dest, destOffset, length);
        public short initMatch(byte[] candidate, short offset, short length) throws BioException {
            return bio_temp.initMatch(candidate, offset, length);
        public short match(byte[] candidate, short offset, short length) throws BioException {
            return bio_temp.match(candidate, offset, length);
    Problem :
    I have developed this program in Netbeans using java card plug ins. when i am running this program, all the required CAP files and EXP files are generated.
    Now, i have to write this applet on java card through a card reader. My card reader is installed in an embedded system GeoAmida with IP 192.133.133.2 and port number 6789.
    I have used the following settings for my java card device in Netbeans:
    Host : 192.133.133.2
    Server URL: http://192.133.133.2:6789/
    Card Manager URL: http://192.133.133.2:6789/cardmanager/
    HTTP port: 6789
    The output shows me that Instances of this program has been successfully has been created on java card.
    But the problem is how can i ensure that my applet is been successfully installed on the java card?
    The code of host application program, accessing the developed java card applet is given below (it is written in C):
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <smartcard.h>
    int main()
         int ret, i, smartcard;
         unsigned char applet_id[100], apdu_len, apdu[300],response[300]={0};
         smartcard_info *context;
         smartcard=CONTACTLESS;
         //smartcard=CONTACT_BOT;
         if((context = smartcard_init(smartcard)) == NULL){
              printf("Smartcard Initi. Failed\n");
              return 0xBB;
         /* checking for smartcard */
         while (1){
              if(ret=smartcard_is_present(context, smartcard)!=0)
                   sleep(1);
              else
                   break;
         printf("Selecting Applet \n");
         i = 0;
         applet_id[i++]=0x00; applet_id[i++]=0xA4; applet_id[i++]=0x04; applet_id[i++]=0x00; applet_id[i++]=0x06;
         applet_id[i++]=0xA9; applet_id[i++]=0xBF; applet_id[i++]=0xA2; applet_id[i++]=0xB6; applet_id[i++]=0xB1; applet_id[i++]=0x3E; applet_id[i++]=0x7F;
         if ((ret=smartcard_select_applet(context, smartcard, applet_id, i))!=0){
              printf("select applet failed %02x\n",ret);
              return ;
         printf("Applet Selection Success \n");
    #if 1
         i=0;
         apdu[i++]=0xCF; apdu[i++]=0x10; apdu[i++]=0x04; apdu[i++]=0x04; apdu[i++]=0x7F;
         //apdu[i++]=0x3F; apdu[i++]=0x00;
         apdu_len = i;
         printf("Sending APDU command\n");
         if ((ret=smartcard_apdu(context, smartcard, apdu, apdu_len, response))!=0){
              printf("apdu failed %d\n",ret);
              //return;
         }else
              printf("APDU Success\n");
         //printf("\n");
    #endif
         smartcard_deinit(context);
         return 0;     
    }The output of this program is showing me that applet is been successfully selected, but APDU selection failed. Please solve this problem as soon as possible, because my project is deadline is not very much far.
    Thanks in advance.
    Mukul Gupta

    Hi Shane,
    I am getting error 6a86 which means that value of P1 is less than 1 or more than 8, and we have to change its value to any in between 1 to 8. I did that also but error still remains :(
    Please tell me what is reason behind this error. And, i'll try out your previous solution today, Thanks for it.

  • Java application communicate with java card applet without java card

    Can I write java application to communicate with java card applet without using java card?
    Can I send APDU to java card applet on computer(not install in java card)? If it's not, how can I write?
    Best Regard,
    Thanawan

    Your JCOP simulator implements a JCVM/JCRE according
    to specs. The CREF does that same thing excepts it's
    only simulates the API without crypto or third party
    applets. JCOP simulator is more then that. They are using thesame_ codebase for simulator and for oncard JCVM. Basically you are dealing with the same environment in both cases.

  • How do I communicate a Java Card applet with a server?

    I'm new to Java and Java Card and currently developing a smart card system. I'm not sure what to use on my applet or server, JCSystem or SecureConnection or something else?
    If I'm writing a server application, then how do I install it so that I can simulate it with cjre?
    Thanks in advance.
    p/s: Connection is using TSL.

    The flow is like this:
    Java Card --> POS terminal -> Server
    Yes. I'm using JC3.
    Here's what I've achieved so far using SocketConnection
    SocketConnection sc = (SocketConnection) Connector.open("socket://localhost:50007");
    InputStream is = sc.openInputStream();
    OutputStream os = sc.openOutputStream();
    os.write("Hello world!".getBytes());
    is.read(buffer);
    os.close();
    is.close();
    sc.close(); Edited by: andirady on Dec 4, 2012 11:59 PM

  • IDES for writing Java card applets and converting the applets as CAP FILE.

    I have developed a JAVA CARD APPLET , FindMFValueJCA.java . It gets compiles in net beans 6.0 But while converting the applet to CAP file i am getting some errors. Is there any other IDES which take care of converting the CAP files

    What's the Java version you are using?
    As the java card tool kit has version dependencies. If you are using java_card _kit 2.2.2 then 1.5 is fine.                                                                                                                                                                                                                                                                                                   

  • How to create an instance (or instances) of the java card applet?

    Here I have a backend, a host application (a terminal)
    and a Java card that needs to be instanced to multiple cards to different users.
    I wonder how you can make instances of Java card applets of different IDs or PINs.

    933351 wrote:
    Yes, I would like to emulate an environment first, Unfortunately I cannot help with this (never really used this tool).
    I'd like to know also how to install them later on real cards.You need something that can perform the secure channel and card content management functions of the GlobalPlatform card specification. A good starting point is GPShell. It provides a simple scripting interface to be able to:
    1) Authenticate with a card with developer keys
    2) Load you cap file(s)
    3) Instantiate any instances you require (you can have multiple instances from a single applet)
    4) Send arbitrary APDU's to the card for testing.
    GPShell has a README text file that is a good reference and there are sample scripts for a number of card types.
    - Shane

  • How can we create a common function for 2 or more java card applets?

    I have 2 java card applets. They use one common function. But i don't know how to set up it. Anybody knows it, please help me. Please show me step by step to do it. Thank you.

    When insert below line of code in the Test_Class_1.java and Test_Class_2, the Project will be failed:
    byte aP1 = Test_common_function.GetP1((byte)0x02);
    byte aP1 = Test_common_function.GetP1((byte)0x01);
    Here is the source code:
    Test_Class_2.java
    package Test_Class_2;
    import Test_common_function.Test_common_function;
    import javacard.framework.APDU;
    import javacard.framework.Applet;
    public class Test_Class_2 extends Applet
       public static void install(byte[] bArray, short bOffset, byte bLength)
          // GP-compliant JavaCard applet registration
          new Test_Class_2().register(bArray, (short) (bOffset + 1),
                bArray[bOffset]);
       public void process(APDU apdu)
          byte aP1 = Test_common_function.GetP1((byte)0x02);
    }Test_Class_1.java
    package Test_Class_1;
    import Test_common_function.Test_common_function;
    import javacard.framework.APDU;
    import javacard.framework.Applet;
    public class Test_Class_1 extends Applet
       public static void install(byte[] bArray, short bOffset, byte bLength)
          // GP-compliant JavaCard applet registration
          new Test_Class_1().register(bArray, (short) (bOffset + 1),
                bArray[bOffset]);
       public void process(APDU apdu)
          byte aP1 = Test_common_function.GetP1((byte)0x02);
    }Test_common_function.java
    package Test_common_function;
    import javacard.framework.APDU;
    import javacard.framework.ISO7816;
    import javacard.framework.Applet;
    import javacard.framework.ISOException;
    public class Test_common_function extends Applet
       public static void install(byte[] bArray, short bOffset, byte bLength)
          // GP-compliant JavaCard applet registration
          new Test_common_function().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();
          switch (buf[ISO7816.OFFSET_INS])
             case (byte) 0x00:
                break;
             default:
                // good practice: If you don't know the INStruction, say so:
                ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
       public static byte bP1_Class1 = (byte)0x90;
       public static byte bP1_Class2 = (byte)0x90;
       public static byte GetP1(byte idclass)
          return idclass == (byte)0x01? bP1_Class1:bP1_Class2;
    }and here is the trace log (in case of failure)
    cm>  /term "Remote|localhost:60351"
    --Opening terminal
    /card -a a000000003000000 -c com.ibm.jc.CardManagerresetCard with timeout: 0 (ms)
    --Waiting for card...
    ATR=3B F8 13 00 00 81 31 FE 45 4A 43 4F 50 76 32 34    ;.....1.EJCOPv24
        31 B7                                              1.
    IOCTL().
    ATR:
             T = 1                  
    => 00 A4 04 00 08 A0 00 00 00 03 00 00 00 00          ..............
    (578768 nsec)
    <= 6F 65 84 08 A0 00 00 00 03 00 00 00 A5 59 9F 65    oe...........Y.e
        01 FF 9F 6E 06 47 91 01 17 33 00 73 4A 06 07 2A    ...n.G...3.sJ..*
        86 48 86 FC 6B 01 60 0C 06 0A 2A 86 48 86 FC 6B    .H..k.`...*.H..k
        02 02 01 01 63 09 06 07 2A 86 48 86 FC 6B 03 64    ....c...*.H..k.d
        0B 06 09 2A 86 48 86 FC 6B 04 02 15 65 0B 06 09    ...*.H..k...e...
        2B 85 10 86 48 64 02 01 03 66 0C 06 0A 2B 06 01    +...Hd...f...+..
        04 01 2A 02 6E 01 02 90 00                         ..*.n....
    Status: No Error
    cm>  set-key 255/1/DES-ECB/404142434445464748494a4b4c4d4e4f 255/2/DES-ECB/404142434445464748494a4b4c4d4e4f 255/3/DES-ECB/404142434445464748494a4b4c4d4e4f
    cm>  init-update 255
    => 80 50 00 00 08 37 0D D8 24 C9 C8 32 53 00          .P...7..$..2S.
    (1829 usec)
    <= 00 00 DE 81 34 18 39 B7 09 70 FF 02 00 00 3D 02    ....4.9..p....=.
        9C 31 C7 89 7A 8E 57 44 05 A7 67 C7 90 00          .1..z.WD..g...
    Status: No Error
    cm>  ext-auth plain
    => 84 82 00 00 10 D8 BE 91 A3 94 E8 34 18 42 28 F6    ...........4.B(.
        74 EE 50 06 29                                     t.P.)
    (1683 usec)
    <= 90 00                                              ..
    Status: No Error
    cm>  delete -r 01020304050102
    => 80 E4 00 80 09 4F 07 01 02 03 04 05 01 02 00       .....O.........
    (833593 nsec)
    <= 6A 88                                              j.
    Status: Reference data not found
    jcshell: Error code: 6a88 (Reference data not found)
    jcshell: Wrong response APDU: 6A88
    Ignoring expected error
    cm>  delete -r 01020304050103
    => 80 E4 00 80 09 4F 07 01 02 03 04 05 01 03 00       .....O.........
    (769014 nsec)
    <= 6A 88                                              j.
    Status: Reference data not found
    jcshell: Error code: 6a88 (Reference data not found)
    jcshell: Wrong response APDU: 6A88
    Ignoring expected error
    cm>  delete -r 010203040501
    => 80 E4 00 80 08 4F 06 01 02 03 04 05 01 00          .....O........
    (734456 nsec)
    <= 6A 88                                              j.
    Status: Reference data not found
    jcshell: Error code: 6a88 (Reference data not found)
    jcshell: Wrong response APDU: 6A88
    Ignoring expected error
    cm>  upload -c -d -b 250 "D:\WorkSpace\Test_Common_Funcation\bin\Test_common_function\javacard\Test_common_function.cap"
    => 80 E6 02 00 13 06 01 02 03 04 05 01 08 A0 00 00    ................
        00 03 00 00 00 00 00 00 00                         .........
    (1864 usec)
    <= 00 90 00                                           ...
    Status: No Error
    Start loading Header.cap (44 byte)
    => 80 E8 00 00 2C C4 82 03 E3 01 00 25 DE CA FF ED    ....,......%....
        02 02 04 00 01 06 01 02 03 04 05 01 14 54 65 73    .............Tes
        74 5F 63 6F 6D 6D 6F 6E 5F 66 75 6E 63 74 69 6F    t_common_functio
        6E 00                                              n.
    (1607 usec)
    <= 00 90 00                                           ...
    Status: No Error
    Header.cap loaded (44 byte)
    Start loading Directory.cap (36 byte)
    => 80 E8 00 01 24 02 00 21 00 25 00 21 00 0C 00 0B    ....$..!.%.!....
        00 26 00 0E 00 4C 00 0C 00 0D 00 00 00 6F 02 5D    .&...L.......o.]
        00 02 00 00 00 00 01 01 00 00                      ..........
    (1368 usec)
    <= 00 90 00                                           ...
    Status: No Error
    Directory.cap loaded (36 byte)
    Start loading Import.cap (14 byte)
    => 80 E8 00 02 0E 04 00 0B 01 03 01 07 A0 00 00 00    ................
        62 01 01 00                                        b...
    (1096 usec)
    <= 00 90 00                                           ...
    Status: No Error
    Import.cap loaded (14 byte)
    Start loading Applet.cap (15 byte)
    => 80 E8 00 03 0F 03 00 0C 01 08 01 02 03 04 05 01    ................
        01 01 00 08 00                                     .....
    (1188 usec)
    <= 00 90 00                                           ...
    Status: No Error
    Applet.cap loaded (15 byte)
    Start loading Class.cap (17 byte)
    => 80 E8 00 04 11 06 00 0E 00 00 00 80 03 00 FF 00    ................
        07 01 00 00 00 1C 00                               .......
    (1457 usec)
    <= 00 90 00                                           ...
    Status: No Error
    Class.cap loaded (17 byte)
    Start loading Method.cap (79 byte)
    => 80 E8 00 05 4F 07 00 4C 00 01 10 18 8C 00 02 7A    ....O..L.......z
        05 30 8F 00 08 3D 8C 00 00 18 1D 04 41 18 1D 25    .0...=......A..%
        8B 00 01 7A 02 21 18 8B 00 06 60 03 7A 19 8B 00    ...z.!....`.z...
        04 2D 1A 04 25 73 00 09 00 00 00 00 00 0F 11 6D    .-..%s.........m
        00 8D 00 07 7A 02 10 1C 04 6B 07 7C 00 03 70 05    ....z....k.|..p.
        7C 00 05 78 00                                     |..x.
    (1101 usec)
    <= 00 90 00                                           ...
    Status: No Error
    Method.cap loaded (79 byte)
    Start loading StaticField.cap (15 byte)
    => 80 E8 00 06 0F 08 00 0C 00 02 00 00 00 00 00 00    ................
        00 02 90 90 00                                     .....
    (1069 usec)
    <= 00 90 00                                           ...
    Status: No Error
    StaticField.cap loaded (15 byte)
    Start loading ConstantPool.cap (41 byte)
    => 80 E8 00 07 29 05 00 26 00 09 06 00 00 01 03 80    ....)..&........
        03 02 06 80 03 00 05 00 00 00 03 80 0A 01 05 00    ................
        00 01 03 80 03 03 06 80 07 01 01 00 02 00 00       ...............
    (3134 usec)
    <= 00 90 00                                           ...
    Status: No Error
    ConstantPool.cap loaded (41 byte)
    Start loading RefLocation.cap (16 byte)
    => 80 E8 00 08 10 09 00 0D 00 00 00 09 05 06 04 0A    ................
        07 07 13 0A 05 00                                  ......
    (2067 usec)
    <= 00 90 00                                           ...
    Status: No Error
    RefLocation.cap loaded (16 byte)
    Start loading Descriptor.cap (114 byte)
    => 80 E8 00 09 72 0B 00 6F 01 00 01 00 02 00 00 02    ....r..o........
        00 04 00 09 00 00 00 80 03 01 09 00 00 01 80 03    ................
        00 81 00 01 00 14 00 05 00 00 00 00 01 09 00 08    ................
        00 16 00 12 00 00 00 00 07 01 00 1C 00 19 00 1F    ................
        00 00 00 00 02 09 00 3D 00 1D 00 0D 00 00 00 00    .......=........
        00 09 00 14 00 16 00 14 00 1F 00 21 00 1F 00 23    ...........!...#
        00 25 FF FF 01 10 04 B4 31 06 68 00 A1 02 33 01    .%......1.h...3.
        30 01 B0 01 20 02 41 00                            0... .A.
    (1344 usec)
    <= 00 90 00                                           ...
    Status: No Error
    Descriptor.cap loaded (114 byte)
    Start loading Debug.cap (608 byte)
    => 80 E8 00 0A FA 0C 02 5D 00 1A 00 29 54 65 73 74    .......]...)Test
        5F 63 6F 6D 6D 6F 6E 5F 66 75 6E 63 74 69 6F 6E    _common_function
        2F 54 65 73 74 5F 63 6F 6D 6D 6F 6E 5F 66 75 6E    /Test_common_fun
        63 74 69 6F 6E 00 19 6A 61 76 61 63 61 72 64 2F    ction..javacard/
        66 72 61 6D 65 77 6F 72 6B 2F 41 70 70 6C 65 74    framework/Applet
        00 19 54 65 73 74 5F 63 6F 6D 6D 6F 6E 5F 66 75    ..Test_common_fu
        6E 63 74 69 6F 6E 2E 6A 61 76 61 00 0A 62 50 31    nction.java..bP1
        5F 43 6C 61 73 73 31 00 01 42 00 0A 62 50 31 5F    _Class1..B..bP1_
        43 6C 61 73 73 32 00 06 3C 69 6E 69 74 3E 00 03    Class2..<init>..
        28 29 56 00 04 74 68 69 73 00 2B 4C 54 65 73 74    ()V..this.+LTest
        5F 63 6F 6D 6D 6F 6E 5F 66 75 6E 63 74 69 6F 6E    _common_function
        2F 54 65 73 74 5F 63 6F 6D 6D 6F 6E 5F 66 75 6E    /Test_common_fun
        63 74 69 6F 6E 3B 00 07 69 6E 73 74 61 6C 6C 00    ction;..install.
        07 28 5B 42 53 42 29 56 00 06 62 41 72 72 61 79    .([BSB)V..bArray
        00 02 5B 42 00 07 62 4F 66 66 73 65 74 00 01 53    ..[B..bOffset..S
        00 07 62 4C 65 6E 67 74 68 00 07 70 72 6F 63 00    ..bLength..proc.
    (937268 nsec)
    <= 00 90 00                                           ...
    Status: No Error
    => 80 E8 00 0B FA 65 73 73 00 1C 28 4C 6A 61 76 61    .....ess..(Ljava
        63 61 72 64 2F 66 72 61 6D 65 77 6F 72 6B 2F 41    card/framework/A
        50 44 55 3B 29 56 00 04 61 70 64 75 00 19 4C 6A    PDU;)V..apdu..Lj
        61 76 61 63 61 72 64 2F 66 72 61 6D 65 77 6F 72    avacard/framewor
        6B 2F 41 50 44 55 3B 00 03 62 75 66 00 05 47 65    k/APDU;..buf..Ge
        74 50 31 00 04 28 42 29 42 00 07 69 64 63 6C 61    tP1..(B)B..idcla
        73 73 00 14 54 65 73 74 5F 63 6F 6D 6D 6F 6E 5F    ss..Test_common_
        66 75 6E 63 74 69 6F 6E 00 19 00 01 00 00 00 01    function........
        00 02 00 01 00 02 00 00 02 00 04 00 03 00 04 00    ................
        09 00 00 00 00 00 05 00 04 00 09 00 00 00 01 00    ................
        06 00 07 00 01 00 01 02 00 05 00 01 00 01 00 00    ................
        08 00 09 00 00 00 05 00 00 00 04 00 0F 00 0A 00    ................
        0B 00 09 00 08 02 00 12 00 03 00 04 00 00 0C 00    ................
        0D 00 00 00 12 01 00 0E 00 0F 00 00 00 12 02 00    ................
        10 00 04 00 00 00 12 00 00 00 07 00 14 00 08 00    ................
        0D 00 15 00 0E 00 10 00 14 00 11 00 11 00 16 00    ................
    (785421 nsec)
    <= 00 90 00                                           ...
    Status: No Error
    => 80 E8 80 0C 6C 00 11 00 12 00 01 00 1C 02 00 1F    ....l...........
        00 03 00 06 00 00 08 00 09 00 00 00 1F 01 00 13    ................
        00 14 00 00 00 1F 02 00 15 00 0D 00 0C 00 13 00    ................
        00 00 05 00 1B 00 06 00 06 00 1D 00 07 00 0B 00    ................
        20 00 0C 00 17 00 21 00 18 00 1D 00 27 00 1E 00     .....!.....'...
        1E 00 29 00 16 00 17 00 09 00 3D 02 00 0D 00 01    ..).......=.....
        00 01 00 00 18 00 04 00 00 00 0D 00 00 00 0C 00    ................
        2F 00                                              /.
    (1986 usec)
    <= 00 90 00                                           ...
    Status: No Error
    Debug.cap loaded (608 byte)
    Load report:
      999 bytes loaded in 0.0 seconds
      effective code size on card:
          + package AID       6
          + applet AIDs       15
          + classes           17
          + methods           79
          + statics           2
          + exports           0
            overall           119  bytes
    cm>  install -i 0102030405010101  -q C9#() 010203040501 0102030405010101
    => 80 E6 0C 00 1F 06 01 02 03 04 05 01 08 01 02 03    ................
        04 05 01 01 01 08 01 02 03 04 05 01 01 01 01 00    ................
        02 C9 00 00 00                                     .....
    (2346 usec)
    <= 00 90 00                                           ...
    Status: No Error
    cm>  upload -c -d -b 250 "D:\WorkSpace\Test_Common_Funcation\bin\Test_Class_2\javacard\Test_Class_2.cap"
    jcshell: Cannot read <D:\WorkSpace\Test_Common_Funcation\bin\Test_Class_2\javacard\Test_Class_2.cap>: java.io.FileNotFoundException: D:\WorkSpace\Test_Common_Funcation\bin\Test_Class_2\javacard\Test_Class_2.cap (The system cannot find the path specified)
    cm>  install -i 0102030405010303  -q C9#() 01020304050103 0102030405010303
    => 80 E6 0C 00 20 07 01 02 03 04 05 01 03 08 01 02    .... ...........
        03 04 05 01 03 03 08 01 02 03 04 05 01 03 03 01    ................
        00 02 C9 00 00 00                                  ......
    (1231 usec)
    <= 6A 88                                              j.
    Status: Reference data not found
    jcshell: Error code: 6a88 (Reference data not found)
    jcshell: Wrong response APDU: 6A88
    Unexpected error; aborting executionThank very much!
    Edited by: WhoKnows on Apr 20, 2012 9:32 PM

  • 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.

  • Problem Installing the loaded applet in Samsung java card (S3CC9P9).

    Hi all,
    Am trying to install the applets already loaded into the Samsung java card(S3CC9P9), because am unable to select the applet which are loaded into the card. I got to know that the applets are only loaded, they are not installed in the card, without installing the applet ,we cannot select the applet. Am using gpj(version 20120310 ) to install the applets into the card.
    When i execute : java -jar gpj.jar -list
    i get the list of applets in the card as :
    AID: A0 00 00 00 03 00 00 00 |........| ISD LC: 1 PR: 0x1A
    AID: A0 00 00 00 03 10 |......| Exe LC: 1 PR: 0x00
    AID: D4 10 65 09 90 00 10 00 |..e.....| Exe LC: 1 PR: 0x00
    AID: 31 50 41 59 2E |1PAY.| Exe LC: 1 PR: 0x00
    AID: D4 10 65 09 90 00 30 00 |..e...0.| Exe LC: 1 PR: 0x00
    AID: D4 10 65 09 90 00 20 00 |..e... .| Exe LC: 1 PR: 0x00
    Here am able to select only the first applet i.e., A0 00 00 00 03 00 00 00
    SO, when i try to install the other applets, for example A0 00 00 00 03 10, its fails.
    When i execute : java -jar gpj.jar -install -applet A00000000310
    i get :
    Found terminals: [PC/SC terminal ACS ACR38U 00 00]
    Found card in terminal: ACS ACR38U 00 00
    ATR: 3B 69 00 00 80 63 31 46 DF 83 FF 90 00
    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 19 84 08 A0 00 00 00 03 00 00 00 A5 0D 9F 6E 06 10 01 76 DE 00 05 9F 65 01 7F 90 00
    Successfully selected Security Domain OP201a A0 00 00 00 03 00 00 00
    DEBUG: Command APDU: 80 50 00 00 08 AE 2A B8 CE 3A BB E0 B0
    DEBUG: Response APDU: 00 00 61 41 01 09 38 2F 09 5A FF 01 3F D9 93 D9 FE 9A FA 3B E4 B7 21 89 6A 34 AB 18 90 00
    DEBUG: Command APDU: 84 82 00 00 10 A2 63 07 96 0B D8 A3 A9 93 A2 5C 7C 6D B7 E0 54
    DEBUG: Response APDU: 90 00
    DEBUG: Command APDU: 84 82 00 00 08 A2 63 07 96 0B D8 A3 A9
    DEBUG: Response APDU: 90 00
    java.lang.NullPointerException
         at net.sourceforge.gpj.cardservices.GlobalPlatformService.installAndMakeSelecatable(Unknown Source)
         at net.sourceforge.gpj.cardservices.GlobalPlatformService.main(Unknown Source)
    Can anyone please tell me where am wrong and how to make the applets selectable.
    Thanks in advance

    hy
    1. do you have a reader with a serial (com1) connection?
    if so, the reader has to be connected before starting windows. so windows recognizes it.
    2. have a look to the control panel. is there a tool - installed during driver installation - to test and configure the reader?
    if so try it.
    if all that works, the jcop tools communicate with the reader over the installed driver.
    snoopy

  • Inter-applet object shareing concepts in java card

    hi there.
    what is a way of implimenting inter-applet object shareing in java card?
    is there any shared area of JCRE for sharing some values among some applets in same java card?
    thanks.

    hi, as i know, there are three approaches:
    1: shareable interface;
    2: entry point;
    3: global array;
    and if the applet has JCRE privilege, then it is overwhelming.
    for details , please refer to the JCRE Specification.

Maybe you are looking for

  • How to make a second scrollbar

    hello, I'm making an ipad version of a news paper in indesign but I have a little problem. I made a scroll bar for the menu so you can scroll through all the news. now I want to make a second scroll bar on the same page so when you click on an articl

  • ERROR- Unable to retrieve data from SAP systems

    We have installed SAP Netweaver Gateway (NWGW) Tool plugin in mac os. When we are trying to browse the services we are able to see only SDATA services in NWGW plugin. So we have changed the service from ODATA to SDATA in gateway system. We are able t

  • How can i approve or start a workflow process for a rejected vacany in irec

    The users have rejected some vacancies mistakenly so how can i approve that vacany .Do i have i to restart the workflow process if yes then how can i do that . Thanks

  • How to Import entire structure located on a system to a new system.

    Hi Experts, I have been working on this project from one week.Now i need to get that entire project located on that system to another system where in the project can be worked on both the systems simultaneously. I would like to know the procedure for

  • How can I get the screen to return to normal size after magnifying?

    I've had my phone for a week and just encountered a problem I can't get out of. My nephew inadvertently held the phone with 3 fingers on the screen, now the screen is magnified and I can't get it back to normal. I've tried resetting the phone and the