2011/6/8 Martin Paljak <mar...@martinpaljak.net>: > On Jun 8, 2011, at 12:24 , Johannes Becker wrote: >> With Windows the SPR532 doesn't accept the PIN, when you use opensc. >> On the other hand, with Peter Koch's middleware it is ok. > > It thus expects the swapped length information I guess. > > The log seems to support this guess: > > 2011-06-03 09:32:04.562 PC/SC v2 pinpad block: > 1e:1e:02:00:00:10:06:02:00:00:00:00:00:00:00:05:00:00:00:00:20:00:00:00 > 2011-06-03 09:32:04.562 [opensc-pkcs11] > reader-pcsc.c:174:pcsc_internal_transmit: called > 2011-06-03 09:32:04.578 [opensc-pkcs11] > reader-pcsc.c:174:pcsc_internal_transmit: called > 2011-06-03 09:32:15.109 Wrong length > 2011-06-03 09:32:15.109 [opensc-pkcs11] sec.c:204:sc_pin_cmd: returning with: > -1206 (Wrong length) > > The pinpad command block constructed by OpenSC results in an incorrect PIN > block to be constructed by the firmware of the reader. > > Probably creating an conditional behavior for this reader is possible in > OpenSC, but as there are several incompatible firmware versions, it will > still fail for some, unless we try "every combination we know" which IMHO is > not a very smart thing to do. > But fixing, at least enhancing it, should be possible. > Maybe I can help to debug it more next week. > >> Using the GemPlus Pinpad reader, Firefox shows quickly serveral times >> the window telling you to enter the PIN on the Pinpad, but the connection >> to the web servers fails before you have a chance to to anything. > > The PIN block is rejected by the reader firmware with a generic error, OpenSC > exports it as an error but Firefox is stupid enough to not detect it. Firefox > does "PIN entry fails? Try three times" operation, it also does not detect > incorrect PIN codes and behaves the same way. > > Ludovic's CCID driver *already* adjusts the PIN block, as is visible from the > log: > > Control TxBuffer: 1E 1E 02 00 00 10 06 02 00 00 00 00 00 00 00 05 00 00 00 00 > 20 00 00 00 > commands.c:359:SecurePINVerify() Correct bNumberMessage for GemPC Pinpad (was > 0) > openct/proto-t1.c:571:t1_build() more bit: 0 > -> 000000 69 14 00 00 00 00 33 00 00 00 00 1E 02 00 00 10 06 02 01 00 00 00 > 00 40 05 00 20 00 00 00 > <- 000000 80 00 00 00 00 00 33 40 0F 00 > commands.c:1359:CCID_Receive error on byte 15 > Control RxBuffer: > ifdwrapper.c:638:IFDControl() Card not transacted: 612
The problem is on byte 15. Byte 15, 16 are wPINMaxExtraDigit In the CCID frame it is 10 06 So Maximum PIN size = 10h = 16 and Minimum PIN size = 06h = 6 The Gemalto Pinpad (v1) does not support Maximum PIN size bigger than 8. See the notes in http://pcsclite.alioth.debian.org/ccid/supported.html#0x08E60x3478 Again the PCSCv2_PART10_PROPERTY_bMaxPINSize feature should be used instead of a (hardcoded) value of 16. The OpenSC Feitian card driver has the same problem. > But apparently this is not enough. How does this reader work in Windows? Good question. -- Dr. Ludovic Rousseau _______________________________________________ opensc-devel mailing list opensc-devel@lists.opensc-project.org http://www.opensc-project.org/mailman/listinfo/opensc-devel