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
Kartagoshere 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. ParabPer
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 thanksSee 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 PMHi 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,
SurilSuril 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 advanceHi,
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 -
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
:( -
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
-
Why do I get a memory leak when I use the Write Data Storage VI in a loop
I have a large application that I am collecting various data points from. For the most part they are simple scalar values that need to be logged on a regular basis. I was attempting to use the new TDM files and the storage VI's I though everything
-
Can I install Adobe Creative Cloud in more than one computer with the individual plan?
I don´t have clear about the diference between individual plan an teams. My questions are: Can I install Adobe Creative Cloud in more than one computer with the individual plan? The team plan means that I have to pay for US$70 for each computer that
-
Burning my DVD with more gigs than the disc
I am going to be burning my new movie shortly. It is approximately 13 GB. The DVDs I have show "4.7 GB" on the box, so I am assuming I can't put my entire movie on one disc. Do they make discs larger than this so that I can put the whole movie on one
-
my homepage is correctly set in firefox, but i can't seem to do anything to keep chrome://ntsd-c/content/newtab/newtab.html from opening first, then i must open the yahoo tab second Thanks
-
Leave the computer on sleep or turn it off-which is better?
Friend of mine has an intel iMac, I have an iMac PPC-G5. He told me that it's better to ALWAYS leave the computer on. Instead of doing a complete shutdown, one should log out and select sleep. The computer will last longer. Anyone got any thoughts or