Hello,
ISO/IEC 7816-12:2005
7.2 The Class Specific Descriptor
Table 8 - Class specific descriptor for a USB-ICC
Offset: 40
Field: dwFeatures
Size: 4
Value: 0000 00840h
0002 00840h
0004 00840h
Description:
The value of the lower word (=0840) indicates
that the host will only send requests that are valid
for the USB-ICC.
The value of the upper word is the level of data
exchange with the USB-ICC:
0000h Character level exchanges
0002h Short APDU level exchanges
0004h Short and extended APDU level exchanges
But
Smart Card CCID version 1.1
5 Smart Card Device Class
5.1 Descriptor
Table 5.1-1 Smart Card Device Class Descriptors
for dwFeatures: "3) When a CCID doesn't declare the value 00000010h the
frequency must be made via the manufacturer proprietary PC_to_RDR_Escape
command, same thing for the baud rate when the value 00000020h is not
declared."
Patch for trunk revision 1157 is in attachment.
Thanks
diff -u -r openct-trunk-r1157/src/ifd/ifd-ccid.c
openct-trunk-r1157_new/src/ifd/ifd-ccid.c
--- openct-trunk-r1157/src/ifd/ifd-ccid.c 2009-02-26 11:58:13.000000000
+0300
+++ openct-trunk-r1157_new/src/ifd/ifd-ccid.c 2009-07-15 16:34:36.000000000
+0400
@@ -727,8 +727,13 @@
/* "When a CCID doesn't declare the values 00000010h and 00000020h, the
* frequency or the baud rate must be made via manufacturer proprietary
* PC_to_RDR_Escape command." - ccid class specification v1.00
+ *
+ * "The value of the lower word (=0840) indicates that the host will only
+ * send requests that are valid for the USB-ICC." - ISO/IEC 7816-12:2005
+ * 7.2/Table 8
*/
- if (~ccid.dwFeatures & (0x10 | 0x20)) {
+ if ((ccid.dwFeatures & 0xFFFF) != 0x0840
+ && ~ccid.dwFeatures & (0x10 | 0x20)) {
ct_error("ccid: required card initialization features missing");
free(st);
ifd_device_close(dev);
_______________________________________________
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel