List of usage examples for javax.smartcardio Card transmitControlCommand
public abstract byte[] transmitControlCommand(int controlCode, byte[] command) throws CardException;
From source file:test.be.fedict.eid.applet.PcscTest.java
@Test public void testCcid() throws Exception { PcscEid pcscEid = new PcscEid(new TestView(), this.messages); if (false == pcscEid.isEidPresent()) { LOG.debug("insert eID card"); pcscEid.waitForEidPresent();//w w w.j a v a 2 s .c o m } Card card = pcscEid.getCard(); // GET FEATURE LIST byte[] features = card.transmitControlCommand(0x42000D48, new byte[0]); if (0 == features.length) { LOG.debug("no CCID reader"); return; } LOG.debug("feature list: " + new String(Hex.encodeHex(features))); LOG.debug("feature verify pin direct: " + hasFeature(FEATURE_VERIFY_PIN_DIRECT_TAG, features)); Integer verifyPinControl = findFeature(FEATURE_VERIFY_PIN_DIRECT_TAG, features); LOG.debug("VERIFY PIN control: 0x" + Integer.toHexString(verifyPinControl)); CardChannel cardChannel = pcscEid.getCardChannel(); CommandAPDU setApdu = new CommandAPDU(0x00, 0x22, 0x41, 0xB6, new byte[] { 0x04, // length of following data (byte) 0x80, // algo ref 0x01, // rsa pkcs#1 (byte) 0x84, // tag for private key ref (byte) 0x82 }); ResponseAPDU responseApdu = cardChannel.transmit(setApdu); if (0x9000 != responseApdu.getSW()) { throw new RuntimeException("SELECT error"); } byte[] verifyCommandData = createPINVerificationDataStructure(); byte[] result = card.transmitControlCommand(verifyPinControl, verifyCommandData); responseApdu = new ResponseAPDU(result); LOG.debug("status work: " + Integer.toHexString(responseApdu.getSW())); if (0x9000 == responseApdu.getSW()) { LOG.debug("status OK"); } else if (0x6401 == responseApdu.getSW()) { LOG.debug("canceled by user"); } else if (0x6400 == responseApdu.getSW()) { LOG.debug("timeout"); } /* * The other SW values are those from the VERIFY APDU itself. */ }