Hi,
We are developing Java Card project.
We are using Swing for Host Application, JCDK for Card Applets, & OCF
for interfacing.
We are using GXP211_PK card.
When we run following code, we get following response,
Uses ISOTPDU
wait for smart card - insert smart card in terminal
ATR: 3F 6D 00 00 80 31 80 65 B0 05 01 02 5E 83 00 90
00
Command APDU = [EMAIL PROTECTED]
0000: 00 A4 04 00 07 A0 00 00 00 18 43 4D 00
..........CM.
sw1 = -112
sw2 = 0
Response APDU = [EMAIL PROTECTED]
0000: 6F 18 84 07 A0 00 00 00 18 43 4D A5 0D 9F 6E 06
o........CM...n.
0010: 32 31 03 00 33 30 9F 65 01 FF 90 00
21..30.e....
sw1 = -112
sw2 = 0
Response APDU = [EMAIL PROTECTED]
0000: 43 4D 02 80 00 00 38 25 00 A7 0D 01 3D F0 0A F8
CM....8%....=...
0010: 7D 85 43 4F F6 EC 79 07 F0 98 21 A4 90 00
}.CO..y...!...
sw1 = 99
sw2 = 0
Response APDU = [EMAIL PROTECTED]
0000: 63 00 c.
Press any key to continue . . .
I have successfully selected Card Manager & Initialize Update is
successful,
but when I try External Authenticate command,
It returns 63 00 code.
APDU's sent are specified in code.
Is there some step missing or what ?
Following is the code,
import java.io.InputStream;
import java.io.FileInputStream;
import java.util.Properties;
import opencard.core.terminal.CommandAPDU;
import opencard.core.terminal.ResponseAPDU;
import opencard.core.terminal.CardID;
import opencard.core.terminal.CardTerminalRegistry;
import opencard.core.service.SmartCard;
import opencard.core.service.CardRequest;
import com.ibm.opencard.terminal.pcsc10.Pcsc10CardTerminal;
import com.ibm.opencard.terminal.pcsc.PcscError;
import opencard.opt.util.PassThruCardService;
import opencard.opt.applet.AppletID;
import opencard.core.terminal.CardTerminalException;
public class OCFConnection {
private Pcsc10CardTerminal cardTerminal;
//represents card reader
private static final int IFD_TIMEOUT = 10;
public PassThruCardService commService;
//represents communication channel
private int n;
//temporary counter.
private int intATR;
//represents int form of ATR.
private byte[] cardATR;
//represents ATR returned by card.
private CommandAPDU commandAPDU;
//represents instruction & data to be sent to reader.
private byte bytesw1,bytesw2;
public OCFConnection () {
/*addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
});*/
// get system properties
Properties systemProperties = System.getProperties ();
// set system properties for OCF, PC/SC and
PassThruCardServce
systemProperties.put ("OpenCard.terminals",
"com.ibm.opencard.terminal.pcsc10.Pcsc10CardTerminalFactory");
systemProperties.put
("OpenCard.services","opencard.opt.util.PassThruCardServiceFactory");
}
public void initOCF ()
{
// APDU for selecting Card Manager
byte[] apduContents =
{(byte)0,(byte)164,(byte)4,(byte)0,(byte)7,
(byte)160,(byte)0,(byte)0,(byte)0,(byte)24,
(byte)67,(byte)77,(byte)0
};
// APDU for Initialize Update
byte[] initUpdateAPDU =
{(byte)128,(byte)80,(byte)13,(byte)0,(byte)8,
(byte)0,(byte)0,(byte)0,(byte)0,(byte)0,
(byte)0,(byte)0,(byte)0,(byte)28
};
// APDU for selecting External Authenticate
byte[] extAuthAPDU =
{(byte)132,(byte)130,(byte)3,(byte)0,(byte)16,
(byte)68,(byte)68,(byte)68,(byte)68,(byte)68,
(byte)68,(byte)68,(byte)68,(byte)17,
(byte)34,(byte)51,(byte)68,(byte)85,
(byte)102,(byte)119,(byte)136,(byte)0
};
commandAPDU = new CommandAPDU (apduContents);
try
{
SmartCard.start ();
CardTerminalRegistry cardTerminalRegistry =
CardTerminalRegistry.getRegistry ();
cardTerminal =
(Pcsc10CardTerminal)cardTerminalRegistry.cardTerminalForName ("Gemplus
GemPC430 0");
CardRequest cardRequest = new CardRequest
(CardRequest.ANYCARD, null, PassThruCardService.class);
cardRequest.setTimeout (IFD_TIMEOUT); // set timeout
for IFD
System.out.println ("wait for smart card - insert smart
card in terminal");
System.out.println ();
// wait for a smart card inserted into the terminal
SmartCard smartCard = SmartCard.waitForCard
(cardRequest);
if (smartCard != null)
{ // no error occur and a smart card is in the terminal
commService = (PassThruCardService)
smartCard.getCardService (PassThruCardService.class, true);
String stringATR = new String ();
System.out.print ("ATR: ");
CardID cardID = smartCard.getCardID ();
cardATR = cardID.getATR ();
for (n=0; n< cardATR.length; n++) {
intATR = (int) (0x000000FF &
cardATR[n]);
// byte to int conversion
stringATR = Integer.toHexString
(intATR).toUpperCase (); //String
conversion
if (stringATR.length () == 1) stringATR
= "0" + stringATR;
System.out.print(stringATR + "
");
} // end of for
System.out.println ("");
}// end of if.
System.out.println ();
System.out.println ("Command APDU =
"+commandAPDU.toString ());
System.out.println ();
//obtain response from card
ResponseAPDU responseAPDU =
commService.sendCommandAPDU (commandAPDU);
bytesw1 = responseAPDU.sw1 ();
bytesw2 = responseAPDU.sw2 ();
System.out.println ("sw1 = "+(byte)bytesw1);
System.out.println ("sw2 = "+(byte)bytesw2);
System.out.println ();
System.out.println("Response APDU =
"+responseAPDU.toString());
System.out.println ();
commandAPDU = new CommandAPDU (initUpdateAPDU);
responseAPDU = commService.sendCommandAPDU
(commandAPDU);
bytesw1 = responseAPDU.sw1 ();
bytesw2 = responseAPDU.sw2 ();
System.out.println ("sw1 = "+(byte)bytesw1);
System.out.println ("sw2 = "+(byte)bytesw2);
System.out.println ();
System.out.println("Response APDU =
"+responseAPDU.toString());
System.out.println ();
commandAPDU = new CommandAPDU (extAuthAPDU);
responseAPDU = commService.sendCommandAPDU
(commandAPDU);
bytesw1 = responseAPDU.sw1 ();
bytesw2 = responseAPDU.sw2 ();
System.out.println ("sw1 = "+(byte)bytesw1);
System.out.println ("sw2 = "+(byte)bytesw2);
System.out.println ();
System.out.println("Response APDU =
"+responseAPDU.toString());
System.out.println ();
smartCard.close ();
SmartCard.shutdown ();
}
catch (CardTerminalException e)
{
System.out.println (e.getMessage ());
}
catch (Exception e)
{
System.out.println (e.getMessage ());
}
finally
{
String errorMsg = PcscError.getMessage
((int)57);
}
}
public static void main (String args[]) {
OCFConnection siObject = new OCFConnection ();
siObject.initOCF ();
}
}
Thanks in advance.
Awadhoot Aphale
---
> Visit the OpenCard web site at http://www.opencard.org/ for more
> information on OpenCard---binaries, source code, documents.
> This list is being archived at http://www.opencard.org/archive/opencard/
! To unsubscribe from the [EMAIL PROTECTED] mailing list send an email
! to
! [EMAIL PROTECTED]
! containing the word
! unsubscribe
! in the body.