Java Card string

Hello, i am new to Java Card, i am trying to write an applet and i am stuck with strings.
Should i add some jars to my project so the String can be used? By the default project settings there are no String and strings can not be declared.
I am using JCOP tools and Eclipse IDE.
Thanks

Hi,
Java Card does not have a java.lang.String class. It is a cut down version of the Java runtime. In the documentation for the Java Card Development Kit, there is a rundown of what parts of the Java language are not supported. That being said, all strings are is a collection of bytes. You can represent a string as a byte array.
private final static byte[] STRING_CONSTANT = {'c', 'o', 'n', 's', 't', 'a', 'n', 't'};Also, be mindful that the JCRE does not have a garbage collector as you may know it. Some cards do support object deletion (garbage collection) but it is performed the next time the applet is activated and takes a relatively long time (it will cause performance issues if you rely on it heavily).
Cheers,
Shane
Edited by: safarmer on 28/12/2009 12:10
Edited by: safarmer on 28/12/2009 12:12

Similar Messages

  • How does the Java card simulator work? and other misc questions

    First, I have a class inherited from Applet. Okay, I did that.
    How do I convert this class to a CAP file? I mean I have a class file which is compiled by javac, do I use this file to convert into a CAP file? What is an AID? Do I make up this AID?
    In this .scr file (APDU Script), I understand the first 4 bytes, it means to create an Applet, but what about the rest? I know there are some intermixes of lengths and AIDs, I just can't decipher this.
    // create wallet applet
    0x80 0xB8 0x00 0x00 0x14 0x0a 0xa0 0x0 0x0 0x0 0x62 0x3 0x1 0xc 0x6 0x1 0x08 0 0 0x05 0x01 0x02 0x03 0x04 0x05 0x7F;
    And here comes the main question?
    How does the simulator work? How do I generate the data that mimics what the card reader reads?
    Thanks
    Jack

    At first blush,
    I have these when executing the RMIPurse sample according to the user guide
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported type long of field interfaceHash.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode anewarray in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode new in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode invokespecial in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String) of class java.rmi.server.Operation.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode new in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode invokespecial in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String) of class java.rmi.server.Operation.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode new in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode invokespecial in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String) of class java.rmi.server.Operation.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode new in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode invokespecial in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String) of class java.rmi.server.Operation.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode new in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode invokespecial in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String) of class java.rmi.server.Operation.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type long of method dispatch.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String) of class java.rmi.UnmarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String) of class java.rmi.server.SkeletonMismatchException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.UnmarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.MarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.UnmarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.MarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.MarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.MarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.UnmarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.UnmarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.MarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Skel: unsupported parameter type String of invoked method <init>(java.lang.String) of class java.rmi.UnmarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported type long of field interfaceHash.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported type long of field serialVersionUID.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode anewarray in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode new in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokespecial in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String) of class java.rmi.server.Operation.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode new in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokespecial in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String) of class java.rmi.server.Operation.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode new in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokespecial in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String) of class java.rmi.server.Operation.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode new in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokespecial in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String) of class java.rmi.server.Operation.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode new in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokespecial in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String) of class java.rmi.server.Operation.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode ifnull in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode goto in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokestatic in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method class$(java.lang.String) of class com.sun.jcclassic.samples.rmi.PurseImpl_Stub.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode anewarray in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode ifnull in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode goto in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokestatic in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method class$(java.lang.String) of class com.sun.jcclassic.samples.rmi.PurseImpl_Stub.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode ifnull in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode goto in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokestatic in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method class$(java.lang.String) of class com.sun.jcclassic.samples.rmi.PurseImpl_Stub.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode ifnull in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode goto in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokestatic in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method class$(java.lang.String) of class com.sun.jcclassic.samples.rmi.PurseImpl_Stub.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokevirtual in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method getMethod(java.lang.String, java.lang.Class[]) of class java.lang.Class.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode pop in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode ifnull in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode goto in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokestatic in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method class$(java.lang.String) of class com.sun.jcclassic.samples.rmi.PurseImpl_Stub.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode anewarray in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokevirtual in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method getMethod(java.lang.String, java.lang.Class[]) of class java.lang.Class.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode ifnull in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode goto in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokestatic in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method class$(java.lang.String) of class com.sun.jcclassic.samples.rmi.PurseImpl_Stub.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode anewarray in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokevirtual in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method getMethod(java.lang.String, java.lang.Class[]) of class java.lang.Class.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode ifnull in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode goto in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokestatic in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method class$(java.lang.String) of class com.sun.jcclassic.samples.rmi.PurseImpl_Stub.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode anewarray in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokevirtual in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method getMethod(java.lang.String, java.lang.Class[]) of class java.lang.Class.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode ifnull in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode goto in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokestatic in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method class$(java.lang.String) of class com.sun.jcclassic.samples.rmi.PurseImpl_Stub.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode anewarray in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokevirtual in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method getMethod(java.lang.String, java.lang.Class[]) of class java.lang.Class.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode ifnull in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode goto in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokestatic in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method class$(java.lang.String) of class com.sun.jcclassic.samples.rmi.PurseImpl_Stub.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode anewarray in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode ifnull in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode goto in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokestatic in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method class$(java.lang.String) of class com.sun.jcclassic.samples.rmi.PurseImpl_Stub.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode aastore in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported bytecode invokevirtual in clinit method.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method getMethod(java.lang.String, java.lang.Class[]) of class java.lang.Class.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode goto in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unhandled bytecode pop in clinit method, try a different compiler.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of method class$.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method forName(java.lang.String) of class java.lang.Class.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported return type String of invoked method getMessage() of class java.lang.Throwable.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String) of class java.lang.NoClassDefFoundError.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type long of invoked method invoke(java.rmi.Remote, java.lang.reflect.Method, java.lang.Object[], long) of class java.rmi.server.RemoteRef.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type long of invoked method newCall(java.rmi.server.RemoteObject, java.rmi.server.Operation[], int, long) of class java.rmi.server.RemoteRef.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.MarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.UnexpectedException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type long of invoked method invoke(java.rmi.Remote, java.lang.reflect.Method, java.lang.Object[], long) of class java.rmi.server.RemoteRef.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type long of invoked method newCall(java.rmi.server.RemoteObject, java.rmi.server.Operation[], int, long) of class java.rmi.server.RemoteRef.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.MarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.UnexpectedException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type long of invoked method invoke(java.rmi.Remote, java.lang.reflect.Method, java.lang.Object[], long) of class java.rmi.server.RemoteRef.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type long of invoked method newCall(java.rmi.server.RemoteObject, java.rmi.server.Operation[], int, long) of class java.rmi.server.RemoteRef.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.UnmarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.UnmarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.UnexpectedException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type long of invoked method invoke(java.rmi.Remote, java.lang.reflect.Method, java.lang.Object[], long) of class java.rmi.server.RemoteRef.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type long of invoked method newCall(java.rmi.server.RemoteObject, java.rmi.server.Operation[], int, long) of class java.rmi.server.RemoteRef.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.UnmarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.UnexpectedException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type long of invoked method invoke(java.rmi.Remote, java.lang.reflect.Method, java.lang.Object[], long) of class java.rmi.server.RemoteRef.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported long type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type long of invoked method newCall(java.rmi.server.RemoteObject, java.rmi.server.Operation[], int, long) of class java.rmi.server.RemoteRef.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.MarshalException.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported String type constant.
      [convert] error: com.sun.jcclassic.samples.rmi.PurseImpl_Stub: unsupported parameter type String of invoked method <init>(java.lang.String, java.lang.Exception) of class java.rmi.UnexpectedException.At the first command prompt, I typed cref -o demoee
    and at the next command prompt, I typed ant all, and I got those error messages.
    Thanks, you are so nice to help :)
    Jack

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

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

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

  • How to create a java card library (jar file to be used in other programs)

    Hi all,
    I am working on JCOP and writing quite a bit of applets for the java card . Now i have lots of code that could be reusable for example sending SMS, encryption routine, etc.. So this part of the code i want to put into a utility class and create a package out of it. This utility package i must be able to import into my programs what i write.
    I tried the normal way of creating the jar by renaming the CAP file of the utility class, also tried including the /javacard/* files also into the jar file as indicated by sfarmer(active forum member here). But none seems to work. I tried contacting NXP folks and they indicated that it may be possible only by way of Sharable Objects.
    But some how i am not convinced why i should use Sharable object for this. So if any one can throw some light into this regard it will be immensely helpful to me and my project.
    Regards
    Prakash

    Hi,
    Well the variable defined are as below
    public static byte[] msgdata = new byte[255];
    private static final byte[] HEADER_TEMPLATE = {
              (byte) 0x81, (byte) 0x03, (byte) 0x01, (byte) 0x21, (byte) 0x00, // Command details tag
                   (byte) 0x82, (byte) 0x02, (byte) 0x81, (byte) 0x02, // Device Identities tag
                   (byte) 0x8D, // Text String tag
                   (byte) 0x00, // length
                   (byte) 0x04, // Text String tag
    the msgdata is declared public so that i can access this as a Class member in my other program doing Utilities.msgdata. But the problem is now that if i dont declare it as final then the compiler gives me the below error
    "library has initialized array for non-final, non-static field Utilities, msgdata, [B, attr jc-field: tok 0, public static"
    If i make it final then i cannot change it... So now i am stuck..
    Any help will be highly appreciated...
    Regards
    Prakash                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • Java card query

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

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

  • How to ensure applet is written in java card?

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

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

  • Urgent ! writing a java card applet -APDU problem

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

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

  • Java Card program execution on Eclipse

    Hi Dears,
    I am new to Java Card. I did setup to run Java Card programs on eclipse using http://eclipse-jcde.sourceforge.net/.
    This is my simple program below
    import javacard.security.RandomData;
    public class Main {
         public void main() {
              RandomData rd = RandomData.getInstance(RandomData.ALG_SECURE_RANDOM);
              short outLen = 10;
              byte buffer[] = new byte[outLen];
              short outOffset = 0;
              rd.generateData(buffer, outOffset, outLen);
    Compilation is successful but when I run the program I get the following error.
    Error occurred during initialization of VM
    java/lang/NoClassDefFoundError: java/lang/String
    This is very annoying. I think my run time environment is not ok for running java card programs. I am able to run Java programs but not java card programs. Any one can help please?
    Thanks,
    Regards,
    Naveed

    please post code with &#123;code} tags
    Naveed86 wrote:
    Hi Dears,
    I am new to Java Card. I did setup to run Java Card programs on eclipse using http://eclipse-jcde.sourceforge.net/.
    This is my simple program below
    import javacard.security.RandomData;
    public class Main {
         public void main() {
              RandomData rd = RandomData.getInstance(RandomData.ALG_SECURE_RANDOM);
              short outLen = 10;
              byte buffer[] = new byte[outLen];
              short outOffset = 0;
              rd.generateData(buffer, outOffset, outLen);
    }Compilation is successful but when I run the program I get the following error.
    Error occurred during initialization of VM
    java/lang/NoClassDefFoundError: java/lang/String
    This is very annoying. I think my run time environment is not ok for running java card programs. I am able to run Java programs but not java card programs. Any one can help please?
    Thanks,
    Regards,
    Naveed

  • Any one can help me ....in java card

    Please check the following the following thesis are correct and check whether it is possible also
    If it is wrong please tell me what is wrong…
    Client side application software means is the one which run on our desktop…is it right
    Smart card host software is the one which will be embed on the smart card….is it correct      
    I am going to use java card. So can I develop the client side application software in java standard Edition? ….is it possible
    And smart card host software using connected edition, java card platform which will be embed into the card so that I can communicate with client application software….is it right
    What I understand about smartcard I have written …Is all these are right...Kindly replying me

    here's a bone to get you started. now that i've done the hard part,
    you should be able to finish the rest.
    public class Pet {     
         private String name;
         private char gender;
         private String hunger;
         private String mood;
         private String cleanliness;
         public Pet(String _name, char _gender){
              name = _name;
              gender = _gender;
         public void buyAccomodation(String accom) {}
         public int buyFood(int num){return 1;}
         public void feed() {}
         public void playFetch() {}
         public void playHideAndSeek() {}
         public void bath() {}
         public void advanceDay() {}
         public void bidFarewell() {}     
    }

  • Java card Applet RSA encryption Problems with Android

    hi all,I am new to java card development. I have used nxp jcop 31-36 java card and nexus s for testing the application.so i have faced lot of problems.first of all i want to encrypt data coming from the android app using RSA1024 and send back to the android application.there are the problems I faced
    1.RSA1024 and RSA2048 algorithms can't work with the nexus s Application.it means i can't receive any encrypt data from card.but when i test the application with eclipse jcop shell tool it is work properly.
    2.when i run the application in nexus s the application is crashed.it gives some wired sound when tap the java card to android phone.it may be java card application crashed or give some wired sound from android OS level.
    3.Then I Test the Application with Samsung S2. Sometimes it works but sometimes it crashed.in the S2 the encryption works fine(but we have to keep wile card 2 or 3 minutes).
    these are the steps i followed in established the connection i android phone.So fist i created the ISO dep connection and first select the Application(00A40400AID).Then using transive method i send data to java card.In the Java card in the installation i have created the RSA key pairs and get the RSA public key and private key.in some method i got the APDU buffer and read data and encrypt this data.Then those are send back to the card. First i want to know is there any problem in Android Os or JCOP 31/36 card.And other thing each time i requested to java crd is that need to reset the java card and how to reset the Java card.(some brief idea)

    Hi,
    1) Import android.smartcard libraries,
    2) Try to make a connection :
    ISmartcardConnectionListener connectionListener = new ISmartcardConnectionListener()3) create an instance of smartcardclient:
    smartcard = new SmartcardClient(this, connectionListener);4) get the list of readers :
    String[] readers = smartcard.getReaders();you can check if a specific reader is connected or nor with
    smartcard.isCardPresent(readers [0]);5) create a card channel and select your applet:
    cardChannel = smartcard.openLogicalChannel(cardReader, APPLET_AID);
    ICardChannel cardChannel = null;
    cardChannel = smartcard.openLogicalChannel(cardReader, APPLET_AID);6) you can send and receive APDUs with this line of code:
    byte[] response Apdu = cardChannel.transmit(commandApdu);Regards,
    Hana

  • Need suggestion regarding simulation of Java Card using a floppy

    Hi All,
    I am working on a project wherein I have to simulate a Java Card application using a floppy. I am writing my own Card Terminal and CardTerminalFactory. Thats what I have started working on. Will that serve the purpose or do I have to think about some other approach like just overriding the cardInserted method of CTListener class? I want to achieve communication between the host application and the floppy(which is my java card) Please advise.
    I would like to thank DurangoVa and Nilesh for helping me out sorting out the error in running the converter.
    Thanks in advance

    Are you referring to a Floppy diskette drive ?

  • Step by step installation for java card kit 2.2.2

    can anyone help me with a complete step by step installation information for java card kit 2.2.2, i already tried to follow the instruction given in the software i download n still stuck in setting the java path. any recommendation
    thanks for the help

    The javacard API is for developing applets on card. Java 6 is for developing clients off-card.
    yes u can use any java IDEs like netbeans or jcreator. But you will have to select the libraries within the downloaded java card kit folder for ur IDE in order to compile successfully.
    try reading up the documentation and run the samples in the java card kit. thats a good place to start.

  • Cannot convert ÿØÿà of type class java.lang.String to class BFileDomain.

    Hi All,
    I am using Jdeveloper 11.1.2.3.0.
    I have a scenario of making an ADF page where I have a IMAGE field to show on the page. So,I have a table called "PRODUCT" with fields called photo with BFILE type. Now when I the data i have inserted using the DML command and i can see the path at the backend.
    However,when i am runnig my ADF page in the Filed called "PHOTO" I can only see a junk character stating 'yoyo'.
    When I click on it, it says ERROR "Cannot convert ÿØÿà of type class java.lang.String to class oracle.jbo.domain.BFileDomain".
    Your help will be appreciated ASAP.
    Regards,
    Shahnawaz

    Hi,
    did you show the id-value in the user interface as a input-component, and did the input-component include a converter?
    If yes, show the id as output-text and remove any existing converter-components.
    Best Regards

  • Cannot convert type class java.lang.String to class oracle.jbo.domain.Clob

    Cannot convert type class java.lang.String to class oracle.jbo.domain.ClobDomain.
    Using ADF Business Components I have a JSFF page fragment with an ADF form based on a table with has a column of type CLOB. The data is retrieved from the database and displayed correctly but when any field is changed and submitted the above error occurs. I have just used the drag and drop technique to create the ADF form with a submit button, am I missing a step?
    I am using the production release of Jdeveloper11G

    Reproduced and filed bug# 7487124
    The workaround is to add a custom converter class to your ViewController project like this
    package oow2008.view;
    import javax.faces.application.FacesMessage;
    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.convert.Converter;
    import javax.faces.convert.ConverterException;
    import oracle.jbo.domain.ClobDomain;
    import oracle.jbo.domain.DataCreationException;
    public class ClobConverter implements Converter {
         public Object getAsObject(FacesContext facesContext,
                                   UIComponent uIComponent,
                                   String string) {
           try {
             return string != null ? new ClobDomain(string) : null;
           } catch (DataCreationException dce) {
             dce.setAppendCodes(false);
             FacesMessage fm =
               new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                "Invalid Clob Value",
                                dce.getMessage());
             throw new ConverterException(fm);
         public String getAsString(FacesContext facesContext,
                                   UIComponent uIComponent,
                                   Object object) {
           return object != null ?
                  object.toString() :
                  null;
    }then to register the converter in faces-config.xml like this
    <faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee">
      <application>
        <default-render-kit-id>oracle.adf.rich</default-render-kit-id>
      </application>
      <converter>
        <converter-id>clobConverter</converter-id>
        <converter-class>oow2008.view.ClobConverter</converter-class>
      </converter>
    </faces-config>then reference this converter in the field for the ClobDomain value like this
              <af:inputText value="#{bindings.Description.inputValue}"
                            label="#{bindings.Description.hints.label}"
                            required="#{bindings.Description.hints.mandatory}"
                            columns="40"
                            maximumLength="#{bindings.Description.hints.precision}"
                            shortDesc="#{bindings.Description.hints.tooltip}"
                            wrap="soft" rows="10">
                <f:validator binding="#{bindings.Description.validator}"/>
                <f:converter converterId="clobConverter"/>
              </af:inputText>

  • J2me and java card, need help to communicate

    we are trying to put together a reader to read smartcards using j2me and we figure that it would be easiest if we could develop it to work with java cards rather than standard smart cards, the problem is we get garbage when we communicate to it, the chip sends us crap, any suggestions what might be wrong, any calls we might be missing, has anyone worked with j2me and java cards or smart cards, any help would be appreciated.
    einar

    .... reader app and the ME behind it .... smells like mobile ....
    First of all - if you want to have one mobile application running on this just make sure that whatever is written in ME can use drivers from the reader chip ....
    Workin on the PC is something completely different. There was one good example how to develop one host application in Java provided with the JCOP tools long ago ... I don't know if this is now in the new Eclipse tools.
    But - there was a small API provided that can give you good hints what to do - and - once you have it on the reader side - you can easily integrate ME methods with this ...

Maybe you are looking for

  • Mystery Billing Due Date

    I have been paying regular bills for two homes for telephone, water, sewer, garbage, cable, satelite, electricity, gas, HOA, taxes, leaseholder fee for my lot in a recreational area, and last BUT NOT LEAST my cell phone service from Verizon.  Why is

  • Javascript code was missing

    Hi I am using Photoshop Elements 6.0 on Windows Vista and I have added Elements+ (http://simplephotoshop.com/elementsplus/index.htm). Now suddenly I cannot launch the Elements+ functionality. I get the error message "Javascript code was missing". Doe

  • How do i get to see my call history on my iphone5?

    i recenty bought the iphone 5 and restored my old 4s settings onto it but for some odd reason i cannot view my call history missed/received calls. i have tried everything please help???

  • CIN-RG1-J1i5 Error

    Hi Friends, I am trying to update the material document in J1I5 t-code but it is throwing error traffic light. previously i had the same issue but i found that balnce is less in J_2irg1bal table. but now we have 4000 PC in in this table but i am just

  • Struts Framewrok -- Bean Tag Problem

    Hi all, When i want to print uNews.getBody(); (uNews is a bean in request) in my jsp i use this tag, <bean:write name="uNews" property="body"/> but how can i use this method for writing something like this: uNews.getReporter().getID(); that way, usin