Our Online Store have the new products: RFID antenna board. Currently it can work with JC10M24R and JCOP4 card chips.
Compared with normal cards, the antenna board module has a smaller size and fixed holes, which is easy to integrate in the IOT(Internet Of Things) project.

A problem in java card for data size bigger than 256

JavaCard Applet Development Related Questions and Answers.
corleoner
Posts: 15
Joined: Fri Dec 11, 2015 2:22 am
Points :92
Contact:

A problem in java card for data size bigger than 256

Post by corleoner » Thu Jan 14, 2016 1:17 am

I have run into a problem for some days. I want to send out data which has the size bigger than 256.
And I use the code:

Code: Select all

private void sendData(APDU apdu) {
 
        BUF_IN_OFFSET[0] = 0;
     
        short remain = (short) ((short)372 - BUF_IN_OFFSET[0]);
        boolean chain = remain > MAX_APDU;
        short sendLen = chain ? MAX_APDU : remain;
       
        apdu.setOutgoing();
        apdu.setOutgoingLength((short)sendLen);
        apdu.sendBytesLong(data, BUF_IN_OFFSET[0], sendLen);
       
        if (chain) {
            BUF_IN_OFFSET[0] += sendLen; // count the bytes sent
            remain -=sendLen;
            ISOException.throwIt((short)(ISO7816.SW_BYTES_REMAINING_00 + remain));
           
        } else {
            BUF_IN_OFFSET[0] = 0; // no more bytes to send
        }
 
    }


When I execute this code on my real card(support T1/T0), I got "0x90 0x00",which "0x61 0xXX is expected(XX is the remained data length). I guess the used protocol related to this problem. I m not sure!
Can anyone help me? Thanx for any help!

User avatar
UNKNwYSHSA
Posts: 630
Joined: Thu May 21, 2015 4:05 am
Points :3053
Contact:

Re: A problem in java card for data size bigger than 256

Post by UNKNwYSHSA » Wed Jan 20, 2016 11:01 pm

Remove the first line of method sendData();

Code: Select all

BUF_IN_OFFSET[0] = 0;

My test code as following:

Code: Select all

package testOutgoingData;

import javacard.framework.*;

public class testOutgoingData extends Applet
{
   private final static short MAX_APDU = 256;
   private short BUF_IN_OFFSET[];
   private byte data[];
   
   public testOutgoingData() {
      BUF_IN_OFFSET = JCSystem.makeTransientShortArray((short) 1, JCSystem.CLEAR_ON_DESELECT);
      data = new byte[372];
      for (short i = 0; i < data.length; ++i) {
         data[i] = (byte)(i & 0xFF);
      }
   }
   
   public static void install(byte[] bArray, short bOffset, byte bLength)
   {
      new testOutgoingData().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
   }
   
   private void sendData(APDU apdu) {
        short remain = (short) ((short)372 - BUF_IN_OFFSET[0]);
        boolean chain = remain > MAX_APDU;
        short sendLen = chain ? MAX_APDU : remain;
       
        apdu.setOutgoing();
        apdu.setOutgoingLength((short)sendLen);
        apdu.sendBytesLong(data, BUF_IN_OFFSET[0], sendLen);
       
        if (chain) {
            BUF_IN_OFFSET[0] += sendLen; // count the bytes sent
            remain -=sendLen;
            ISOException.throwIt((short)(ISO7816.SW_BYTES_REMAINING_00 + remain));
           
        } else {
            BUF_IN_OFFSET[0] = 0; // no more bytes to send
        }
 
    }
   
   public void process(APDU apdu)
   {
      if (selectingApplet())
      {
         return;
      }

      byte[] buf = apdu.getBuffer();
      switch (buf[ISO7816.OFFSET_INS])
      {
      case (byte)0xC0:
         sendData(apdu);
         break;
      default:
         ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
      }
   }

}

APDU commands and responses as following:

Code: Select all

Card Manager AID   :  A000000003000000
Card Manager state :  OP_READY

    Application:  SELECTABLE (--------) 112233445500
    Load File  :      LOADED (--------) 1122334455
     Module    :                        112233445500

>> /select 112233445500
>> 00 A4 04 00 06 11 22 33 44 55 00 00
<< 90 00

>> /send 00C0000000
>> 00 C0 00 00 00
<< 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 90 00
sense and simplicity

Post Reply Previous topicNext topic

Who is online

Users browsing this forum: Google [Bot] and 7 guests

JavaCard OS : Disclaimer