From f954ee497739f62775163740f02832940a0d2aff Mon Sep 17 00:00:00 2001 From: Karl Koscher Date: Mon, 6 Aug 2012 17:25:17 -0700 Subject: [PATCH] Initial Commit! --- .gitignore | 1 + Makefile | 12 +++++ src/org/toorcamp/HelloSTK/HelloSTK.java | 70 +++++++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100755 src/org/toorcamp/HelloSTK/HelloSTK.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..567609b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..48a8a6a --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +JAVACARD_SDK_DIR = ../toorcamp-javacard-sdk + +APPLET_AID = 0xd0:0x70:0x02:0xca:0x44:0x90:0x01:0x01 +APPLET_NAME = org.toorcamp.HelloSTK.HelloSTK +PACKAGE_AID = 0xd0:0x70:0x02:0xCA:0x44:0x90:0x01 +PACKAGE_NAME = org.toorcamp.HelloSTK +PACKAGE_VERSION = 1.0 + +SOURCES = \ + src/org/toorcamp/HelloSTK/HelloSTK.java + +include ../toorcamp-javacard-sdk/makefiles/applet-project.mk diff --git a/src/org/toorcamp/HelloSTK/HelloSTK.java b/src/org/toorcamp/HelloSTK/HelloSTK.java new file mode 100755 index 0000000..6658251 --- /dev/null +++ b/src/org/toorcamp/HelloSTK/HelloSTK.java @@ -0,0 +1,70 @@ +package org.toorcamp.HelloSTK; + +import javacard.framework.APDU; +import javacard.framework.Applet; +import javacard.framework.ISOException; + +import sim.toolkit.EnvelopeHandler; +import sim.toolkit.ProactiveHandler; +import sim.toolkit.ToolkitConstants; +import sim.toolkit.ToolkitException; +import sim.toolkit.ToolkitInterface; +import sim.toolkit.ToolkitRegistry; + +public class HelloSTK extends Applet implements ToolkitInterface, ToolkitConstants { + // DON'T DECLARE USELESS INSTANCE VARIABLES! They get saved to the EEPROM, + // which has a limited number of write cycles. + private byte helloMenuItem; + + static byte[] welcomeMsg = new byte[] { 'W', 'e', 'l', 'c', 'o', 'm', 'e', ' ', + 't', 'o', ' ', 'T', 'o', 'o', 'r', 'C', + 'a', 'm', 'p', ' ', '2', '0', '1', '2' }; + + static byte[] menuItemText = new byte[] { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'S', 'T', 'K'}; + + private HelloSTK() { + // This is the interface to the STK applet registry (which is separate + // from the JavaCard applet registry!) + ToolkitRegistry reg = ToolkitRegistry.getEntry(); + + // Define the applet Menu Entry + helloMenuItem = reg.initMenuEntry(menuItemText, (short)0, (short)menuItemText.length, + PRO_CMD_SELECT_ITEM, false, (byte)0, (short)0); + } + + // This method is called by the card when the applet is installed. You must + // instantiate your applet and register it here. + public static void install(byte[] bArray, short bOffset, byte bLength) { + HelloSTK applet = new HelloSTK(); + applet.register(); + } + + // This processes APDUs sent directly to the applet. For STK applets, this + // interface isn't really used. + public void process(APDU arg0) throws ISOException { + // ignore the applet select command dispached to the process + if (selectingApplet()) + return; + } + + // This processes STK events. + public void processToolkit(byte event) throws ToolkitException { + EnvelopeHandler envHdlr = EnvelopeHandler.getTheHandler(); + + if (event == EVENT_MENU_SELECTION) { + byte selectedItemId = envHdlr.getItemIdentifier(); + + if (selectedItemId == helloMenuItem) { + showHello(); + } + } + } + + private void showHello() { + ProactiveHandler proHdlr = ProactiveHandler.getTheHandler(); + proHdlr.initDisplayText((byte)0, DCS_8_BIT_DATA, welcomeMsg, (short)0, + (short)(welcomeMsg.length)); + proHdlr.send(); + return; + } +}