Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
Expertise Level:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)

This page was last modified 16:39, 1 May 2008.

NFC Secure Element Example External Reader

From Forum Nokia Wiki

This example show the use of JDK 6.0 and the javax.smartcardio.* package in order to communicate with the Java Card Applet in the secure element of the handset. Download appropriate NetBeans Project. Make sure you have JDK 6.0 and a PC/SC Reader (NOT NXP's PEGODA!) installed.

package at.nfcresearch.wima.examples;
 
import javax.smartcardio.*;
import java.util.List;
import java.util.ListIterator;
 
public class Main {
 
    private static byte[] SELECT = {(byte) 0x00, (byte) 0xA4, (byte) 0x04, (byte) 0x00, (byte) 0x09, (byte) 0x74, (byte) 0x69, (byte) 0x63, (byte) 0x6B, (byte) 0x65, (byte) 0x74, (byte) 0x69, (byte) 0x6E, (byte) 0x67, (byte) 0x00};
    private static byte[] INS_INC = {(byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00};
    private static byte[] INS_DEC = {(byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00};
    private static byte[] INS_READ = {(byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x01};
    private static CommandAPDU SELECT_APDU = new CommandAPDU(SELECT);
    private static CommandAPDU INC_APDU = new CommandAPDU(INS_INC);
    private static CommandAPDU DEC_APDU = new CommandAPDU(INS_DEC);
    private static CommandAPDU READ_APDU = new CommandAPDU(INS_READ);
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        TerminalFactory tf = TerminalFactory.getDefault();
        CardTerminals ct = tf.terminals();
        List<CardTerminal> l = null;
        Card card = null;
 
        try {
            l = ct.list();
        } catch (Exception e) {
            System.out.println("Error listing Terminals: " + e.toString());
        }
 
        System.out.println("List of PC/SC Readers connected:");
        ListIterator i = l.listIterator();
        while (i.hasNext()) {
            System.out.println("Reader: " + ((CardTerminal) i.next()).getName());
        }
 
        // IMPORTANT: change this to the PC/SC Name of your reader!!
        CardTerminal c = ct.getTerminal("OMNIKEY CardMan 5x21-CL 0");
        System.out.println("Terminal fetched");
 
        try {
            while (c.isCardPresent()) {
 
                try {
                    Thread.sleep(100);
                } catch (Exception e) {
                    System.out.print(("Error Sleep"));
                }
 
                try {
                    card = c.connect("T=1");
                    System.out.println("Terminal connected");
                } catch (Exception e) {
                    System.out.println("Terminal NOT onnected: " + e.toString());
                }
 
                System.out.println("ATR: " + arrayToHex(((ATR) card.getATR()).getBytes()));
 
                CardChannel ch = card.getBasicChannel();
 
                byte[] x = null;
 
                if (check9000(ch.transmit(SELECT_APDU))) {
                    System.out.println("SELECT OKAY");
                } else {
                    System.out.println("SELECT NOT OKAY");
                    return;
                }
 
                ResponseAPDU ra = ch.transmit(READ_APDU);
                if (check9000(ra)) {
                    System.out.println("Value: " + ra.getBytes()[0]);
                } else {
                    System.out.println("Error Reading Value");
                }
 
                return;
 
 
 
 
            }// while
        }// try
        catch (CardException e) {
            System.out.println("Error isCardPresent()" + e.toString());
        }
 
    }
 
    public static boolean check9000(ResponseAPDU ra) {
        byte[] response = ra.getBytes();
        return (response[response.length - 2] == (byte) 0x90 && response[response.length - 1] == (byte) 0x00);
    }
 
    public static String arrayToHex(byte[] data) {
        StringBuffer sb = new StringBuffer();
 
        for (int i = 0; i < data.length; i++) {
            String bs = Integer.toHexString(data[i] & 0xFF);
            if (bs.length() == 1) {
                sb.append(0);
            }
            sb.append(bs);
        }
 
        return sb.toString();
    }
}
Related Discussions
Thread Thread Starter Forum Replies Last Post
Uploading MIDlet Terenas Near Field Communication 11 2008-04-28 08:57
Loading Applet into NFC 6131 Secure Element lovercjs Near Field Communication 2 2007-10-23 15:28
Custom Java Applet for Nokia 6131 NFC??? klevans123 Near Field Communication 1 2008-05-06 05:58
Does NFC tag protocol support anti collision Nabil_java Near Field Communication 2 Yesterday 22:33
NOKIA 6131 NFC root certificates lfarady Near Field Communication 1 2007-11-19 14:24
 
Powered by MediaWiki