Hi,

can anyone tell me what's wrong with this piece of code? 
The access condition for the create file command in the root file is
0x04, which means "you must know a cryptographic key". I'm using the 3k
Multiflex card from Schlumberger which comes with the book "Smart Card
Developer's Kit".

********************************************************
 // command to ask card for a challenge
 byte[] chall = { (byte) 0xC0, (byte) 0x84, (byte) 0x00, (byte) 0x00,
(byte) 0x08};

 // first bytes for creating a file
 byte[] CREATE_FILE = { (byte) 0xF0, (byte) 0xE0, (byte) 0x00};  
         
 String sfilename = "EF_TEST_CHD";
 byte[] bfilename = sfilename.getBytes();

 // 0x05 is number of records, 0x11 is sum of length of following 2
fields   
 byte[] temp = { (byte) 0x05, (byte) 0x11 };
 try {
    CommandAPDU capdu = new CommandAPDU(5);
    capdu.append(chall);
    ResponseAPDU rapdu = terminal.sendAPDU(currentSlot,capdu);
    byte sw1 = rapdu.sw1();
    byte sw2 = rapdu.sw2();      
    byte[] data = rapdu.data();
    if ((sw1 == (byte) 0x90) && (sw2 == (byte) 0x00)) {
         System.out.print("Encrypting challenge...\n"); 
         byte[] crypt = new byte[8];
         // the DES_KEY is the key that is provided with the book
         DESKey deskey = new DESKey(DES_KEY);
         deskey.encrypt(data,0,crypt,0);
         System.out.print("Encrypted data: " + HexString.hexify(crypt) +
"\n");                           
                 
         CommandAPDU capdufile = new CommandAPDU(30);
         capdufile.append(CREATE_FILE);
         capdufile.append(temp);
         capdufile.append(bfilename);
         int i;
         byte[] auth = new byte[6];

         // the create file command needs the first 6 bytes of the
encryption as a last parameter           
         for (i=0;i<6;i++) {
           auth[i] = crypt[i];  
         }
         capdufile.append(auth);

         System.out.print("APDU: " +
HexString.hexify(capdufile.getBytes()) + "\n");                      

         ResponseAPDU rapdufile =
terminal.sendAPDU(currentSlot,capdufile);
         byte swfile1 = rapdufile.sw1();
         byte swfile2 = rapdufile.sw2();         
         byte[] datafile = rapdufile.data();             
         System.out.print("SW1: " + HexString.hexify(swfile1) +
"\n");             
         System.out.print("SW2: " + HexString.hexify(swfile2) + "\n");           
           }
         }
         catch (Exception e) {
         
         }

***********************************************************************************
Thanks,

-- 
Eelco Daams
Internet Developer

BuyWays, de bouwers van www.surfze.nl

______________________________________________________
BuyWays Internet Strategie & Technologie
Damsterdiep 31a/b
9711 SG GRONINGEN
tel. 050-3118123
fax 050-3118124
gsm 06-10090866
http://www.buyways.nl
_______________________________________________________
Op al onze diensten zijn onze algemene voorwaarden
voor dienstverlening van toepassing, zoals gedeponeerd
bij de Kamer van Koophandel te Groningen, onder
nummer 3057.
***************************************************************
Unix Smart Card Developers - M.U.S.C.L.E.
(Movement for the Use of Smart Cards in a Linux Environment)
http://www.linuxnet.com/
To unsubscribe send an email to [EMAIL PROTECTED] with
unsubscribe sclinux
***************************************************************

Reply via email to