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