CRM & Cloud

Issues I faced in CRM & Cloud solutions

Java Card "Hello World" Applet

In the example below, java card ” Hello World”  applet  is demonstrated.  The applet flow is that when a user sends a specific APDU to the applet then it will return ‘Hello Word’ to the off-card application or CAD. Firstly, we will test it on JCOP shell and later will write a off-card application which will display word ‘Hello World’.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package helloWorldPackage;
import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISO7816;
import javacard.framework.ISOException;
import javacard.framework.Util;
public class HelloWorldApplet extends Applet {
         private static final byte[] helloWorld = {(byte)'H',(byte)'e',(byte)'l',(byte)'l',(byte)'o',(byte)' ',(byte)'W',(byte)'o',(byte)'r',(byte)'l',(byte)'d',};
         private static final byte HW_CLA = (byte)0x80;
         private static final byte HW_INS = (byte)0x00;
         public static void install(byte[] bArray, short bOffset, byte bLength) {
             new HelloWorldApplet().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
         }
         public void process(APDU apdu) {
             if (selectingApplet()) {
             return;
         }
         byte[] buffer = apdu.getBuffer();
         byte CLA = (byte) (buffer[ISO7816.OFFSET_CLA] & 0xFF);
         byte INS = (byte) (buffer[ISO7816.OFFSET_INS] & 0xFF);
         if (CLA != HW_CLA)
        {
            ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
        }
          switch ( INS ) {
             case HW_INS:
               getHelloWorld( apdu );
               break;
            default:
               ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
         }
   }
  private void getHelloWorld( APDU apdu)
  {
      byte[] buffer = apdu.getBuffer();
      short length = (short) helloWorld.length;
      Util.arrayCopyNonAtomic(helloWorld, (short)0, buffer, (short)0, (short) length);
      apdu.setOutgoingAndSend((short)0, length);
  }
}
Output on JcopShell:
 First we need to select the newly installed applet
=> 00 A4 04 00 0E 48 65 6C 6C 6F 57 6F 72 6C 64 2E    .....HelloWorld.
61 70 70 00                                        app.
(491682 nsec)
<= 90 00                                              ..
Status: No Error

Sending command with correct CLA and INS which will return Hellow World
 in hex format
cm>  /send 8000000000
=> 80 00 00 00 00                                     .....
(556774 nsec)
<= 48 65 6C 6C 6F 20 57 6F 72 6C 64 90 00             Hello World..
Status: No Error

Sending APDU with wrong CLA which results in 6E00 (CLA value not support
ed)

cm>  /send 0000000000
=> 00 00 00 00 00                                     .....
(2417 usec)
<= 6E 00                                              n.
Status: CLA value not supported

No comments:

Post a Comment