Store array of objects in Java Card 2.2.1 platform

Hi all,
I am new to smart card development and developing a demo e-wallet application using Java Card 2.2.1 SDK. I'd like to store last 10 transactions in card and create getter-setter methods. The structure of Transaction that i thought as follow:
public class Transaction {
     private byte type; // + or -
     private short amount;
     private byte[] date;
[Date format: "yyyy-MM-dd HH:mm:ss"]And transactionList:
public class TransactionList {
     protected short currentIndex = (short) -1;
     protected Transaction [] list = new Transaction [10];
}In my desktop application i have already called card's selectApplication(); / getBalance(); / setBalance(); / getWalletId(); / setWalletId(); methods. I need to create a method [getLastTransactions] in card project and call it from my desktop application.
<font size="2">How should I set up a structure for this issue?</font>

First of all don't allocate memory other than the constructor.
As you know you cannot return an object as a response from a java card so what you will get is just bytes of data. So create a byte[] of size equal to LAST_10_TRANSTION_SIZE and then by TLV store data into that array and upon receiving on host side decode it using the TLV.

Similar Messages

  • Plz Help! How to Store digital certificate on to java card?

    We are working on java cards.......
    But i don't know how to store digital certificate on to java card?
    Any "step-by-step procedure" to follow after getting the certificate will be appriciated.....
    Plz any relative information if u have do reply...............
    Its urgent..............
    Thanks in advance..........

    I'm not understanding the confusion. Instead of storing a picture you are storing a certificate. Treat it as a blob of data. You will send data, approx 250 bytes in length, then send the next blob beginning from previous offset, etc. On the card, you store data into a large byte array beginning at the offsets. Read the picture sample again.
    You would generate the key pair using the KeyPair class. Send that public key to the CA and store the cert returned from the CA.
    If you are attempting PKCS#15, I wouldn't go that route until you understand Java Cards and the PKCS specification.

  • Passing array of objects from java to oracle.

    Hi,
    We have the following structure in oracle.
    We have a nested table type of varchar2(50).
    type var_tab is table of varchar2(50);
    We have one object type with one member as varchar2 and another one as var_tab type.
    type attribute_obj is object(
    attrib_name varchar2(100)
    ,attrib_val var_tab
    Then we have table type of that object type,
    type table_tab is table of attribute_obj;
    Then we have one object type with one member as varchar2,another member as integer and another one as table_tab type.
    type prod_obj is object(
    pr_name varchar2(100), tb_flag integer
    ,pr_attrib table_tab
    Then we have table type of this object type,
    type prod_tab as table of prod_obj;
    So, the total structure is something like this;
    'OS','OS_NAME', 'Windows'
    'Linux'
    'UNIX'
    'OS_VERSION','XP'
    'RED HAT'
    'SOLARIS'
    so, basically we have
    x prod_tab:=prod_tab();
    x(3):=prod_obj('OS',0,table_tab(attribute_obj('OS_NAME',var_tab('Windows','Linux','UNIX')),attribute_obj('OS_VERSION','XP','RED HAT','SOLARIS'))));
    And this how we call the procedure ---
    all_prod_comb_pkg.sp_main(x)
    The procedure deifinition is -
    procedure sp_main ( p_prod_arr prod_tab);
    Please suggest a way so that we can implement the same structure in Java and then call the procedure using that array of objects.
    regards,
    Dipankar.

    Dipankar,
    There's a separate example of how to map Oracle OBJECTs to JDBC STRUCTs.
    Study that one and combine the two. Not difficult (in my opinion :-)
    Or search the JDBC forum for the words "STRUCT" and "ARRAY".
    (What, you want me to do your coding for you?)
    Good Luck,
    Avi.

  • Passing an array of objects.

    I have been trying to pass an array of objects from java to C. They are simple objects, only fields, no methods.
    Example...
    class User
    String name;
    int id;
    public class JNIExample
    User[] users = new User[10];
    public native void nativeCode(User[] usersarray);
    static
    try{
    System.loadLibrary("object");
    }catch(Exception e)
    System.out.println("Could not load library.");
    public static void main(String[] args)
    JNIExample anex = new JNIExample();
    anex.nativeCode(anex.users);
    Could someone give me sample code on how to access the array elements and get/set the object values on the C side. In the above code I did not create any of the objects in the array or set their field values but these will be set on the java side.
    Any help would be greatly appr.
    Thanks,
    Darrin

    JNIEXPORT void JNICALL Java_User_nativeCode
      (JNIEnv *env, jobject this, jobjectArray arr) {
      jsize  idx; // array index
      // accessing the Users
      for(idx = env->GetArrayLength(env, arr); idx-- > 0;) {
        jobject user = env->GetObjectArrayElement(env, arr, idx);
        // do something with it
      // setting the Users
      for(idx = env->GetArrayLength(env, arr); idx-- > 0;) {
        jobject user = ...
        env->SetObjectArrayElement(env, arr, idx, user);
    }

  • Storing file to java card

    HELP NEEDED URGENT!
    I want to store a file to a java card. (eg a text file)I want to enter the name of the text file to a text box and then store it to the card. How do i do this?
    Then i want to retrieve this file from the card. How do i do this? Pleas help as this is URGENT!!!
    Thanks
    J.

    Are you asking how to use middleware like OCF or PCSC to send the data to the card ? If so, that would be a large answer that I would recommend you read a bit.
    For OCF www.opencard.org,
    For PCSC - somewhere on MSDN ( always hard to find anything on MSDN. Today, you can find it at MSDN > Security > SDK Documentation > Authentication > Authentication Reference > Authentication Functions. To save time I always just search for SCardConnect )

  • Java card certificate

    How do i store certificate certificate on a java card 2.1.1 comapatible.
    I do not know how to do i without RMI what is there in 2.2.2
    Please advice

    How do i store certificate certificate on a java card 2.1.1 comapatible.
    I do not know how to do i without RMI what is there in 2.2.2
    Please advice

  • Delete my applet in java card. Its coming 69 85 error

    hi,
    Any body give me solution for delete applet from java card.
    I am using Eclipse SDK JCOP tool. I create Shareable object in java card.
    First time i load it. Second time start to load my applet but it showing
    cm> ext-auth plain
    => 84 82 00 00 10 24 99 56 8D FE 6F CF B4 F8 E7 AB .....$.V..o.....
    69 E0 8B DD C6 i....
    (42750 usec)
    <= 90 00 ..
    Status: No Error
    cm> delete -r 0505050505
    => 80 E4 00 80 07 4F 05 05 05 05 05 05 00 .....O.......
    (9683 usec)
    <= 69 85 i.
    Status: Conditions of use not satisfied
    jcshell: Error code: 6985 (Conditions of use not satisfied)
    jcshell: Wrong response APDU: 6985
    Ignoring expected error
    cm> upload -b 250 "D:\Handheld\ObjectShare\bin\hcl\demo\server\javacard\server.cap"
    => 80 E6 02 00 12 05 05 05 05 05 05 08 A0 00 00 00 ................
    03 00 00 00 00 00 00 00 ........
    (10845 usec)
    <= 69 85 i.
    Status: Conditions of use not satisfied
    jcshell: Error code: 6985 (Conditions of use not satisfied)
    jcshell: Wrong response APDU: 6985
    Unexpected error; aborting execution
    how to solve this problem.

    hi safeer,
    I solve this problem. First I delete select applet AID. Then delete package AID.
    Now its working good.

  • Java Card SDK problem

    Hello,
    I have downloaded :
    *>java_card_kit-2_1_1-unix.tar.Z
    I am using Linux Mandrake 8.1 and j2sdk1.4.0_01.
    After installing and setting env vars I tried
    to run "jcwde" but it returned with:
    *>Error: native VM not supported
    I didn't find a linux specific download but I guess the unix download should work?!
    If the error comes because of wrong download, does anybody knows if there is one
    for Linux?
    thank you,
    John

    I find it hard to beleive that the kit didn't come with a README since I'm reading it right now !
    This is taken directly from it.
    Java Card 2.2
    " Supported Platforms
    * Windows� NT 4.0 with Service Pack 6
    * Solaris� 8 (SunOS 5.8) Operating Environment (SPARCTM platforms)
    Java Development Kit: Java2 SDK, Standard Edition (version 1.3) "
    Java Card 2.1
    Supported Platforms
    o Windows NT 4.0 with Service Pack 4
    o Solaris(TM) 2.6 (SunOS 5.6) Operating Environment (SPARC(TM) platforms)
    o Solaris 7 (SunOS 5.7) Operating Environment (SPARC(TM) platforms)
    o Solaris 8 (SunOS 5.8) Operating Environment (SPARC(TM) platforms)
         Java Development Kit: Java2 SDK, Standard Edition (version 1.2.2 or 1.3)

  • Inter-applet object shareing concepts in java card

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

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

  • Not possible to store multiple fileReference object in same array?

    Hi all,
    I'm trying to store multiple fileReference  object in one array. But everytime I push() in a new object the old  objects that's already in the array gets set to the latest object.
    I'm  letting the user select an image. Then I push the selected  fileReference object into an array like my_array.push(  FileReference(event.target) );
    If I then run a loop on  "my_array" to check it's content I'm getting the latest pushed  fileReference object for every index in the array.
    With one object pushed in:
    1. Image1.jpg
    With two objects pushed in:
    1. Image2.jpg
    2. Image2.jpg
    Anyone have any thoughts on this?
    Thank you so much

    This is basically what I'm doing. The code is cut out from a larger portion so there might be errors, but hopefully not.
    // Local Files
    private var localFiles:FileReference           = new FileReference();
    private var fileList:Array                = new Array();
    private function browse(event:MouseEvent)
         trace("[Browse] Using local files");
         localFiles.addEventListener(Event.SELECT, onLocalFilesSelected);
         localFiles.browse(getAllowedTypes());
    * LOCAL FILE
    private function onLocalFilesSelected(e:Event)
         localFiles.addEventListener(Event.COMPLETE, localFileHandler);
         localFiles.load();
    private function localFileHandler(event:Event):void
         localFiles.removeEventListener(Event.COMPLETE, localFileHandler);
         fileList.push(FileReference(event.target));
         showFileList();
    private function showFileList():void
         for(var $x:int=0;$x<fileList.length;$x++)
              var file:FileReference = FileReference(fileList[$x]);
              trace($x+": " + file.name);
    Thank you

  • AsList(java.lang.Object[]) in java.util.Arrays cannot be applied to (int[])

    hi all,
    i'm getting the above error msg when trying to compile a simple array prog...
    while at it, is there another simple way to print the contents
    of an array to the console in a single statement except using the asList method??? .. like :
    int[] myArray = {1,2,3,4};
    System.out.println(myArray);
    ==================================
    here's the code for my program :-
    tks in advance.
    import java.util.*;
    public class ListArray {
    public static void main(String args[]) {
         int[] anArray = {2,7,5,8,3};
         for (int i = 0; i < anArray.length; i++) {
         System.out.println("Element No : " + (i+1) + " = " + anArray);
         System.out.println("All the Elements : " + Arrays.asList(anArray));

    Funnily enough, thats because int[] is not an array of Objects.
    You can make your listing method work by writing this instead:
    for (int index = 0; index < anArray.length; index++) {
      System.out.println("Element No: " + (index + 1) + " = " + anArray[index]);
    }

  • Java sorting the array of objects

    Hi ,
    I have a question on sorting objects in java.
    I have a java interface some thing like :
    public classmyObj extends Nullable
        private int objId;
        private Datemydate;
        public int getObjID();
        public Date getmyDate();
        public int getISecondD();
      }I need to create the array of the objects of this class that are sorted on the ObjID:
    classmyObj[] collectionObjects
    I need to pass this collectionObjects to another function.
    Now how should I sort these objects based on the ObjID on collection?
    Please help with this!
    Thanks

    neeto wrote:
    Hi ,
    I have a question on sorting objects in java.
    I have a java interface some thing like :You mean class?
    >
    public classmyObj extends Nullable
    private int objId;
    private Datemydate;
    public int getObjID();
    public Date getmyDate();
    public int getISecondD();
    }I need to create the array of the objects of this class that are sorted on the ObjID:
    classmyObj[] collectionObjects
    I need to pass this collectionObjects to another function.
    Now how should I sort these objects based on the ObjID on collection?Create a comparator and use it in a call to Collections.sort (or Arrays.sort if you have an array)

  • Can i return an Array of Objects from c++ to java ??

    hello all,
    Can i return an Array of Objects from c++ to java ??
    If so how is it possible ??
    regards,
    gautam

    I suggest you look into the JNI, Java Native Interface. The answer is yes.

  • Secure object sharing in java card

    Who has the complete code in secure object sharing in java card which is written by Michael Montgomery. I want to look at the code in this article. I wish somebody can help me!!!

    Who has the complete code in secure object sharing in java card which is written by Michael Montgomery. I want to look at the code in this article. I wish somebody can help me!!!

  • Java card applet space

    I am working on a project related to java card applet development. My project consists of 4 java classes which are used to store date of created objects, and a java card applet which contains method that enables me to de some kind of actions on the created objects, such as create a new object of a specified class or edited it and son on.
    Now I have 2 classes done ; first one is called Odemeler which contains variables of type byte and the second one is called SadakatUygulamalar which contains   variables.
    Inside the class I have defined 2 arrays, one of type Odemeler and the other of type SadakatUygulamalar and I set their size to be 200. I have tried to create 100 object of kind Odemeler and to store them in the array
    but the applet is able to store up to 92 object, at the other hand after creating those objects and storing them I am not able to store objects of type SadakatUygulamalar.
    Is this problem related to the applet size or what ?? any help please
    The applet code is here :
    package sTez_1;
    import javacard.framework.APDU;
    import javacard.framework.Applet;
    import javacard.framework.ISO7816;
    import javacard.framework.ISOException;
    import javacard.framework.JCSystem;
    import javacard.framework.Util;
    public class TestApplet1 extends Applet {
         private static Odeme[] odemeArray;
         private static SadakatUygulamalar[] uygulamaArray;
         private static short index = 00;
         private static short index2 = 00;
         private static byte[] result;
         private static byte[] result2;
         private static short res_index =00;
         private static short res2_index =00;
         private static short FirmaIDFlag = 0;
         private static final byte ODEME_CLA = (byte) 0xB0;
         private static final byte UYGULAMA_CLA = (byte) 0xA0;
         private static final byte ODEME_INS_CREATE_PROFILE = (byte) 0x10;
         private static final byte UYGULAMA_INS_CREATE_PROFILE = (byte) 0x20;
         private static final byte ODEME_INS_GET_PROFILE = (byte) 0x30;
         private static final byte ODEME_INS_LIST_SOME = (byte) 0x35;
         private static final byte ODEME_INS_VIEW_PROFILE = (byte) 0x37;
         private static final byte ODEME_INS_GET_PUAN_VIA_FIRMA = (byte) 0x38;
         private static final byte ODEME_INS_GET_ALISVERIS_VIA_KAT = (byte) 0x39;
         private static final byte UYGULAMA_INS_GET_PROFILE = (byte) 0x40;
         private static final byte UYGULAMA_INS_LIST_ALL = (byte) 0x50;
         private static final byte UYGULAMA_INS_UPDATE_ID = (byte) 0x60;
         private static final byte UYGULAMA_INS_UPDATE_NAME = (byte) 0x80;
         private static final byte UYGULAMA_INS_SEARCH = (byte) 0x90;
         private static final byte SPLIT_PARTS = (byte) 0x2C;
         private static final short CLA_ERROR = (short) 0x13;
         private static final short INS_ERROR = (short) 0x14;
         private static final short NO_SUCH_INDEX = (short) 0x15;
         private static final short NO_DATA_FOUND = (short) 0x16;
         private static final short FIRMA_ID_IN_USE = (short) 0x9C;
         private static final short ODEME_ARRAY_FULL = (short) 0x18;
         private TestApplet1() {
              odemeArray = new Odeme[(short) 250];
              uygulamaArray = new SadakatUygulamalar[(short) 200];
              register();
         public static void install(byte bArray[], short bOffset, byte bLength)
                   throws ISOException {
              new TestApplet1();
         public void process(APDU apdu) throws ISOException {
              // TODO Auto-generated method stub
              if (selectingApplet())
                   return;
              byte[] buffer = apdu.getBuffer();
              byte INS = (byte) (buffer[ISO7816.OFFSET_INS] & 0xFF);
              switch (INS) {
              case ODEME_INS_CREATE_PROFILE:
                   odemeCreateProfile(apdu);
                   break;
              case UYGULAMA_INS_CREATE_PROFILE:
                   uygulamaCreateProfile(apdu);
                   break;
              case ODEME_INS_GET_PROFILE:
                   odemeGetProfile(apdu);
                   break;
              case ODEME_INS_LIST_SOME:
                   odemeListSome(apdu);
                   break;
              case ODEME_INS_VIEW_PROFILE:
                   odemeViewProfile(apdu);
                   break;
              case ODEME_INS_GET_PUAN_VIA_FIRMA:
                   odemeGetPuanByFirma(apdu);
                   break;
              case ODEME_INS_GET_ALISVERIS_VIA_KAT:
                   odemeGetAlisverisByKat(apdu);
                   break;
              case UYGULAMA_INS_GET_PROFILE:
                   uygulamaGetProfile(apdu);
                   break;
              case UYGULAMA_INS_UPDATE_ID:
                   uygulamaUpdateID(apdu);
                   break;
              case UYGULAMA_INS_UPDATE_NAME:
                   uygulamaUpdateName(apdu);
                   break;
              case UYGULAMA_INS_LIST_ALL:
                   uygulamaListAll(apdu);
                   break;     
              case UYGULAMA_INS_SEARCH:
                   uygulamaSearch(apdu);
                   break;
              default:
                   ISOException.throwIt(INS_ERROR);
         public void odemeCreateProfile(APDU apdu) {
              byte[] buffer = apdu.getBuffer();
              short lc = (short) buffer[ISO7816.OFFSET_LC];
              JCSystem.beginTransaction();
              short fieldIndex = 0;
              short field1counter = 0;
              short field2counter = 0;
              short field3counter = 0;
              short field4counter = 0;
              short field5counter = 0;
              short field6counter = 0;
              short field7counter = 0;
              short field8counter = 0;
              short field9counter = 0;
              short field10counter = 0;
              short field11counter = 0;
              short field12counter = 0;
              short field13counter = 0;
              short field14counter = 0;
              for (short i = 0; i < lc; i++) {
                   fieldIndex++;
                   field1counter++;
                   if (buffer[(short) (5 + i)] == SPLIT_PARTS)
                        i = lc;
              for (short j = fieldIndex; j < lc; j++) {
                   fieldIndex++;
                   field2counter++;
                   if (buffer[(short) (5 + j)] == SPLIT_PARTS)
                        j = lc;
              for (short k = fieldIndex; k < lc; k++) {
                   fieldIndex++;
                   field3counter++;
                   if (buffer[(short) (5 + k)] == SPLIT_PARTS)
                        k = lc;
              for (short h = fieldIndex; h < lc; h++) {
                   fieldIndex++;
                   field4counter++;
                   if (buffer[(short) (5 + h)] == SPLIT_PARTS)
                        h = lc;
              for (short u = fieldIndex; u < lc; u++) {
                   fieldIndex++;
                   field5counter++;
                   if (buffer[(short) (5 + u)] == SPLIT_PARTS)
                        u = lc;
              for (short u1 = fieldIndex; u1 < lc; u1++) {
                   fieldIndex++;
                   field6counter++;
                   if (buffer[(short) (5 + u1)] == SPLIT_PARTS)
                        u1 = lc;
              for (short u2 = fieldIndex; u2 < lc; u2++) {
                   fieldIndex++;
                   field7counter++;
                   if (buffer[(short) (5 + u2)] == SPLIT_PARTS)
                        u2 = lc;
              for (short u3 = fieldIndex; u3 < lc; u3++) {
                   fieldIndex++;
                   field8counter++;
                   if (buffer[(short) (5 + u3)] == SPLIT_PARTS)
                        u3 = lc;
              for (short u4 = fieldIndex; u4 < lc; u4++) {
                   fieldIndex++;
                   field9counter++;
                   if (buffer[(short) (5 + u4)] == SPLIT_PARTS)
                        u4 = lc;
              for (short u5 = fieldIndex; u5 < lc; u5++) {
                   fieldIndex++;
                   field10counter++;
                   if (buffer[(short) (5 + u5)] == SPLIT_PARTS)
                        u5 = lc;
              for (short u6 = fieldIndex; u6 < lc; u6++) {
                   fieldIndex++;
                   field11counter++;
                   if (buffer[(short) (5 + u6)] == SPLIT_PARTS)
                        u6 = lc;
              for (short u7 = fieldIndex; u7 < lc; u7++) {
                   fieldIndex++;
                   field12counter++;
                   if (buffer[(short) (5 + u7)] == SPLIT_PARTS)
                        u7 = lc;
              for (short u8 = fieldIndex; u8 < lc; u8++) {
                   fieldIndex++;
                   field13counter++;
                   if (buffer[(short) (5 + u8)] == SPLIT_PARTS)
                        u8 = lc;
              for (short u9 = fieldIndex; u9 < lc; u9++) {
                   fieldIndex++;
                   field14counter++;
                   if (buffer[(short) (5 + u9)] == SPLIT_PARTS)
                        u9 = lc;
              short cc = 5;
              byte[] _id = new byte[field1counter];
              for (short i1 = 0; i1 < (short) _id.length; i1++)
                   _id[i1] = buffer[(short) (cc + i1)];
            cc = (short)(cc + field1counter);
              byte[] _tarih = new byte[field2counter];
              for (short j1 = 0; j1 < (short) _tarih.length; j1++)
                   _tarih[j1] = buffer[(short) (cc + j1)];
              cc = (short)(cc + field2counter);
              byte[] _saat = new byte[field3counter];
              for (short j2 = 0; j2 < (short) _saat.length; j2++)
                   _saat[j2] = buffer[(short) (cc + j2)];
              cc = (short)(cc + field3counter);  
              byte[] _firma = new byte[field4counter];
              for (short j3 = 0; j3 < (short) _firma.length; j3++)
                   _firma[j3] = buffer[(short) (cc + j3)];
              cc = (short)(cc + field4counter);
              byte[] _kategori = new byte[field5counter];
              for (short j4 = 0; j4 < (short) _kategori.length; j4++)
                   _kategori[j4] = buffer[(short) (cc + j4)];
              cc = (short)(cc + field5counter);
              byte[] _tutar = new byte[field6counter];
              for (short j5 = 0; j5 < (short) _tutar.length; j5++)
                   _tutar[j5] = buffer[(short) (cc + j5)];
              cc = (short)(cc + field6counter);
              byte[] _birim = new byte[field7counter];
              for (short j6 = 0; j6 < (short) _birim.length; j6++)
                   _birim[j6] = buffer[(short) (cc + j6)];
              cc = (short)(cc + field7counter);
              byte[] _ulke = new byte[field8counter];
              for (short j7 = 0; j7 < (short) _ulke.length; j7++)
                   _ulke[j7] = buffer[(short) (cc + j7)];
              cc = (short)(cc + field8counter);
              byte[] _sehir = new byte[field9counter];
              for (short j8 = 0; j8 < (short) _sehir.length; j8++)
                   _sehir[j8] = buffer[(short) (cc + j8)];
              cc = (short)(cc + field9counter);
              byte[] _ilce = new byte[field10counter];
              for (short j9 = 0; j9 < (short) _ilce.length; j9++)
                   _ilce[j9] = buffer[(short) (cc + j9)];
              cc = (short)(cc + field10counter);
              byte[] _aid = new byte[field11counter];
              for (short j10 = 0; j10 < (short) _aid.length; j10++)
                   _aid[j10] = buffer[(short) (cc + j10)];
              cc = (short)(cc + field11counter);
              byte[] _banka = new byte[field12counter];
              for (short j11 = 0; j11 < (short) _banka.length; j11++)
                   _banka[j11] = buffer[(short) (cc + j11)];
              cc = (short)(cc + field12counter);
              byte[] _taksit = new byte[field13counter];
              for (short j12 = 0; j12 < (short) _taksit.length; j12++)
                   _taksit[j12] = buffer[(short) (cc + j12)];
              cc = (short)(cc + field13counter);
              byte[] _puan = new byte[field14counter];
              for (short j13 = 0; j13 < (short) _puan.length; j13++)
                   _puan[j13] = buffer[(short) (cc + j13)];
              cc = (short)(cc + field3counter);
              Odeme m = new Odeme(_id, _tarih, _saat, _firma, _kategori, _tutar, _birim, _ulke, _sehir, _ilce, _aid, _banka, _taksit, _puan);
              if(index2 >= (short)odemeArray.length)
                   ISOException.throwIt(ODEME_ARRAY_FULL);
              odemeArray[index2] = m;
              index2++;
              JCSystem.commitTransaction();
              buffer[0] = (byte)index2;
              apdu.setOutgoingAndSend((short) 0, (short) 1);
         public void odemeGetProfile(APDU apdu) {
              byte[] buffer = apdu.getBuffer();
              short lc = (short) buffer[ISO7816.OFFSET_LC];
              byte[] sent_id = new byte[lc];
              for (short i5 = 0; i5 < lc; i5++)
                   sent_id[i5] = buffer[(short) (5 + i5)];
              for (short h = 0; h < index2; h++) {
                   Odeme m = odemeArray[h];
                   byte[] _id = m.getID();
                   if (equals(sent_id, _id)) {
                        byte[] banka = m.getBanka();
                        byte[] sehir = m.getSehir();
                        byte[] firma = m.getFirma();
                        short counter = 0;
                        for (short i = 0; i < (short) banka.length; i++)
                             buffer[i] = banka;
                        counter = (short) banka.length;
                        for (short j = 0; j < (short) sehir.length; j++)
                             buffer[(short) (counter + j)] = sehir[j];
                        counter = (short) (counter + sehir.length);
                        for (short j = 0; j < (short) firma.length; j++)
                             buffer[(short) (counter + j)] = firma[j];
                        counter = (short) (counter + firma.length);
                        apdu.setOutgoingAndSend((short) 0, counter);
         public void odemeGetPuanByFirma(APDU apdu)
              byte[] buffer = apdu.getBuffer();
              short lc = (short) buffer[ISO7816.OFFSET_LC];
              byte[] puan = null;
              byte[] res = new byte[200];
              byte[] fname = new byte[lc];
              for(short t = 0; t < lc; t++)
                   fname[t] = buffer[(short)(t + 5)];
              short counter = 0;
              for(short z = 0; z < index2 ; z++)
                   Odeme m = odemeArray[z];
                   byte[] _name = m.getFirma();
                   if (equals(fname, _name)) {
                        puan = m.getKazanilanpuan();
                        Util.arrayCopy(puan, (short)0, res, counter, (short)puan.length);
                        counter = (short)(counter + puan.length);
                        res[counter] = (byte)0x7C;
                        counter++;
              Util.arrayCopy(res, (short)0, buffer, (short)0, (short)counter);
              apdu.setOutgoingAndSend((short)0, (short)counter);
         public void odemeGetAlisverisByKat(APDU apdu)
              byte[] buffer = apdu.getBuffer();
              short lc = (short) buffer[ISO7816.OFFSET_LC];
              byte[] alisveris = null;
              byte[] res = new byte[200];
              byte[] kat = new byte[lc];
              for(short t = 0; t < lc; t++)
                   kat[t] = buffer[(short)(t + 5)];
              short counter = 0;
              for(short z = 0; z < index2 ; z++)
                   Odeme m = odemeArray[z];
                   byte[] _kategori = m.getKategori();
                   if (equals(kat, _kategori)) {
                        alisveris = m.getTutar();
                        Util.arrayCopy(alisveris, (short)0, res, counter, (short)alisveris.length);
                        counter = (short)(counter + alisveris.length);
                        res[counter] = (byte)0x7C;
                        counter++;
              Util.arrayCopy(res, (short)0, buffer, (short)0, (short)counter);
              apdu.setOutgoingAndSend((short)0, (short)counter);
         public void odemeListSome(APDU apdu)
              byte[] buffer = apdu.getBuffer();
              result2 = new byte[(short) 200];
              byte[] id = null, sehir = null, _banka = null;
              if(index2 == 0)
                   ISOException.throwIt(NO_DATA_FOUND);
              for(short r = 0; r < index2; r++)
                   Odeme m = odemeArray[r];
                   _id = m.getID();
                   _sehir = m.getSehir();
                   _banka = m.getBanka();
                   copyData2(_id, sehir, banka);
              Util.arrayCopy(result2, (short)0, buffer, (short)0, res2_index);
              result2 = null;
              short len = res2_index;
              res2_index = 00;
              apdu.setOutgoingAndSend((short)0, len);
         public void odemeViewProfile(APDU apdu)
              byte[] buffer = apdu.getBuffer();
              short lc = (short) buffer[ISO7816.OFFSET_LC];
              byte[] id = new byte[lc];
              for (short j3 = 0; j3 < lc; j3++)
                   id[j3] = buffer[(short) (5 + j3)];
              for (short h = 0; h < index2; h++) {
                   Odeme m = odemeArray[h];
                   byte[] H_id = m.getID();
                   if (equals(id, H_id)) {
                        byte[] tarih = m.getTarih();
                        byte[] saat = m.getSaat();
                        byte[] firma = m.getFirma();
                        byte[] kategori = m.getKategori();
                        byte[] tutar = m.getTutar();
                        byte[] birim = m.getParabirimi();
                        byte[] ulke = m.getUlke();
                        byte[] sehir = m.getSehir();
                        byte[] ilce = m.getIlce();
                        byte[] aid = m.getAID();
                        byte[] banka = m.getBanka();
                        byte[] taksit = m.getTaksitsayisi();
                        byte[] puan = m.getKazanilanpuan();
                        short counter1 = 0;
                        Util.arrayCopy(tarih, (short)0, buffer, (short)0, (short)tarih.length);
                        counter1 = (short)(counter1 + tarih.length);
                        Util.arrayCopy(saat, (short)0, buffer, counter1, (short)saat.length);
                        counter1 = (short)(counter1 + saat.length);
                        Util.arrayCopy(firma, (short)0, buffer, counter1, (short)firma.length);
                        counter1 = (short)(counter1 + firma.length);
                        Util.arrayCopy(kategori, (short)0, buffer, counter1, (short)kategori.length);
                        counter1 = (short)(counter1 + kategori.length);
                        Util.arrayCopy(tutar, (short)0, buffer, counter1, (short)tutar.length);
                        counter1 = (short)(counter1 + tutar.length);
                        Util.arrayCopy(birim, (short)0, buffer, counter1, (short)birim.length);
                        counter1 = (short)(counter1 + birim.length);
                        Util.arrayCopy(ulke, (short)0, buffer, counter1, (short)ulke.length);
                        counter1 = (short)(counter1 + ulke.length);
                        Util.arrayCopy(sehir, (short)0, buffer, counter1, (short)sehir.length);
                        counter1 = (short)(counter1 + sehir.length);
                        Util.arrayCopy(ilce, (short)0, buffer, counter1, (short)ilce.length);
                        counter1 = (short)(counter1 + ilce.length);
                        Util.arrayCopy(aid, (short)0, buffer, counter1, (short)aid.length);
                        counter1 = (short)(counter1 + aid.length);
                        Util.arrayCopy(banka, (short)0, buffer, counter1, (short)banka.length);
                        counter1 = (short)(counter1 + banka.length);
                        Util.arrayCopy(taksit, (short)0, buffer, counter1, (short)taksit.length);
                        counter1 = (short)(counter1 + taksit.length);
    Util.arrayCopy(puan, (short)0, buffer, counter1, (short)puan.length);
    counter1 = (short)(counter1 + puan.length);
                        apdu.setOutgoingAndSend((short) 0, counter1);
         public void uygulamaCreateProfile(APDU apdu) {
              byte[] buffer = apdu.getBuffer();
              short lc = (short) buffer[ISO7816.OFFSET_LC];
              // JCSystem.beginTransaction();
              JCSystem.beginTransaction();
              short fieldIndex = 0;
              short field1counter = 0;
              short field2counter = 0;
              short field3counter = 0;
              // byte test;
              for (short i = 0; i < lc; i++) {
                   fieldIndex++;
                   field1counter++;
                   if (buffer[(short) (5 + i)] == SPLIT_PARTS)
                        i = lc;
              for (short j = fieldIndex; j < lc; j++) {
                   fieldIndex++;
                   field2counter++;
                   if (buffer[(short) (5 + j)] == SPLIT_PARTS)
                        j = lc;
              for (short k = fieldIndex; k < lc; k++) {
                   fieldIndex++;
                   field3counter++;
                   if (buffer[(short) (5 + k)] == SPLIT_PARTS)
                        k = lc;
              byte[] uygulama_id = new byte[field1counter];
              for (short i1 = 0; i1 < (short) uygulama_id.length; i1++)
                   uygulama_id[i1] = buffer[(short) (5 + i1)];
              byte[] firma_id = new byte[field2counter];
              for (short j1 = 0; j1 < (short) firma_id.length; j1++)
                   firma_id[j1] = buffer[(short) (5 + field1counter + j1)];
    getFirmaIDFlag(firma_id);
    if(FirmaIDFlag == 1)
         ISOException.throwIt(FIRMA_ID_IN_USE);
              byte[] firma_ismi = new byte[field3counter];
              for (short j2 = 0; j2 < (short) firma_ismi.length; j2++)
                   firma_ismi[j2] = buffer[(short) (5 + field1counter + field2counter + j2)];
              SadakatUygulamalar su = new SadakatUygulamalar(uygulama_id, firma_id,
                        firma_ismi);
              uygulamaArray[index] = su;
              index++;
              JCSystem.commitTransaction();
              buffer[0] = (byte) index;
              apdu.setOutgoingAndSend((short) 0, (short) 1);
         public void uygulamaGetProfile(APDU apdu) {
              byte[] buffer = apdu.getBuffer();
              short p1 = (short) (buffer[ISO7816.OFFSET_P1]);
              if (p1 >= index)
                   ISOException.throwIt(NO_SUCH_INDEX);
              SadakatUygulamalar su = uygulamaArray[p1];
              byte[] uygulama_id = su.getUygulama_id();
              byte[] firma_id = su.getFirma_id();
              byte[] firma_ismi = su.getFirma_ismi();
              short counter = 0;
              for (short i = 0; i < (short) uygulama_id.length; i++)
                   buffer[i] = uygulama_id[i];
              counter = (short) uygulama_id.length;
              for (short j = 0; j < (short) firma_id.length; j++)
                   buffer[(short) (counter + j)] = firma_id[j];
              counter = (short) (counter + firma_id.length);
              for (short j = 0; j < (short) firma_ismi.length; j++)
                   buffer[(short) (counter + j)] = firma_ismi[j];
              counter = (short) (counter + firma_ismi.length);
              apdu.setOutgoingAndSend((short) 0, counter);
         public void uygulamaUpdateID(APDU apdu) {
              byte[] buffer = apdu.getBuffer();
              short p1 = (short) (buffer[ISO7816.OFFSET_P1]);
              if (p1 >= index)
                   ISOException.throwIt(NO_SUCH_INDEX);
              JCSystem.beginTransaction();
              short lc = (short) buffer[ISO7816.OFFSET_LC];
              SadakatUygulamalar su = uygulamaArray[p1];
              byte[] newFirmaID = new byte[lc];
              for (short i = 0; i < lc; i++)
                   newFirmaID[i] = buffer[(short) (5 + i)];
              su.setFirma_id(newFirmaID);
              JCSystem.commitTransaction();
              byte[] currentFirmaID = su.getFirma_id();
              for (short k = 0; k < (short) currentFirmaID.length; k++)
                   buffer[k] = currentFirmaID[k];
              apdu.setOutgoingAndSend((short) 0, (short) currentFirmaID.length);
         public void uygulamaUpdateName(APDU apdu) {
              byte[] buffer = apdu.getBuffer();
              short p1 = (short) (buffer[ISO7816.OFFSET_P1]);
              if (p1 >= index)
                   ISOException.throwIt(NO_SUCH_INDEX);
              JCSystem.beginTransaction();
              short lc = (short) buffer[ISO7816.OFFSET_LC];
              SadakatUygulamalar su = uygulamaArray[p1];
              byte[] newFirmaName = new byte[lc];
              for (short i = 0; i < lc; i++)
                   newFirmaName[i] = buffer[(short) (5 + i)];
              su.setFirma_ismi(newFirmaName);
              JCSystem.commitTransaction();
              byte[] currentFirmaName = su.getFirma_ismi();
              for (short k = 0; k < (short) currentFirmaName.length; k++)
                   buffer[k] = currentFirmaName[k];
              apdu.setOutgoingAndSend((short) 0, (short) currentFirmaName.length);
         public static boolean equals(byte[] b1, byte[] b2) {
              if (b1 == null && b2 == null) {
                   return true;
              if (b1 == null || b2 == null) {
                   return false;
              if ((short) b1.length != (short) b2.length) {
                   return false;
              for (short i = 0; i < (short) b1.length; i++) {
                   if (b1[i] != b2[i]) {
                        return false;
              return true;
         public void uygulamaSearch(APDU apdu) {
              byte[] buffer = apdu.getBuffer();
              short lc = (short) buffer[ISO7816.OFFSET_LC];
              byte[] f_id = new byte[lc];
              for (short i3 = 0; i3 < lc; i3++)
                   f_id[i3] = buffer[(short) (5 + i3)];
              for (short h = 0; h < index; h++) {
                   SadakatUygulamalar su = uygulamaArray[h];
                   byte[] H_Firma_id = su.getFirma_id();
                   if (equals(f_id, H_Firma_id)) {
                        byte[] H_Uygulama_id = su.getUygulama_id();
                        byte[] H_Firma_ismi = su.getFirma_ismi();
                        short counter1 = 0;
                        for (short k1 = 0; k1 < (short) H_Uygulama_id.length; k1++)
                             buffer[k1] = H_Uygulama_id[k1];
                        counter1 = (short) H_Uygulama_id.length;
                        for (short j2 = 0; j2 < (short) H_Firma_ismi.length; j2++)
                             buffer[(short) (counter1 + j2)] = H_Firma_ismi[j2];
                        counter1 = (short) (counter1 + H_Firma_ismi.length);
                        apdu.setOutgoingAndSend((short) 0, counter1);
         public void uygulamaListAll(APDU apdu)
              byte[] buffer = apdu.getBuffer();
              result = new byte[(short) 200];
              byte[] u_id = null, f_id = null, f_isim = null;
              for(short r = 0; r < index; r++)
                   SadakatUygulamalar su = uygulamaArray[r];
                   u_id = su.getUygulama_id();
                   f_id = su.getFirma_id();
                   f_isim = su.getFirma_ismi();
                   copyData(u_id, f_id, f_isim);
              Util.arrayCopy(result, (short)0, buffer, (short)0, res_index);
              result = null;
              short len = res_index;
              res_index = 00;
              apdu.setOutgoingAndSend((short)0, len);
         public void copyData(byte[] u_id, byte[] f_id, byte[] f_isim)
              Util.arrayCopy(u_id, (short)0, result, res_index, (short)u_id.length);
              res_index = (short)(res_index + u_id.length);
              Util.arrayCopy(f_id, (short)0, result, res_index, (short)f_id.length);
              res_index = (short)(res_index + f_id.length);
              Util.arrayCopy(f_isim, (short)0, result, res_index, (short)f_isim.length);
              res_index = (short)(res_index + f_isim.length);
              result[res_index] = (byte)0x7C;
              res_index = (short)(res_index + 1);
         public void copyData2(byte[] id, byte[] sehir, byte[] _banka)
              Util.arrayCopy(_id, (short)0, result2, res2_index, (short)_id.length);
              res2_index = (short)(res2_index + _id.length);
              Util.arrayCopy(_banka, (short)0, result2, res2_index, (short)_sehir.length);
              res2_index = (short)(res2_index + _sehir.length);
              Util.arrayCopy(_banka, (short)0,result2, res2_index, (short)_banka.length);
              res2_index = (short)(res2_index + _banka.length);
              result2[res2_index] = (byte)0x7C;
              res2_index = (short)(res2_index + 1);
         public void getFirmaIDFlag(byte[] f_id)
              for(short g = 0; g < index; g++)
                   SadakatUygulamalar su = uygulamaArray[g];
                   byte[] firma_no = su.getFirma_id();
                   if(equals(f_id, firma_no))
                        FirmaIDFlag = 1;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

    Again, could you rewrite the createOdemeProfie() method code using TLV ??I guess you are referring to<tt> odemeCreateProfile </tt>in the original applet.
    I could* rewrite it in a cleaner way. But
    - Why should I* do that?
    - You did not give the spec of the applet and its APDU, and I'd hate to write code without specs, instead having to rely on the assumption that the original code is valid, which is dubious. For a tiny example, how could one guess if<tt> short lc = (short) buffer[ISO7816.OFFSET_LC]; </tt>is correct, or if rather the canonical<tt> short lc = (short)(buffer[ISO7816.OFFSET_LC]&0xFF); </tt>is required (that is, if the incoming data can exceed 127 bytes)?
    - the original sin lies in the design of new<tt> Odeme(_id, tarih, saat, firma, kategori, tutar, birim, ulke, sehir, ilce, aid, banka, taksit, _puan) </tt>needing so many explicit parameters.
    Without fixing the very definition of<tt> Odeme </tt>, the code will remain ugly. One possible design would be to have a method to set a field designated by its tag, and another to get the value of a field designated by its tag. Another design would be a method to set any number of fields passed as an array of bytes containing a concatenation of TLVs, and another to get any number of fields designated by an array of tag bytes, as an array of bytes containing a concatenation of the TLVs.
    Again, you* want to generalize what the code does until the nature of the data items manipulated never appear in a method or variable name, except as the name of a finalstatic variable (that is, as a constant), at least in utility methods like<tt> odemeCreateProfile </tt>, and in the constructor and accessors of <tt> Odeme </tt>. Think of it a building a tiny database engine, then using it. Of course when performing actual computation as opposed to mere data storage, it helps to name the variables, e.g. when adding a traveled distance to an odometer, or computing a cost from this or that per some formula (but beware that in Java Card, especially on platforms without<tt> int </tt>, straight formulas are seldom the right way to perform any but the simplest computations required in a real application).
    Edited by: fgrieu on Feb 8, 2013 11:46 AM

Maybe you are looking for

  • Can't Sync Ipad 2 with Computer b/c Itunes 11.1 installation fails

    Hello! I have a question in regards to my ipad 2 and syncing it to my computer. I recently installed IOS 7 onto my Ipad 2, but when I went to sync it with my computer, Itunes gave me an error saying that I needed to download and install itunes 11.1 f

  • Standby logs in logical standby

    I am currently running a logical standby database in an Oracle 10gR2/Linux environment. The primary and standby databases both seem to be running fine, however I am concerned that there seems to be an excessively large number of standby log files mar

  • Problem in Installing CS5

    I have a Problem in Installing Adobe CS5 suite [Trial Version.] The Installer just says "Installer failed to initialize" and It doesn't continue PDApp.log says:- 6/5/2011 14:01:13 [INFO] PIM - Build Version - 1.0.175.0 6/5/2011 14:01:13 [INFO] PIM -

  • Need Photoshop CS5.5

    My company has purchased a Cloud membership but we find that, for various reasons, we need Photoshop CS5.5.  At this point we cannot use CS6.0.  Is there a way for this to happen?

  • How to burn a DVD with two audio track?

    There is a projet with the original video and a second audio track with music. I want to burn a DVD with both audio tracks. When playing the DVD you should be able to select audio track 1 (the original sound) or audio track 2 (the music). With Adobe