CAP file analyzer - easy method size acquisition

Hi all,
I want to calculate how many bytes each method I have in my JavaCard applet takes. Right now, I am deleting the body of my methods (effectively turning that into a stub) and compile, and subtract the new size from the size of my CAP before removing the method. Can there be an easier way to do this? (A tool to analyze CAP itself, maybe?)
Any directions greatly appreciated..
Regards,
Burak

hi:
i write a program that can parse CAP file, hope that is helpful to you.
http://www.akaembed.org/Inetpub/uploads/AKA_Mail/JavaCard/CAPParser/CAPParser.exe
Good Lucky!

Similar Messages

  • Cap file analyzer program?

    Hello all,
    Is there any program to analyze the cap file?
    the program read the cap file and print out or make a file with cap file information by components user kindly format. like Header Component.tag = 0x01 size=0x0A .....
    Thanks,
    Julie.

    hi:
    i write a program that can parse CAP file, hope that is helpful to you.
    http://www.akaembed.org/Inetpub/uploads/AKA_Mail/JavaCard/CAPParser/CAPParser.exe
    Good Lucky!

  • Cap file Components size limit ( ? )

    Hello,
    I'm wondering if there is a limitation on the Cap file internal components size.
    as specified in the JVM Spec from SUN, a cap file consists on several elements (byte sequences) : Header.cap , Class.cap, StaticField.cap, etc.
    Does a component have a size limit ?
    I'm asking this question because I'm facing serious problem when loading Applets on Gemplus SIM cards(GemWpressoV3 ) : the load process interrupts sudenly and the card responds with 6F00 !!
    For info, the Method.cap components is 11748 bytes !!
    Thank you for your Help and Info
    Kartagos

    here is a complete description of the Cap I can't load :
        Header.cap (29 Bytes)
        Directory.cap (34 Bytes)
        Import.cap (62 Bytes)
        Applet.cap (23 Bytes)
        Class.cap (94 Bytes)
        Method.cap (8484 Bytes)
        StaticField.cap (6312 Bytes)
        ConstantPool.cap (925 Bytes)
        RefLocation.cap (1411 Bytes)
        Descriptor.cap (2340 Bytes)

  • Analyze netmon .cap file with logparser

    Hi all,
    I'm trying to analyze a cap file with logparser. I'm exporting all the content of the file to a CSVfile. But when I open the CSV file, it doesn't shows source IP and destination IP for any of the packets. Whereas if I open the file with network monitor,
    it does shows all the information. I'm using below mentioned query to export the data to CSV.
    logparser -i:netmon "SELECT * INTO test.csv FROM test.cap"
    Regards, Darshan G. Parab

    Per
    http://blogs.msdn.com/b/ambhrin/archive/2012/05/08/working-with-netmon-amp-wireshark-traces.aspx,
    "Known issues on Windows 7
    If you are trying to parse the Netmon trace File through Logparser, the SrcIP and the DstIP fields might appear to be blank. This is a known issue with Win 7. However parsing should work just fine on a XP or a Win 8 machine."
    -Steve

  • CAP File format questions !!!

    I've been trying to parse CAP files, but having trouble figuring out these values...
    In Method component: what is the number of elements in "method_info methods[]" array???
    in method_info: what is the size of bytecodes[] array???
    in type_descriptor_info: what is the number of elements in type_desc[] array???
    many thanks

    See the JCVM Specifications, the size of the structure arrays u have mentioned is not specified. If you parse these files u can do it with the help of Reference location component. If you use the pointers in C it will be easy as compared to Java.

  • Accessing a Static Array in one CAP file from another CAP in same project

    Hi all,
    I have been developing a banking application on JavaCard. So the size of the applet has grown size able and have now split the file to multiple CAP files. I have been using NXP JCOP plugin in Eclipse for development. Below are the steps done
    a.) I have created multiple packages under the same project where one project has all the variable which are public static final and don't reference any other class. Also this package does not extend Applet. So it finally generates to a CAP file.
    b.) Another package which imports the above package and also extend Applet is the one which has all the UI and logic related to the project. The applet uses the static array defined in the another package to show the menu on phone.
    Now the problem is that when the code come to point for fetching the menu data, i have some thing like menu.length . But when the code comes to this point in debugger i get a
    +6F 00    Status: No precise diagnosis.+
    To cross check i put a watch on the menu variable and found that it has all the data required for showing the menu (which is of 32 byes). So now i am perplexed on why this length is giving this problem. Am i doing some thing wrong. Below is the Snip of the larger code
    This code is the package which has all the constants..
    package constantsPack;
    import javacard.framework.APDU;
    import javacard.framework.ISO7816;
    import javacard.framework.JCSystem;
    import javacard.framework.Util;
    public class ConstantsApplet {
    //menu array decleration
    public static final byte[] MAIN_SETUP_MENU = {
                       (byte) 0x81,  ConstantsApplet.CMD_DTL_LENGTH, ConstantsApplet.CMD_NUMBER, ConstantsApplet.MAIN_CMD_SET_UP_MENU, (byte) 0x00,
                       (byte) 0x82, (byte) 0x02, ConstantsApplet.DEVICEID_SIM, ConstantsApplet.DEVICEID_ME,
                       (byte) 0x85, (byte) 0x08 ,'A','B', 'C',' ','A','p','p','s',
                       (byte) 0x8F, (byte) 0x0D, ConstantsApplet.SB_MENU, 'A','b','c','d','e','f','g',' ','B','a','n','k',
    // other constants.
    }This is the package which has the applet and which uses the variables of the above package
    package myPkgLib;
    import constantsPack.*;
    import javacard.framework.APDU;
    import javacard.framework.Applet;
    import javacard.framework.ISO7816;
    import javacard.framework.ISOException;
    import javacard.framework.OwnerPIN;
    import javacard.framework.Util;
    import javacard.framework.JCSystem;
    public class myApplet extends Applet{
    // other code
    fetch(ConstantsApplet.MAIN_SETUP_MENU.length);
    }Any help regarding this would be very helpful...
    Regards
    Prakash
    Edited by: prakash on Apr 18, 2012 11:57 PM

    Hi lexdabear,
    I tried putting a function inside the library package where the static array is present, but the results are the same... Also by try catch . what exception you want to catch... i see Exception has just .equal function... Tried with ExternalException also but does not seem to enter it..
    Attaching the source code compilable in eclipse below ..
    package constantsPack;
    public class ConstantsApplet {
         public static final byte[] MAIN_SETUP_MENU = {
              (byte) 0x81, (byte) 0x03, (byte) 0x01, (byte) 0x25, (byte) 0x00,
              (byte) 0x82, (byte) 0x02, (byte) 0x81, (byte) 0x82,
              (byte) 0x85, (byte) 0x08 ,'A','B', 'C',' ','A','p','p','s',
              (byte) 0x8F, (byte) 0x0D,  0x0F, 't','e','s','t','a','p','p',' ','B','a','n','k',
              public ConstantsApplet ()
    }The applet code where the above static array is used..
    package smilePkgLib;
    import constantsPack.*;
    import javacard.framework.APDU;
    import javacard.framework.Applet;
    import javacard.framework.ISOException;
    import javacard.framework.Util;
    public class BLApplet extends Applet{
         short fetchcode =0;
         public static void install(byte[] bArray, short bOffset, byte bLength) {
              // GP-compliant JavaCard applet registration
              new smilePkgLib.BLApplet().register(bArray,
                        (short) (bOffset + 1), bArray[bOffset]);
         private BLApplet(){
              // put init code
          * The main method.
         public void process(APDU apdu) throws ISOException {
              if (selectingApplet()) {
                   return;
              byte choosenMenuItem = 0;
              byte[] buf = apdu.getBuffer();
              byte bytesRead =(byte)(apdu.setIncomingAndReceive());
              fetchList(ConstantsApplet.MAIN_SETUP_MENU , (byte)0x00);
         private void fetchList(byte[] list, byte command){
              shouldFetch(list);
          * Overloaded method to fetch the MENUs only.     
          * @param menu
         private void shouldFetch(byte[] menu) {
              shouldFetch((byte)menu.length);
         private void shouldFetch(byte len) {
                   fetchcode = Util.makeShort((byte) 0x91, (byte) (len));          
    }The JCOP script to run the above project
    /select |DefaultApplet
    # Terminal Profile
    /send A0100000133B67FF7F1F020F0B4100000000869804000000 Have the eclipse loadable project but dont know how to put here...
    Regards
    prakash.

  • Install CAP file ERROR "6A 80"

    Hi everyone !
    I created CAP file with java card dev kit 2.1.2 and success to upload on card . But when i tried to install it returned the error 6A 80 (Wrong data) . Here is the error :
    <= 90 00 ..
    Status: No Error
    Load report:
    18048 bytes loaded in 10.3 seconds
    effective code size on card:
    + package AID 7
    + applet AIDs 13
    + classes 67
    + methods 15203
    + statics 254
    + exports 0
    overall 15544 bytes
    => 84 E6 0C 00 24 07 48 55 4E 45 49 44 01 06 48 55 ....$.HUNEID..HU
    4E 45 49 44 06 48 55 4E 45 49 44 01 00 02 C9 00 NEID.HUNEID.....
    00 6A 1D BD 2B 5F BE 82 2A 00 .j..+_..*.
    (1746340 usec)
    <= 6A 80 j.
    Status: Wrong data
    i tried to do the same step with the sample applet in JCK 2.1.2 and they run smoothly .
    Thanks in advance for any help !

    hi
    use install command like this example:
    applet id : a00000006203010c0101 length : 10 decimal 0a hex
    package id : a00000006203010c01 length :9
    80 e6 0c 00 26
    09a00000006203010c01 0aa00000006203010c0101 0aa00000006203010c0101 0100 02c90000

  • Verify user pin on a smart card & load a cap file on a card (with eclipse)

    I have been able install JCWDE (Java card development Kit) successfully on eclipse.Basically all I need to do is verify user pin on a smart card.As in first set a pin and then verify it.
    To begin with I have referred many tutorials (here: http://www.javaworld.com/jw-07-1999/jw-07-javacard.html?page=1) and implemented the wallet code in eclipse.I have the cap file generated and the scripts generated.I am not sure how to load it on the smart card with eclipse.
    I tried to deploy the cap file but it keeps saying connected.Also when we initiate the applet I get the same result.
    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 9032.
    Connected.
    I have also tried : http://www.cs.ru.nl/E.Poll/hw/practical.html ........ but no luck.
    I have the wallet.cap ,wallet.exp ,wallet.jca ,wallet.opt create.script, select,cap-download.scripts files already generated in eclipse.
    How does a successfully implemented applet code on a smart card work?How does this wallet code work if it is successfully implemented ? Does it have like some GUI which prompts the user to enter the pin?
    Wallet code for reference :
    package com.sun.javacard.samples.wallet;
    import javacard.framework.*;
    public class Wallet extends Applet {
    /* constants declaration */
    // code of CLA byte in the command APDU header
    final static byte Wallet_CLA =(byte)0x80;
    // codes of INS byte in the command APDU header
    final static byte VERIFY = (byte) 0x20;
    final static byte CREDIT = (byte) 0x30;
    final static byte DEBIT = (byte) 0x40;
    final static byte GET_BALANCE = (byte) 0x50;
    // maximum balance
    final static short MAX_BALANCE = 0x7FFF;
    // maximum transaction amount
    final static byte MAX_TRANSACTION_AMOUNT = 127;
    // maximum number of incorrect tries before the
    // PIN is blockedd
    final static byte PIN_TRY_LIMIT =(byte)0x03;
    // maximum size PIN
    final static byte MAX_PIN_SIZE =(byte)0x08;
    // signal that the PIN verification failed
    final static short SW_VERIFICATION_FAILED =
    0x6300;
    // signal the the PIN validation is required
    // for a credit or a debit transaction
    final static short SW_PIN_VERIFICATION_REQUIRED =
    0x6301;
    // signal invalid transaction amount
    // amount > MAX_TRANSACTION_AMOUNT or amount < 0
    final static short SW_INVALID_TRANSACTION_AMOUNT = 0x6A83;
    // signal that the balance exceed the maximum
    final static short SW_EXCEED_MAXIMUM_BALANCE = 0x6A84;
    // signal the the balance becomes negative
    final static short SW_NEGATIVE_BALANCE = 0x6A85;
    /* instance variables declaration */
    OwnerPIN pin;
    short balance;
    private Wallet (byte[] bArray,short bOffset,byte bLength) {
    // It is good programming practice to allocate
    // all the memory that an applet needs during
    // its lifetime inside the constructor
    pin = new OwnerPIN(PIN_TRY_LIMIT, MAX_PIN_SIZE);
    byte iLen = bArray[bOffset]; // aid length
    bOffset = (short) (bOffset+iLen+1);
    byte cLen = bArray[bOffset]; // info length
    bOffset = (short) (bOffset+cLen+1);
    byte aLen = bArray[bOffset]; // applet data length
    // The installation parameters contain the PIN
    // initialization value
    pin.update(bArray, (short)(bOffset+1), aLen);
    register();
    } // end of the constructor
    public static void install(byte[] bArray, short bOffset, byte bLength) {
    // create a Wallet applet instance
    new Wallet(bArray, bOffset, bLength);
    } // end of install method
    public boolean select() {
    // The applet declines to be selected
    // if the pin is blocked.
    if ( pin.getTriesRemaining() == 0 )
    return false;
    return true;
    }// end of select method
    public void deselect() {
    // reset the pin value
    pin.reset();
    public void process(APDU apdu) {
    // APDU object carries a byte array (buffer) to
    // transfer incoming and outgoing APDU header
    // and data bytes between card and CAD
    // At this point, only the first header bytes
    // [CLA, INS, P1, P2, P3] are available in
    // the APDU buffer.
    // The interface javacard.framework.ISO7816
    // declares constants to denote the offset of
    // these bytes in the APDU buffer
    byte[] buffer = apdu.getBuffer();
    // check SELECT APDU command
    if (apdu.isISOInterindustryCLA()) {
    if (buffer[ISO7816.OFFSET_INS] == (byte)(0xA4)) {
    return;
    } else {
    ISOException.throwIt (ISO7816.SW_CLA_NOT_SUPPORTED);
    // verify the reset of commands have the
    // correct CLA byte, which specifies the
    // command structure
    if (buffer[ISO7816.OFFSET_CLA] != Wallet_CLA)
    ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
    switch (buffer[ISO7816.OFFSET_INS]) {
    case GET_BALANCE:
    getBalance(apdu);
    return;
    case DEBIT:
    debit(apdu);
    return;
    case CREDIT:
    credit(apdu);
    return;
    case VERIFY:
    verify(apdu);
    return;
    default:
    ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
    } // end of process method
    private void credit(APDU apdu) {
    // access authentication
    if ( ! pin.isValidated() )
    ISOException.throwIt(SW_PIN_VERIFICATION_REQUIRED);
    byte[] buffer = apdu.getBuffer();
    // Lc byte denotes the number of bytes in the
    // data field of the command APDU
    byte numBytes = buffer[ISO7816.OFFSET_LC];
    // indicate that this APDU has incoming data
    // and receive data starting from the offset
    // ISO7816.OFFSET_CDATA following the 5 header
    // bytes.
    byte byteRead =
    (byte)(apdu.setIncomingAndReceive());
    // it is an error if the number of data bytes
    // read does not match the number in Lc byte
    if ( ( numBytes != 1 ) || (byteRead != 1) )
    ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
    // get the credit amount
    byte creditAmount = buffer[ISO7816.OFFSET_CDATA];
    // check the credit amount
    if ( ( creditAmount > MAX_TRANSACTION_AMOUNT)
    || ( creditAmount < 0 ) )
    ISOException.throwIt(SW_INVALID_TRANSACTION_AMOUNT);
    // check the new balance
    if ( (short)( balance + creditAmount) > MAX_BALANCE )
    ISOException.throwIt(SW_EXCEED_MAXIMUM_BALANCE);
    // credit the amount
    balance = (short)(balance + creditAmount);
    } // end of deposit method
    private void debit(APDU apdu) {
    // access authentication
    if ( ! pin.isValidated() )
    ISOException.throwIt(SW_PIN_VERIFICATION_REQUIRED);
    byte[] buffer = apdu.getBuffer();
    byte numBytes =
    (byte)(buffer[ISO7816.OFFSET_LC]);
    byte byteRead =
    (byte)(apdu.setIncomingAndReceive());
    if ( ( numBytes != 1 ) || (byteRead != 1) )
    ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
    // get debit amount
    byte debitAmount = buffer[ISO7816.OFFSET_CDATA];
    // check debit amount
    if ( ( debitAmount > MAX_TRANSACTION_AMOUNT)
    || ( debitAmount < 0 ) )
    ISOException.throwIt(SW_INVALID_TRANSACTION_AMOUNT);
    // check the new balance
    if ( (short)( balance - debitAmount ) < (short)0 )
    ISOException.throwIt(SW_NEGATIVE_BALANCE);
    balance = (short) (balance - debitAmount);
    } // end of debit method
    private void getBalance(APDU apdu) {
    byte[] buffer = apdu.getBuffer();
    // inform system that the applet has finished
    // processing the command and the system should
    // now prepare to construct a response APDU
    // which contains data field
    short le = apdu.setOutgoing();
    if ( le < 2 )
    ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
    //informs the CAD the actual number of bytes
    //returned
    apdu.setOutgoingLength((byte)2);
    // move the balance data into the APDU buffer
    // starting at the offset 0
    buffer[0] = (byte)(balance >> 8);
    buffer[1] = (byte)(balance & 0xFF);
    // send the 2-byte balance at the offset
    // 0 in the apdu buffer
    apdu.sendBytes((short)0, (short)2);
    } // end of getBalance method
    private void verify(APDU apdu) {
    byte[] buffer = apdu.getBuffer();
    // retrieve the PIN data for validation.
    byte byteRead = (byte)(apdu.setIncomingAndReceive());
    // check pin
    // the PIN data is read into the APDU buffer
    // at the offset ISO7816.OFFSET_CDATA
    // the PIN data length = byteRead
    if ( pin.check(buffer, ISO7816.OFFSET_CDATA,
    byteRead) == false )
    ISOException.throwIt(SW_VERIFICATION_FAILED);
    } // end of validate method
    } // end of class Wallet
    Any help on this would highly appreciated !! :)

    Hi,
    Thanks a lot for reply.But I am not sure as to how can I delete the simulator.
    All I want to do is write a pin on the smart card and verify it.But I am not being able to deploy the cap file or initiate the applet.
    Also for passing the pin correct me if I am wrong........ according to what you said and what I have understood
    If the code is like this :
    public static void install(byte[] bArray, short bOffset, byte bLength) {
    // create a Wallet applet instance
    new Wallet(bArray, bOffset, bLength);
    } // end of install method
    byte aLen = bArray[bOffset]; // applet data length
    // The installation parameters contain the PIN
    // initialization value
    pin.update(bArray, (short)(bOffset+1), aLen);
    Lets say my pin is : 1234
    then I would pass it here.....
    new Wallet(bArray, 1234, bLength);

  • CAP file safety  questions?

    Hello,
    I am interested in 3 question:
    1. Is there any possibility to get the CAP file from a card.
    2. Is CAP file backward convertible to .class or .java files? I.e. is it safe enough for distribution, to avoid the retrieval of the source code?
    3. What files should be distributed for extended APIs: EXP, CAP file and stub class files? Am i right?
    I appreciate any answers and advices regarding the safety of the CAP files.
    Best regards,
    newbie.

    1. Is there any possibility to get the CAP file from a card.Yes. Use google, search on "Javacard attacks" or "javacard hacks". You will find many papers and presentations on what has been done, what works, what does not.
    My conclusions: Its possible. Its hard to do. Various people are working on it, so perhaps its getting easier. Vendors are making cards more resistant to attack, so perhaps its getting harder.
    2. Is CAP file backward convertible to .class or .java files? No, not backward compatible, or at least not easily. Some information is lost. I have not found any open source or commercial tools for this.
    See this thread: http://forum.java.sun.com/thread.jspa?threadID=5217462&tstart=0
    I.e. is it safe enough for distribution, to avoid the retrieval of the source code?Probably. It will take significant effort to reverse a CAP file all the way back to Java source that will compile and execute with the same results as the original. Probably 100's of hours of work.
    3. What files should be distributed for extended APIs: EXP, CAP file and stub class files? Am i right?At minimum the EXP and CAP. A developer has no way to use the CAP file without the EXP file. The EXP file contains all of the class, method and field names for the public methods/fields that the converter tool needs (there are no String names in the CAP file).
    Read the JavaCard Virtual Machine specification. Its very enlightening.
    Dan

  • ERROR while generating CAP file

    Hello,
    Iam trying to generate a cap file of JCRMI applet. Iam getting the following errors while generating a CAP file. Can anybody help me.
    Thanks in advance,
    With Regards,
    Abhishek Goud
    {color:#ff0000}{color:#008080}*C:\Documents and Settings\Administrator\Desktop\Demo>converter -classdir C:\jav*
    a_card_kit-2_2_2\lib -exportpath C:\java_card_kit-2_2_2\api_export_files;C:\java
    cardkit-2_2_2\lib -applet 0xa0:0x00:0x00:0x00:0x62:0x03:0x01:0x08:0x01 PurseAp*
    plet com.sun.javacard.samples.RMIDemo 0xa0:0x00:0x00:0x00:0x62:0x12:0x34 1.3
    {color}
    Java Card 2.2.2 Class File Converter, Version 1.3
    Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to lic
    ense terms.
    warning: You did not supply export file for the previous minor version of the pa
    ckage
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported type long of
    field serialVersionUID.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unhandled bytecode ifnull in clinit method, try a different compiler.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unhandled bytecode goto
    in clinit method, try a different compiler.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode inv
    okestatic in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method class$(java.lang.String) of class com.sun.javacard.s
    amples.RMIDemo.PurseImpl_Stub.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode ane
    warray in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode aas
    tore in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode inv
    okevirtual in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method getMethod(java.lang.String, java.lang.Class) of clas
    s java.lang.Class.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unhandled bytecode ifnul
    l in clinit method, try a different compiler.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unhandled bytecode goto
    in clinit method, try a different compiler.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode inv
    okestatic in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method class$(java.lang.String) of class com.sun.javacard.s
    amples.RMIDemo.PurseImpl_Stub.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode ane
    warray in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode aas
    tore in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode inv
    okevirtual in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method getMethod(java.lang.String, java.lang.Class) of clas
    s java.lang.Class.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unhandled bytecode ifnul
    l in clinit method, try a different compiler.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unhandled bytecode goto
    in clinit method, try a different compiler.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode inv
    okestatic in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method class$(java.lang.String) of class com.sun.javacard.s
    amples.RMIDemo.PurseImpl_Stub.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode ane
    warray in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode inv
    okevirtual in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method getMethod(java.lang.String, java.lang.Class) of clas
    s java.lang.Class.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unhandled bytecode ifnul
    l in clinit method, try a different compiler.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unhandled bytecode goto
    in clinit method, try a different compiler.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode inv
    okestatic in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method class$(java.lang.String) of class com.sun.javacard.s
    amples.RMIDemo.PurseImpl_Stub.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode ane
    warray in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode inv
    okevirtual in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method getMethod(java.lang.String, java.lang.Class) of clas
    s java.lang.Class.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unhandled bytecode ifnul
    l in clinit method, try a different compiler.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unhandled bytecode goto
    in clinit method, try a different compiler.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode inv
    okestatic in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method class$(java.lang.String) of class com.sun.javacard.s
    amples.RMIDemo.PurseImpl_Stub.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode ane
    warray in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unhandled bytecode ifnul
    l in clinit method, try a different compiler.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unhandled bytecode goto
    in clinit method, try a different compiler.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode inv
    okestatic in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method class$(java.lang.String) of class com.sun.javacard.s
    amples.RMIDemo.PurseImpl_Stub.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode aas
    tore in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode inv
    okevirtual in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method getMethod(java.lang.String, java.lang.Class) of clas
    s java.lang.Class.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unhandled bytecode goto
    in clinit method, try a different compiler.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unhandled bytecode pop i
    n clinit method, try a different compiler.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode new
    in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode inv
    okespecial in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method <init>(java.lang.String) of class java.lang.NoSuchMe
    thodError.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported bytecode ath
    row in clinit method.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of method class$.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method forName(java.lang.String) of class java.lang.Class.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported return type
    String of invoked method getMessage() of class java.lang.Throwable.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method <init>(java.lang.String) of class java.lang.NoClassD
    efFoundError.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported long type co
    nstant.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe long of invoked method invoke(java.rmi.Remote, java.lang.reflect.Method, java
    *.lang.Object, long) of class java.rmi.server.RemoteRef.*
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported String type
    constant.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method <init>(java.lang.String, java.lang.Exception) of cla
    ss java.rmi.UnexpectedException.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported long type co
    nstant.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe long of invoked method invoke(java.rmi.Remote, java.lang.reflect.Method, java
    *.lang.Object, long) of class java.rmi.server.RemoteRef.*
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported String type
    constant.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method <init>(java.lang.String, java.lang.Exception) of cla
    ss java.rmi.UnexpectedException.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported long type co
    nstant.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe long of invoked method invoke(java.rmi.Remote, java.lang.reflect.Method, java
    *.lang.Object, long) of class java.rmi.server.RemoteRef.*
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported String type
    constant.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method <init>(java.lang.String, java.lang.Exception) of cla
    ss java.rmi.UnexpectedException.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported long type co
    nstant.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe long of invoked method invoke(java.rmi.Remote, java.lang.reflect.Method, java
    *.lang.Object, long) of class java.rmi.server.RemoteRef.*
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported String type
    constant.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method <init>(java.lang.String, java.lang.Exception) of cla
    ss java.rmi.UnexpectedException.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported long type co
    nstant.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe long of invoked method invoke(java.rmi.Remote, java.lang.reflect.Method, java
    *.lang.Object, long) of class java.rmi.server.RemoteRef.*
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported String type
    constant.
    error: com.sun.javacard.samples.RMIDemo.PurseImpl_Stub: unsupported parameter ty
    pe String of invoked method <init>(java.lang.String, java.lang.Exception) of cla
    ss java.rmi.UnexpectedException.
    {color}
    conversion completed with 73 errors and 1 warnings.

    It seems there is a variable of type "long" in your applet. The "long" type is not supported by Java Card, so you should remove all variables with type "long".
    Otherwise, without the source code, it is difficult to help you find out what's wrong.

  • How to load the .cap file in a Smart Card?

    Dear All,
    Hello..!!
    I am using JCDK 2.2 and have used Eclipse JCDK.
    I have written a simple read/write applet and created a .cap file using Eclipse's Converter Java Card tool.
    What is the next step to be done?
    I have a smart card device and have installed its drivers.
    When do the APDU commands come into picture?
    Expecting help.
    Thanks a lot.
    Regards,
    Suril

    Suril Sarvaiya wrote:
    Hi Shane....
    Thnx a lot....
    I have downloaded GP-Shell 1.4.4
    When I open its application and write any command and press enter ; the app window closes immendiately.
    Can you please help me on this?
    One more thing Shane......
    I'm writig a java class using javax.smartcardio
    I have installed drivers of Omnikey 3021
    but the TerminalFactory is not detecting it?
    Any idea on that?
    Thanks again...
    Regards,
    SurilHi all,
    Is Mr. thread starter has solved his problem?
    I profit this thread to post my question. I'm working with new environment and I have problem loading cap file into my smartcard.
    specification come first :-)
    - My smartcard is said to be JC2.2.1 and GP2.1.1 compatible
    - My code (for testing) is written in Java under eclipse Helios service 2 with JavaCard plugin (for JC2.2.2)
    I compile my code with JDK 1.3 (for compatible version) and using the JC plugin to generate cap file (along with exp and jca).
    My problem is exactly the same as one that was posted in this forum about 2 years ago but is not answered :-)
    [Problem Loading Application to Card |http://forums.oracle.com/forums/thread.jspa?threadID=1749334&tstart=420]
    + I successfully authenticate with smartcard
    + APDU command Install for Load is executed successfully
    + BUT the APDU command LOAD file fails with returned status word is 6424
    For details, I post here my javacard applet code and APDU command executed with my tool:
    package mksAuthSys;
    import javacard.framework.APDU;
    import javacard.framework.Applet;
    import javacard.framework.ISO7816;
    import javacard.framework.ISOException;
    import javacard.framework.OwnerPIN;
    public class Jcardlet extends Applet {
         private final static byte[] myPIN = { (byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04};
         final static byte Jcardlet_CLA =(byte)0xB0;
         final static byte VERIFY = (byte) 0x20;
         final static byte PIN_TRY_LIMIT =(byte)0x03;
         final static byte MAX_PIN_SIZE =(byte)0x08;
         final static short SW_VERIFICATION_FAILED = 0x6300;
         OwnerPIN pin;
         private Jcardlet() {
              pin = new OwnerPIN(PIN_TRY_LIMIT, MAX_PIN_SIZE);
              pin.update(myPIN, (byte) 0, (byte) 4 );
             register();
         public static void install(byte bArray[], short bOffset, byte bLength)
                   throws ISOException {
              new Jcardlet().register();
         public boolean select() {
              if ( pin.getTriesRemaining() == 0 ) return false;
             return true;     
         public void deselect(){
              pin.reset();
         //@Override
         public void process(APDU apdu) throws ISOException {
              // TODO Auto-generated method stub
              byte[] buffer = apdu.getBuffer();
              if ((buffer[ISO7816.OFFSET_CLA] == 0) &&
                      (buffer[ISO7816.OFFSET_INS] == (byte)(0xA4))) return;          
              if (buffer[ISO7816.OFFSET_CLA] != Jcardlet_CLA)
                    ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);          
              switch (buffer[ISO7816.OFFSET_INS]) {
               case VERIFY: verify(apdu);
                 return;
               default: ISOException.throwIt (ISO7816.SW_INS_NOT_SUPPORTED);
         private void verify(APDU apdu) {
              // TODO Auto-generated method stub
             byte[] buffer = apdu.getBuffer();
             // retrieve the PIN data for validation.
             byte byteRead = (byte)(apdu.setIncomingAndReceive());
             // check pin
             // the PIN data is read into the APDU buffer
             // at the offset ISO7816.OFFSET_CDATA
             // the PIN data length = byteRead
             if ( pin.check(buffer, ISO7816.OFFSET_CDATA,byteRead) == false )
               ISOException.throwIt(SW_VERIFICATION_FAILED);          
    }And my APDU command:
    Loading "D:\mksAuthSys.cap" ...
    T - 80F28000024F00
    C - 08A000000003000000079E9000
    ISD AID : A000000003000000
    T - 80E602001508F23412345610000008A00000000300000000000000
    C - 009000
    T - 80E80000C8C482018B010012DECAFFED010204000108F23412345610000002001F0012001F000C001500420012009D0011001C0000009F00020001000402010004001502030107A0000000620101000107A000000062000103000C0108F234123456100001002306001200800301000104040000003DFFFF0030004507009D000510188C0003188F00013D0610088C00028700AD007B000403078B0005188B00067A02308F00073D8C00088B00067A0110AD008B00096104037804780110AD008B000A7A0221198B000B2D1A0300
    C - 6424
    Stopped loading due to unexpected status words.Urgently look forward to hearing from you.
    Thanks a bunch in advance
    Best Regards,
    JDL

  • How do I get iTunes 10 to play movie files as their actual size?

    In iTunes (10), I have several iTunes purchases/rentals as well as movie files I've created on my own and converted into .mp4 format. My problem is that I really would like to play these files as their actual size, but can't seem to get iTunes to cooperate. I'm sure there's an easy way to do this and I've tried the quick-keyboard command (command-1), but without luck for both the iTunes official files (m4v) and the .mp4s.  Any help is very appreciated.

    Chris CA wrote:
    Double click to play it then right click > Open in separate window.
    Or you can set iTunes to always open movies in their own window.
    iTunes prefs > Playback.
    iTunes 10.5 (on 10.6.8) doesn't have a "playback in separate window" option.
    Fortunately, the effectively hidden right-click "Playback Video in Separate Window" option is still available, and this choice holds for future videos.
    I can keep my iTunes window on my left monitor and playback videos on my larger, widescreen middle monitor.

  • What is the wrong about converting the .class of api of jc to .cap files?

    hi everyone
    l tried to convert the .class filses of api to .cap files,there are some wrongs please help me!
    ___the .opt file:___
    -out JCA CAP EXP
    -exportpath D:\jCDK2_2_1\api_export_files
    -classdir D:\workspace\framework
    framework
    0x0a:0x0:0x0:0x0:0x62:0x1:0x01 1.2
    converter result:
    c:documents and settings\administrator>converter -config d:\workspace\framework\framework.opt
    java card 2.2.1 class files converter ,version 1.3
    copyright 2003 sun microsystems,inc.all rights reserved.use is subject to license terms
    error:javacard.framework.JCSystem:unsupported method modifier native in method isTransient.
    error:javacard.framework.JCSystem:unsupported method modifier native in method makeTransientBooleanArray.
    error:javacard.framework.JCSystem:unsupported method modifier native in method makeTransientByteArray
    error:javacard.framework.JCSystem:unsupported method modifier native in method makeTransientShortArray
    conversion completed with 13 errors and 0 warnings.
    thanks in advance

    Hi,
    I am not sure why you are trying to convert the API packages into CAP files. The JAR files that ship with the JCDK are only stub implementations for compiling against. They do not have an actual implementation. You will find methods returning a short always return 0 etc. You should only need to convert your code into CAP files. You will just need to reference the .exp files that are included in the JCDK for the API so your code can be converted.
    Cheers,
    Shane

  • CAP file generating ERROR

    Hi everybody ,
    I'm trying to build a javacard project by using ANT tool . The problem is when i use the JCOP tool converter (tric.jar) with JRE 1.4 or 1.5 i got the following error :
    Error: class java.lang.RuntimeException, resolving constant-pool of clazz Lhun/eid/javacard/EIDApplet; failed: no such method getClass, ()Ljava/lang/Class; in Ljava/lang/Object;
    and JCOP tool converter with JRE 1.6 , igot another error : invalid magic cafebabe
    After that , i replaced the JCOP tool's converter by using the java_card_kit-2_2_2's converter , and i got another error :
    [java] converting hun.eid.javacard.EIDApplet
    [java] parsing C:\Users\mannykitty\workspace NEW\HUNEID\lib\api_export_files\javacard\framework\javacard\framework.exp
    [java] parsing C:\Users\mannykitty\workspace NEW\HUNEID\lib\api_export_files\javacardx\crypto\javacard\crypto.exp
    [java] error: line 2094: hun.eid.javacard.EIDApplet: method getClass() of class java.lang.Object not found in export file lang.exp or the method signature has changed.
    [java] error: line 2094: hun.eid.javacard.EIDApplet: class java.lang.Class not found in export file lang.exp.
    [java] error: line 2094: hun.eid.javacard.EIDApplet: class java.lang.Class in return type of method java.lang.Object.getClass() not found.
    [java] error: line 2094: hun.eid.javacard.EIDApplet: method getClass() of class java.lang.Object not found in export file lang.exp or the method signature has changed.
    [java] error: line 2094: hun.eid.javacard.EIDApplet: class java.lang.Class not found in export file lang.exp.
    [java] error: line 2094: hun.eid.javacard.EIDApplet: class java.lang.Class in return type of method java.lang.Object.getClass() not found.
    [java] conversion completed with 6 errors and 0 warnings.
    [java] Java Result: 1
    Can someone tell me how to fix this ? Any help will be appreciated !

    I've added the api.jar to class path for compiling but it's seemed not to be changed . Here is my ANT build.xml config :
    <property name="lib" value="lib"/>
         <property name="JCKlibHome" value="c:\Java\java_card_kit-2_2_2\lib"/>
    <property name="JCOPlib" value="${lib}/slbJIop.jar;${lib}/jc_api_212.jar;${lib}/jce1_2_2.jar;${lib}/sunjce_provider.jar"/>
    <property name="JCOPtools" value="${JCKlibHome}/converter.jar;${JCKlibHome}/offcardverifier.jar"/>
    <property name="src" value="src"/>
         <property name="build" value="build"/>
    <property name="classes" value="${build}/classes"/>
    <property name="cardout" value="${build}/card"/>
    <property name="tmp" value="${build}/tmp"/>
    <property name="buildcp" value="${JCOPlib};${JCKlibHome}/api.jar"/>
    Compile :
    <target name="compile" depends="init" description="Compile the javacard source into class files">
    <!-- Compile the java code from ${src} into ${classes} -->
    <javac debug="yes" classpath="${buildcp}" srcdir="${src}" destdir="${classes}"/>
    </target>
    CAP generation:
    <target name="createCAP" depends="compile,capuptodatecheck" unless="capfile.uptodate" description="Create the CAP file from the class files">
    <java classname="com.sun.javacard.converter.Converter" classpath="${JCOPtools}" fork="yes">
         <arg line="-classdir ${classes}" />
         <arg line="-exportpath ${JCOPlib};C:\Java\java_card_kit-2_2_2\api_export_files"/>
         <arg line="-d ${cardout}" />
         <arg line="-v" />
         <arg line="-out CAP EXP JCA" />
         <arg line="-applet 0x41:0x70:0x70:0x68:0x75:0x6e:0x65:0x69:0x64 hun.eid.javacard.EIDApplet hun.eid.javacard 0x41:0x70:0x70:0x68:0x75:0x6e:0x65:0x69:0x64:0x01" />
         <arg line="1.0" />
    ERROR :
    [java] error: line 2094: hun.eid.javacard.EIDApplet: method getClass() of class java.lang.Object not found in export file lang.exp or the method signature has changed.
    [java] error: line 2094: hun.eid.javacard.EIDApplet: class java.lang.Class not found in export file lang.exp.
    [java] error: line 2094: hun.eid.javacard.EIDApplet: class java.lang.Class in return type of method java.lang.Object.getClass() not found.
    [java] error: line 2094: hun.eid.javacard.EIDApplet: method getClass() of class java.lang.Object not found in export file lang.exp or the method signature has changed.
    [java] error: line 2094: hun.eid.javacard.EIDApplet: class java.lang.Class not found in export file lang.exp.
    [java] error: line 2094: hun.eid.javacard.EIDApplet: class java.lang.Class in return type of method java.lang.Object.getClass() not found.
    [java] conversion completed with 6 errors and 0 warnings.
    [java] Java Result: 1
    :(

  • JCOP and CAP file components

    Hi,
    I'm trying to reproduce the APDU install (for load) and load (CAP file) commands the JCOP shell executes when you run an applet whith JCOP 3.1.
    I noticed that the JCOP shell executes as many load commands as the CAP file size requires since the max datafield size of an APDU command is 255 bytes. But when I add the size of of the commands, I get 793 bytes when the CAP file size is 4695 bytes.
    I found in the JavaCard JCVM specification, which describes the CAP file format that a CAP file is divided in several CAP files. So It seems to me that JCOP parse the "global" CAP file and only load parts of it in the emulated card.
    The question is, which "little" CAP files are required to load the applet correctly and how could you know how the CAP file is actually structured in order to parse it correctly ?

    Hi,
    the CAP-File is a special and very complex format and the result of the JCOP build process for a package (all applets of this package).
    Loading an applet from a CAP-File via the JCShell "upload" command consists of 2 steps:
    - first: send the upload initialization command
    - second: send the code for this applet in (n) max. 255-byte blocks
    Every code block has 6 leading command bytes.
    The byte stream to send to the card or emulation depends on some requirements like header, code, debug-info, description...
    So it cannot have the same size like your CAP-file!!

Maybe you are looking for