From 5ce38abd367f812d4e07ae71e1e5cdfcb8584f8d Mon Sep 17 00:00:00 2001 From: Christina Quast Date: Tue, 10 Mar 2015 15:16:13 +0100 Subject: [PATCH] Moved code for select file cmd into function The select command mostly works when the blue sysmocom SIM card is inserted, but with the white SuperSIM we always get timeouts and invalid answers. Furthermore the white card takes much longer to answer the requests than the blue one. So probably there is a timing issue. Currently this is the simtrace output for select and reading IMSI, etc: (pcscd must be running as welil, otherwise we get: $ ./simtrace.py -S Exception: Failed to establish context : Service not available.) $ ./simtrace.py -S Context established! PCSC Readers: ['ATMEL AT91SO CCID Smart Card Reader [SIMtraceCCID] 00 00'] Using reader: ATMEL AT91SO CCID Smart Card Reader [SIMtraceCCID] 00 00 Connected with active protocol 1 Select: 0x6E 0x00 Command: 0x6D 0x00 Disconnected Released context. ==> Expected answer for Select: 0x6D 0x00 (based on trying to execute this command with gemalto usb smart card reader) The command works only every now and then $ ./simtrace.py -b pcsc: wait_for_card Reading ... Traceback (most recent call last): File "./simtrace.py", line 105, in main() File "./simtrace.py", line 66, in main ccid.pySim_read() File "/home/chrysh/ba_thesis/sysmocom_repo/usb_application/ccid.py", line 22, in pySim_read (res, sw) = scc.read_binary(['3f00', '2fe2']) File "/home/chrysh/code/src/pysim/pySim/commands.py", line 42, in read_binary r = self.select_file(ef) File "/home/chrysh/code/src/pysim/pySim/commands.py", line 35, in select_file data, sw = self._tp.send_apdu_checksw("a0a4000002" + i) File "/home/chrysh/code/src/pysim/pySim/transport/__init__.py", line 87, in send_apdu_checksw raise RuntimeError("SW match failed ! Expected %s and got %s." % (sw.lower(), rv[1])) RuntimeError: SW match failed ! Expected 9000 and got 9404. ==> Error code 9404 does not exist, which suggests that we actually have a timing issue when communicating with the smart cart --- sam3s_example/simtrace/ccid.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/sam3s_example/simtrace/ccid.c b/sam3s_example/simtrace/ccid.c index 671fd4f2..f17cfeae 100644 --- a/sam3s_example/simtrace/ccid.c +++ b/sam3s_example/simtrace/ccid.c @@ -180,6 +180,28 @@ void CCID_init( void ) } } +/* FIXME: Remove this testcode */ +void send_select_file() { + #define MAX_ANSWER_SIZE 10 + static const uint8_t testCommand4[] = {0x00, 0xa4, 0x00, 0x00, 0x02, 0x3f, 0x00}; + uint8_t pMessage[MAX_ANSWER_SIZE]; + uint8_t ucSize ; + int i; + + printf("Write msg\n\r"); + ucSize = ISO7816_XfrBlockTPDU_T0( testCommand4, pMessage, sizeof( testCommand4 ) ) ; + // Output smartcard answer + if ( ucSize > 0 ) + { + printf( "\n\rAnswer: " ) ; + for ( i=0 ; i < ucSize ; i++ ) + { + printf( "0x%02X ", pMessage[i] ) ; + } + printf( "\n\r" ) ; + } +} + void CCID_run( void ) {