21

I'm using reader/writer acr38f and my smart card is SLE4418. How do I read and write text to my smart card?

For example: Hello World!

apdu = [0XFF, 0X20,0x00,0x00,0x02, 0x00, 0x00]

response, sw1, sw2 = cardservice.connection.transmit( apdu )

apdu = [0XFF,0xA4,0x00,0x00,0x01,0x05]
response, sw1, sw2 = cardservice.connection.transmit( apdu )




apdu = [0XFF,0XB2,0X00,0xA7,0X09]
response, sw1, sw2 = cardservice.connection.transmit( apdu )
print response


apdu = [0XFF, 0XD0,0x00,0xA7,0x09,0xA7,0x02,0xA7,0x02,0xA7,0x02,0xA7,0x02,0xA7] 
response, sw1, sw2 = cardservice.connection.transmit( apdu )

card response :

connecting to ACS CCID USB Reader 0
ATR 3B 04 92 23 10 91
>  FF 20 00 00 02 00 00
<  00 00 00 90 0 
>  FF A4 00 00 01 05
<  []  90 0 
>  FF B2 00 A7 09
<  FF FF FF FF FF FF FF FF FF 90 0 
[255, 255, 255, 255, 255, 255, 255, 255, 255]
>  FF D0 00 A7 09 A7 02 A7 02 A7 02 A7 02 A7
<  []  90 0 
Community
  • 1
  • 1
john misoskian
  • 574
  • 1
  • 12
  • 32
  • 1
    It's not a final answer but you can try to grok your reader's [manual](http://www.smartcardreader.ru/upload/catalog/items/docs/doc5155.pdf), then use [PyUSB](http://sourceforge.net/apps/trac/pyusb/) to work with it... – Pill Jul 12 '11 at 07:50
  • Do you want to read/write a text to your smart-card memory? What do you mean under "read and write my smart card to text"? – Sasha Jul 13 '11 at 11:35
  • @sasha yes i want write a memory. @pill i don't know how to using pyusb... – john misoskian Jul 13 '11 at 14:26

1 Answers1

13

I do not have the hardware to test this, but this should get you going:

Communicating with smart cards involves sending APDU (Smart Card application protocol data unit) commands and receiving APDU responses.

Command APDUs are sent through the reader/write (your ACR38F) and consists of a 4-byte header followed by data (and info about the data size and response size)

Field    Len Description
--------------------------------------------
CLA     (1) Instruction Class
INS     (1) Instruction Code
P1-P2   (2) Instruction Parameters
Lc  (0,1,3) Number of data bytes to follow
DATA    (*) Data to be transmitted
Le    (0-3) Maximum response bytes

The response consists of:

Field    Len Description
--------------------------------------------
DATA    (*) Data to be transmitted
SW1-SW2 (2) Command status

In the case of the SLE4418, in order to write data, the values should be as follows:

  • CLA = 00
  • INS = D6
  • P1 = MSB of memory address offset to store bytes
  • P2 = LSB of memory address offset to store bytes
  • Lc = length of bytes to store
  • DATA = data to store
  • Le = (empty)

So therefore in code:

WRITE = [0x00, 0xD6]
STARTMSB = [0x00] #change to where on the card you would like to write
STARTLSB = [0x00] #same here
MEM_L = [0x01]
DATA = [0x01]

cardservice.connection.connect()
apdu = READ + STARTMSB + STARTLSB + MEM_L + DATA
response1, sw1, sw2 = self.cardservice.connection.transmit( apdu )

Other relevant info:

guidot
  • 5,095
  • 2
  • 25
  • 37
Rajiv Makhijani
  • 3,631
  • 32
  • 31