package com.licel.jcardsim; import com.licel.jcardsim.samples.HelloWorldApplet; import com.licel.jcardsim.smartcardio.CardSimulator; import com.licel.jcardsim.smartcardio.CardTerminalSimulator; import com.licel.jcardsim.utils.AIDUtil; import com.licel.jcardsim.utils.ByteUtil; import javacard.framework.AID; import junit.framework.TestCase; import javax.smartcardio.*; import java.security.NoSuchAlgorithmException; import java.security.Security; /** * Contains all listing from the documentation */ public class DocumentationCodeSamplesTest extends TestCase { public void testCodeListingReadme() { // 1. Create simulator CardSimulator simulator = new CardSimulator(); // 2. Install applet AID appletAID = AIDUtil.create("F000000001"); simulator.installApplet(appletAID, HelloWorldApplet.class); // 3. Select applet simulator.selectApplet(appletAID); // 4. Send APDU CommandAPDU commandAPDU = new CommandAPDU(0x00, 0x01, 0x00, 0x00); ResponseAPDU response = simulator.transmitCommand(commandAPDU); // 5. Check response status word assertEquals(0x9000, response.getSW()); } public void testCodeListing1() { // 1. Create simulator CardSimulator simulator = new CardSimulator(); // 2. Install applet AID appletAID = AIDUtil.create("F000000001"); simulator.installApplet(appletAID, HelloWorldApplet.class); // 3. Select applet simulator.selectApplet(appletAID); // 4. Send APDU CommandAPDU commandAPDU = new CommandAPDU(0x00, 0x01, 0x00, 0x00); ResponseAPDU response = simulator.transmitCommand(commandAPDU); // 5. Check response status word assertEquals(0x9000, response.getSW()); } public void testCodeListing2() { CardSimulator simulator = new CardSimulator(); byte[] appletAIDBytes = new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9}; AID appletAID = new AID(appletAIDBytes, (short) 0, (byte) appletAIDBytes.length); simulator.installApplet(appletAID, HelloWorldApplet.class); simulator.selectApplet(appletAID); // test NOP ResponseAPDU response = simulator.transmitCommand(new CommandAPDU(0x00, 0x02, 0x00, 0x00)); assertEquals(0x9000, response.getSW()); // test hello world from card response = simulator.transmitCommand(new CommandAPDU(0x00, 0x01, 0x00, 0x00)); assertEquals(0x9000, response.getSW()); assertEquals("Hello world !", new String(response.getData())); // test echo CommandAPDU echo = new CommandAPDU(0x00, 0x01, 0x01, 0x00, ("Hello javacard world !").getBytes()); response = simulator.transmitCommand(echo); assertEquals(0x9000, response.getSW()); assertEquals("Hello javacard world !", new String(response.getData())); } public void testCodeListing3() { CardSimulator simulator = new CardSimulator(); byte[] appletAIDBytes = new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9}; AID appletAID = new AID(appletAIDBytes, (short) 0, (byte) appletAIDBytes.length); simulator.installApplet(appletAID, HelloWorldApplet.class); simulator.selectApplet(appletAID); // test NOP byte[] response = simulator.transmitCommand(new byte[]{0x00, 0x02, 0x00, 0x00}); ByteUtil.requireSW(response, 0x9000); } public void testCodeListing4() { // AID from byte array AID applet1AID = AIDUtil.create(new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9}); // AID form String AID applet2AID = AIDUtil.create("010203040506070809"); assertEquals(applet1AID, applet2AID); // String to byte array String hexString = ByteUtil.hexString(new byte[]{0,2,0,0}); // byte array from String byte[] bytes = ByteUtil.byteArray("00 02 00 00"); assertEquals("00020000", hexString); assertEquals("00020000", ByteUtil.hexString(bytes)); } public void testCodeListing5() throws CardException { // 1. Create simulator and install applet CardSimulator simulator = new CardSimulator(); AID appletAID = AIDUtil.create("F000000001"); simulator.installApplet(appletAID, HelloWorldApplet.class); // 2. Create Terminal CardTerminal terminal = CardTerminalSimulator.terminal(simulator); // 3. Connect to Card Card card = terminal.connect("T=1"); CardChannel channel = card.getBasicChannel(); // 4. Select applet CommandAPDU selectCommand = new CommandAPDU(AIDUtil.select(appletAID)); channel.transmit(selectCommand); // 5. Send APDU CommandAPDU commandAPDU = new CommandAPDU(0x00, 0x01, 0x00, 0x00); ResponseAPDU response = simulator.transmitCommand(commandAPDU); // 6. Check response status word assertEquals(0x9000, response.getSW()); } public void testCodeListing6() throws CardException { // Obtain CardTerminal CardTerminals cardTerminals = CardTerminalSimulator.terminals("My terminal 1", "My terminal 2"); CardTerminal terminal1 = cardTerminals.getTerminal("My terminal 1"); CardTerminal terminal2 = cardTerminals.getTerminal("My terminal 2"); assertEquals(false, terminal1.isCardPresent()); assertEquals(false, terminal2.isCardPresent()); // Create simulator and install applet CardSimulator simulator = new CardSimulator(); AID appletAID = AIDUtil.create("F000000001"); simulator.installApplet(appletAID, HelloWorldApplet.class); // Insert Card into "My terminal 1" simulator.assignToTerminal(terminal1); assertEquals(true, terminal1.isCardPresent()); assertEquals(false, terminal2.isCardPresent()); } public void testCodeListing7() throws CardException, NoSuchAlgorithmException { // Register provider if (Security.getProvider("CardTerminalSimulator") == null) { Security.addProvider(new CardTerminalSimulator.SecurityProvider()); } // Get TerminalFactory TerminalFactory factory = TerminalFactory.getInstance("CardTerminalSimulator", null); CardTerminals cardTerminals = factory.terminals(); // Get CardTerminal CardTerminal terminal = cardTerminals.getTerminal("jCardSim.Terminal"); assertNotNull(terminal); } public void testCodeListing8() throws CardException, NoSuchAlgorithmException { // Register provider if (Security.getProvider("CardTerminalSimulator") == null) { Security.addProvider(new CardTerminalSimulator.SecurityProvider()); } // Get TerminalFactory with custom names String[] names = new String[] {"My terminal 1", "My terminal 2"}; TerminalFactory factory = TerminalFactory.getInstance("CardTerminalSimulator", names); CardTerminals cardTerminals = factory.terminals(); assertNotNull(cardTerminals.getTerminal("My terminal 1")); assertNotNull(cardTerminals.getTerminal("My terminal 2")); } }