Re: [opensc-devel] westcos_select_file and iso7816_select_file

2009-09-22 Thread François Leblanc

Thank you, I'll try this.

François.

-Message d'origine-
De : opensc-devel-boun...@lists.opensc-project.org 
[mailto:opensc-devel-boun...@lists.opensc-project.org] De la part de Aktiv Co. 
Aleksey Samsonov
Envoyé : lundi 21 septembre 2009 09:38
À : opensc-devel@lists.opensc-project.org
Objet : [opensc-devel] westcos_select_file and iso7816_select_file

Hello!
I propose a patch for src/libopensc/card-westcos.c if it's working.

src/libopensc/card-westcos.c:westcos_select_file:

309:case SC_PATH_TYPE_PATH:
 apdu.p1 = 9;// Why is it needed?  (9 ?)

336:if (file_out != NULL) {
 apdu.resp = buf;
 apdu.resplen = sizeof(buf);
 apdu.le = 255;
 } else {
 apdu.resplen = 0;
 apdu.le = 0;
 apdu.cse = SC_APDU_CASE_3_SHORT;
 }
Is this correct? (See 
http://www.opensc-project.org/opensc/changeset/3700/trunk/src/libopensc 
and 
http://www.opensc-project.org/pipermail/opensc-devel/2009-June/012280.html)
Patch for trunk revision 3741 attached.
Thanks
___
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel


Re: [opensc-devel] westcos_select_file and iso7816_select_file

2009-09-22 Thread François Leblanc


À : 'Aktiv Co. Aleksey Samsonov'; opensc-devel@lists.opensc-project.org
Objet : Re: [opensc-devel] westcos_select_file and iso7816_select_file


Thank you, I'll try this.

François.

It seems working fine, 

Patch for trunk revision 3741 can be apply.


Thank you Aleksey Samsonov.


François.
___
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel


[opensc-devel] westcos_select_file and iso7816_select_file

2009-09-21 Thread Aktiv Co. Aleksey Samsonov

Hello!
I propose a patch for src/libopensc/card-westcos.c if it's working.

src/libopensc/card-westcos.c:westcos_select_file:

309:case SC_PATH_TYPE_PATH:
apdu.p1 = 9;// Why is it needed?  (9 ?)

336:if (file_out != NULL) {
apdu.resp = buf;
apdu.resplen = sizeof(buf);
apdu.le = 255;
} else {
apdu.resplen = 0;
apdu.le = 0;
apdu.cse = SC_APDU_CASE_3_SHORT;
}
Is this correct? (See 
http://www.opensc-project.org/opensc/changeset/3700/trunk/src/libopensc 
and 
http://www.opensc-project.org/pipermail/opensc-devel/2009-June/012280.html)

Patch for trunk revision 3741 attached.
Thanks
diff -u -r opensc-trunk-r3742/src/libopensc/card-westcos.c 
opensc-trunk-r3742_new/src/libopensc/card-westcos.c
--- opensc-trunk-r3742/src/libopensc/card-westcos.c 2009-09-12 
07:04:48.0 +0400
+++ opensc-trunk-r3742_new/src/libopensc/card-westcos.c 2009-09-21 
11:11:15.0 +0400
@@ -280,100 +280,11 @@
 static int westcos_select_file(sc_card_t * card, const sc_path_t * in_path,
   sc_file_t ** file_out)
 {
-   sc_context_t *ctx;
-   sc_apdu_t apdu;
-   u8 buf[SC_MAX_APDU_BUFFER_SIZE];
-   u8 pathbuf[SC_MAX_PATH_SIZE], *path = pathbuf;
-   int r, pathlen;
-   sc_file_t *file = NULL;
-   priv_data_t *priv_data = NULL;
-   if (card-ctx-debug = 1)
-   sc_debug(card-ctx, westcos_select_file\n);
-   if (card == NULL)
-   return SC_ERROR_INVALID_ARGUMENTS;
-   priv_data = (priv_data_t *) card-drv_data;
-   priv_data-file_id = 0;
-   ctx = card-ctx;
-   memcpy(path, in_path-value, in_path-len);
-   pathlen = (int)in_path-len;
-   sc_format_apdu(card, apdu, SC_APDU_CASE_4_SHORT, 0xA4, 0, 0);
-   switch (in_path-type) {
-   case SC_PATH_TYPE_FILE_ID:
-   apdu.p1 = 0;
-   if (pathlen != 2)
-   return SC_ERROR_INVALID_ARGUMENTS;
-   break;
-   case SC_PATH_TYPE_DF_NAME:
-   apdu.p1 = 4;
-   break;
-   case SC_PATH_TYPE_PATH:
-   apdu.p1 = 9;
-   if (pathlen == 2  memcmp(path, \x3F\x00, 2) == 0) {
-   apdu.p1 = 0;
-   }
+   priv_data_t *priv_data = (priv_data_t *) card-drv_data;
 
-   else if (pathlen  2  memcmp(path, \x3F\x00, 2) == 0) {
-   apdu.p1 = 8;
-   pathlen -= 2;
-   memcpy(path, in_path-value[2], pathlen);
-   }
-   break;
-   case SC_PATH_TYPE_FROM_CURRENT:
-   apdu.p1 = 9;
-   break;
-   case SC_PATH_TYPE_PARENT:
-   apdu.p1 = 3;
-   pathlen = 0;
-   apdu.cse = SC_APDU_CASE_3_SHORT;
-   break;
-   default:
-   return SC_ERROR_INVALID_ARGUMENTS;
-   }
-   apdu.p2 = 0;/* first record, return FCI */
-   apdu.lc = pathlen;
-   apdu.data = path;
-   apdu.datalen = pathlen;
-   if (file_out != NULL) {
-   apdu.resp = buf;
-   apdu.resplen = sizeof(buf);
-   apdu.le = 255;
-   } else {
-   apdu.resplen = 0;
-   apdu.le = 0;
-   apdu.cse = SC_APDU_CASE_3_SHORT;
-   }
-   r = sc_transmit_apdu(card, apdu);
-   if (r)
-   return (r);
-   if (file_out == NULL) {
-   if (apdu.sw1 == 0x61)
-   return 0;
-   return sc_check_sw(card, apdu.sw1, apdu.sw2);
-   }
-   r = sc_check_sw(card, apdu.sw1, apdu.sw2);
-   if (r)
-   return (r);
-   switch (apdu.resp[0]) {
-   case 0x6F:
-   file = sc_file_new();
-   if (file == NULL)
-   return SC_ERROR_OUT_OF_MEMORY;
-   file-path = *in_path;
-   if (card-ops-process_fci == NULL) {
-   sc_file_free(file);
-   return SC_ERROR_NOT_SUPPORTED;
-   }
-   if (apdu.resp[1] = apdu.resplen)
-   card-ops-process_fci(card, file, apdu.resp + 2,
-  apdu.resp[1]);
-   *file_out = file;
-   break;
-   case 0x00:  /* proprietary coding */
-   return SC_ERROR_UNKNOWN_DATA_RECEIVED;
-   default:
-   return SC_ERROR_UNKNOWN_DATA_RECEIVED;
-   }
-   return 0;
+   assert(iso_ops  iso_ops-select_file);
+   priv_data-file_id = 0;
+   return iso_ops-select_file(card, in_path, file_out);
 }
 
 static int _westcos2opensc_ac(u8 flag)
___
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel