In order to thank you for all members' support of our website, we are holding new events - Getting Free Samples by Paying Freight only.
Want to get free samples? Please check this post for more details.

The Class of JCSystem Sample Code

Applets Development Guide

Moderator: product

User avatar
JavaCardOS
Posts: 260
Joined: Thu Apr 30, 2015 12:00 pm
Points :2279
Contact:

The Class of JCSystem Sample Code

Post by JavaCardOS » Sat Jun 18, 2016 3:24 am

The following code is the Class of JCSystem Sample Code in JavaCard API Specification.

You can copy and use it directly or you can download the JCIDE project from the attachment and build it.


Code: Select all

/**
 * @file  Storage.java
 * @brief The Class of JCSystem Sample Code in JavaCard API Specification
 * @comment The purpose of this example is only used to show the usage of API functions and there is no practical significance.
 * @copyright Copyright(C) 2016 JavaCardOS Technologies Co., Ltd. All rights reserved.
 */

package JavaCardOS.Sample.Storage;

import javacard.framework.*;

public class Storage extends Applet
{

   public static final byte INS_GET_MEMORY_EEPROM     = 0x01;
   public static final byte INS_GET_MEMORY_COR     = 0x02;
   public static final byte INS_GET_MEMORY_COD     = 0x03;
   public static final byte INS_MAKE_TRANSIENT     = 0x04;
   
   public static void install(byte[] bArray, short bOffset, byte bLength)
   {
      new Storage().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
   }

   public void process(APDU apdu)
   {
      if (selectingApplet())
      {
         return;
      }

      byte[] buf = apdu.getBuffer();
      boolean isDeletionSupported = false;
      switch (buf[ISO7816.OFFSET_INS])
      {
      case INS_GET_MEMORY_EEPROM:
         int memsize_All = 0;
         short memSize_EEP = 0;
         //If the number of available bytes is greater than 32767, then this method returns 32767.
         //It's necessary to apply memory, to allow the remaining the available bytes is less than 32767
         try{
            while(true){
               //Creates a persistent memory byte array with the specified array length
               byte[] temp = new byte[(short)0x7FFF];
               memsize_All += (short)0x7FFF;
                     }
         }catch(Exception e)
         {
            //Obtains the amount of memory of the persistent type that is available to the applet.
            memSize_EEP = JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_PERSISTENT);   
         }
         memsize_All += memSize_EEP;
         //Splits the int types data 'memsize_All' into 2 short types
         short Tmp1 = (short)((memsize_All >> 16) & 0xFFFF);
         short Tmp2 = (short)(memsize_All & 0xFFFF);
         //Deposits the short value as two successive bytes in the byte array.
         Util.setShort(buf, (short)0, Tmp1);   
         Util.setShort(buf, (short)2, Tmp2);   
         //Request the object deletion service of the Java Card runtime environment.
         apdu.setOutgoingAndSend((short)0, (short)4);
         //Determine if the implementation for the Java Card platform supports the object deletion mechanism
         isDeletionSupported = JCSystem.isObjectDeletionSupported();
         if (isDeletionSupported)
         {
            ////if the Java Card platform supports the object deletion mechanism, request Object Deletion
            JCSystem.requestObjectDeletion();
         }
         break;
      case INS_GET_MEMORY_COR:
         //Obtains the amount of memory of the CLEAR_ON_RESET type that is available to the applet.
         short memSize_COR = JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_TRANSIENT_RESET);   
         //Deposits the short value 'memSize_COR' as two successive bytes in the byte array 'buf'.
         Util.setShort(buf, (short)0, memSize_COR);   
         apdu.setOutgoingAndSend((short)0, (short)2);         
         break;
      case INS_GET_MEMORY_COD:
         //Obtains the amount of memory of the CLEAR_ON_DESELECT type that is available to the applet.
         short memSize_COD = JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_TRANSIENT_DESELECT);   
         //Deposits the short value 'memSize_COD' as two successive bytes in the byte array 'buf'.
         Util.setShort(buf, (short)0, memSize_COD);   
         apdu.setOutgoingAndSend((short)0, (short)2);      
         break;
      case INS_MAKE_TRANSIENT:
         apdu.setIncomingAndReceive();
         short lc = apdu.getIncomingLength();
         if (lc == 0x00)
         {
            ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
         }
         //Creates a transient byte array with the specified array length
         byte[] tmpMemory = JCSystem.makeTransientByteArray((short)100, JCSystem.CLEAR_ON_DESELECT);
         //Begins an atomic transaction, to ensure the integrity of data
         JCSystem.beginTransaction();
         //Copies an array from the 'buf' source array, beginning at the ISO7816.OFFSET_CDATA position(non-atomically).
         Util.arrayCopyNonAtomic(buf, ISO7816.OFFSET_CDATA, tmpMemory, (short)0, lc);
         //Copies an array from the 'tmpMemory' source array, beginning at the 0 position
         Util.arrayCopy(tmpMemory, (short)0, buf, (short)0, lc);
         //Commits an atomic transaction. The contents of commit buffer is atomically committed.
         JCSystem.commitTransaction();
         apdu.setOutgoingAndSend((short)0, (short)lc);
         //Determine if the implementation for the Java Card platform supports the object deletion mechanism
         isDeletionSupported = JCSystem.isObjectDeletionSupported();
         if (isDeletionSupported)
         {
            //if the Java Card platform supports the object deletion mechanism, request Object Deletion
            JCSystem.requestObjectDeletion();
         }
         break;
       
      default:
         ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
      }
   }
}



Note:
The purpose of this example is only used to show the usage of API functions and there is no practical significance.
You do not have the required permissions to view the files attached to this post. Please login first.

Who is online

Users browsing this forum: No registered users and 1 guest

JavaCard OS : Disclaimer