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.

Reply via email to