Hi there,
I can confirm now, it's an issue (see below), it must be
tmp |= 0x08 << 3;
since the pin code start 8 bits after lc ...
The same apply for 'part10_build_modify_pin_block'
line 1164, must be tmp |= 0x04 << 3;
and line 1189 must be
pin_modify->bInsertionOffsetNew = 0x08; /* bOffsetNew */
pin_modify->bInsertionOffsetNew = 0x00; /* bOffsetNew */
Perhaps bInsertionOffsetNew = 0x08 only for SC_PIN_ENCODING_GLP ...
Regards
François Leblanc.
Fleblanc a écrit :
After testing I'm happy with SCardControl it's work fine now, but I
have possibly an another
issue in "reader-pcsc.c" in "part10_build_verify_pin_block" function
in line 1073, the code is
} else if (data->pin1.encoding == SC_PIN_ENCODING_GLP) {
/* see comment about GLP pins in sec.c */
tmp |= SC_CCID_PIN_ENCODING_BCD;
tmp |= 0x04 << 3;
} else
return SC_ERROR_NOT_SUPPORTED;
in order to set 'bmFormatString' of PIN_VERIFY_STRUCTURE this field
is defined in
http://www.usb.org/developers/devclass_docs/DWG_Smart-Card_CCID_Rev110.pdf
and Bit 6 – 3 Define the PIN position after format in the APDU command
(relative to the first data after Lc).
The position is based on the system units’ type indicator (maximum1111
for fifteen system units).
So for SC_PIN_ENCODING_GLP you get tthe value:
0x04 << 3 | SC_CCID_PIN_ENCODING_BCD = 0x21
and I think it should be 0x41 because the pin position after lc is 8 bits
ex: pin GPL 5432 is 24:54:32:FF:FF:FF:FF:FF
apdu to verify will be:
00 20 00 00 08 24 54 32 FF FF FF FF FF
so pin start at lc + 8 bits...
This, the code should be:
tmp |= 0x08 << 3;
Of course I've a reader that work with bmFormatString = 0x41 and not
with bmFormatString = 0x21
but it maybe an error on the firmware of this reader, I have only one
king of reader for testing ...
What do you think about this?
Regards
François Leblanc.
Fleblanc a écrit :
Thank you , I will try it ...
François Leblanc.
Alon Bar-Lev a écrit :
Thank you, fixed in r3662.
And build-004 was released with this fix.
Alon.
On Wed, Feb 25, 2009 at 11:27 AM, Fleblanc
<francois.lebl...@cev-sa.com> wrote:
Opensc release 0.11.6
Platform Windows XP
Reader XIRING CCID with pinpad
Two things:
First when I connect this reader and other PCSC readers when I use
pkcs15-tool I have the message "Card not present"
In other word, the XIRING reader with pinpad must be alone to work...
Second, I have absolutly no idea why but SCardControl fail with
code 1 ...
I have a look to the code all seems good but...
I've tryed sample program and it's working fine but in opensc not,
it's
amazing:
[westcos-tool.exe] reader-pcsc.c:565:pcsc_connect: Requesting reader
features ...
[westcos-tool.exe] reader-pcsc.c:618:pcsc_connect: SCardControl
failed 1
Does anyone have some problem too with pcsc on windows?
Regards.
_______________________________________________
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel
_______________________________________________
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel
--- reader-pcsc.c 2009-02-01 09:28:52.000000000 +0100
+++ new_reader-pcsc.c 2009-03-11 10:03:18.000000000 +0100
@@ -1070,7 +1070,7 @@
} else if (data->pin1.encoding == SC_PIN_ENCODING_GLP) {
/* see comment about GLP pins in sec.c */
tmp |= SC_CCID_PIN_ENCODING_BCD;
- tmp |= 0x04 << 3;
+ tmp |= 0x08 << 3;
} else
return SC_ERROR_NOT_SUPPORTED;
@@ -1161,7 +1161,7 @@
} else if (data->pin1.encoding == SC_PIN_ENCODING_GLP) {
/* see comment about GLP pins in sec.c */
tmp |= SC_CCID_PIN_ENCODING_BCD;
- tmp |= 0x04 << 3;
+ tmp |= 0x08 << 3;
} else
return SC_ERROR_NOT_SUPPORTED;
@@ -1185,9 +1185,15 @@
}
pin_modify->bmPINLengthFormat = tmp; /* bmPINLengthFormat */
- pin_modify->bInsertionOffsetOld = 0x00; /* bOffsetOld */
- pin_modify->bInsertionOffsetNew = 0x00; /* bOffsetNew */
-
+ if (data->pin1.encoding == SC_PIN_ENCODING_GLP) {
+ pin_modify->bInsertionOffsetOld = 0x00; /* bOffsetOld */
+ pin_modify->bInsertionOffsetNew = 0x08; /* bOffsetNew */
+ }
+ else {
+ pin_modify->bInsertionOffsetOld = 0x00; /* bOffsetOld */
+ pin_modify->bInsertionOffsetNew = 0x00; /* bOffsetNew */
+ }
+
if (!data->pin1.min_length || !data->pin1.max_length)
return SC_ERROR_INVALID_ARGUMENTS;
_______________________________________________
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel