Gemalto IDBridge K30 (480A1473), Not enough data received: 0 bytes

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Gemalto IDBridge K30 (480A1473), Not enough data received: 0 bytes

Wolfgang Pichler
Hi all,

we have a very interessting problem using a Gemalto IDBridge K30 with pcscd - libccid.

I do have serveral of these devices - they are nearly identically - the only difference i found is that bNumDataRatesSupp is 50 and on the other devices it is 53.

For the problem

- all tokens do work on my old development machine with libccid 1.4.22 from ubuntu (x64)
- on the destination system - a raspberry pi 3b (also tested pi 2b) only the tokens with bNumDataRatesSupp=50 do work - the one with bNumDataRatesSupp=53 will fail with:


00007876 ccid.c:78:ccid_open_hack_pre() ZLP fixup
00000038 ccid_usb.c:1101:InterruptRead() before (0)
00000025 ccid_usb.c:1102:InterruptRead() timeout (1000 ms)          <- I’ve inserted this statement - and tried to increase timeout from 100ms to 1000ms - did not help
01000190 ccid_usb.c:1144:InterruptRead() after (0) (2)
00000307 -> 000000 65 00 00 00 00 00 00 00 00 00
00001742 <- 000000 81 00 00 00 00 00 00 00 00 00
00001119 -> 000000 65 00 00 00 00 00 01 00 00 00
00000487 <- 000000
00000029 commands.c:1110:CmdGetSlotStatus() Not enough data received: 0 bytes


As you can see here - i have already tried a version with the ZLP fixup - but it did not help.

I’ve already tried versions

1.4.22 (as this version does work on my development machine)
1.4.11 (for the ZLP Fix)
1.4.26 (the latest)

Here some more logs

00000028 ifdhandler.c:1822:IFDHICCPresence() Card present
00000231 ifdhandler.c:359:IFDHGetCapabilities() tag: 0xFAE, usb:08e6/3438:libudev:0:/dev/bus/usb/001/005 (lun: 0)
00000032 ifdhandler.c:447:IFDHGetCapabilities() Reader supports 1 slot(s)
00000072 ifdhandler.c:1704:IFDHICCPresence() usb:08e6/3438:libudev:0:/dev/bus/usb/001/005 (lun: 0)
00000666 hotplug_libudev.c:294:get_driver() Looking for a driver for VID: 0x0424, PID: 0x9514, path: /dev/bus/usb/001/002
00000209 readerfactory.c:1420:RFWaitForReaderInit() Waiting init for reader: Gemalto IDBridge K30 (480A1473) 00 00
00000460 -> 000000 65 00 00 00 00 00 05 00 00 00
00000429 <- 000000
00000029 commands.c:1110:CmdGetSlotStatus() Not enough data received: 0 bytes
00000036 ifdwrapper.c:369:IFDStatusICC() Card not transacted: 612
00000030 ifdhandler.c:1704:IFDHICCPresence() usb:08e6/3438:libudev:0:/dev/bus/usb/001/005 (lun: 0)
00000291 -> 000000 65 00 00 00 00 00 06 00 00 00
00001738 <- 000000 81 00 00 00 00 00 06 00 00 00
00000028 ifdhandler.c:1822:IFDHICCPresence() Card present
00000030 ifdhandler.c:1704:IFDHICCPresence() usb:08e6/3438:libudev:0:/dev/bus/usb/001/005 (lun: 0)
00001107 -> 000000 65 00 00 00 00 00 07 00 00 00
00000448 <- 000000
00000027 commands.c:1110:CmdGetSlotStatus() Not enough data received: 0 bytes
00000027 ifdwrapper.c:369:IFDStatusICC() Card not transacted: 612
00000026 eventhandler.c:409:EHStatusHandlerThread() powerState: POWER_STATE_UNPOWERED
00000026 eventhandler.c:420:EHStatusHandlerThread() Card inserted into Gemalto IDBridge K30 (480A1473) 00 00
00000026 eventhandler.c:436:EHStatusHandlerThread() Error powering up card.

The „extra“ datarates which the token provides are:
00000024 ccid_usb.c:1171:get_data_rates() declared: 12500 bps
00000023 ccid_usb.c:1171:get_data_rates() declared: 10323 bps
00000023 ccid_usb.c:1171:get_data_rates() declared: 12403 bps

when i try to access the card - then i do get this on the token which does work:
00000028 winscard.c:349:SCardConnect() powerState: POWER_STATE_INUSE
00000023 prothandler.c:108:PHSetProtocol() Attempting PTS to T=1
00000027 ifdhandler.c:692:IFDHSetProtocolParameters() protocol T=1, usb:08e6/3438:libudev:0:/dev/bus/usb/001/009 (lun: 0)
00000047 ifdhandler.c:2098:extra_egt() Extra EGT patch applied
00024371 winscard.c:428:SCardConnect() Active Protocol: T=1
00000042 winscard.c:453:SCardConnect() hCard Identity: 4cc6e952


and this on the token which does not work
00000026 winscard.c:349:SCardConnect() powerState: POWER_STATE_INUSE
00000027 prothandler.c:108:PHSetProtocol() Attempting PTS to T=1
00000030 ifdhandler.c:692:IFDHSetProtocolParameters() protocol T=1, usb:08e6/3438:libudev:0:/dev/bus/usb/001/008 (lun: 0)
00000043 ifdhandler.c:2098:extra_egt() Extra EGT patch applied
00012539 commands.c:2271:SetParameters() Not enough data received: 0 bytes
00000038 prothandler.c:124:PHSetProtocol() PTS failed (612), using T=1


As you can see - after the EGT patch - the good one is showing Protocol T=1 - the bad one failed because it could not read the data.


I also already try to update libusb - also without any effect.


The card in the reader is not the problem - i’ve already switched the cards - the problem is specific to the reader.

Also a college did tried it on his raspberry - the same result with other gemalto reader - it did not work for him - he also does has 53 data rates…



So the problem must be somehow related to the dataRates - maybe i do try to exclude the extra datarates in the source - maybe it then just works ;-)

Any guess about this would be great !

br,
Wolfgang
_______________________________________________
Pcsclite-muscle mailing list
[hidden email]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pcsclite-muscle
Reply | Threaded
Open this post in threaded view
|

Re: Gemalto IDBridge K30 (480A1473), Not enough data received: 0 bytes

Ludovic Rousseau
2017-02-18 16:17 GMT+01:00 Wolfgang Pichler <[hidden email]>:
Hi all,

Hello,
 

we have a very interessting problem using a Gemalto IDBridge K30 with pcscd - libccid.

I do have serveral of these devices - they are nearly identically - the only difference i found is that bNumDataRatesSupp is 50 and on the other devices it is 53.

Can you send me the output.txt for the 2 different readers please?

For the problem

- all tokens do work on my old development machine with libccid 1.4.22 from ubuntu (x64)
- on the destination system - a raspberry pi 3b (also tested pi 2b) only the tokens with bNumDataRatesSupp=50 do work - the one with bNumDataRatesSupp=53 will fail with:


00007876 ccid.c:78:ccid_open_hack_pre() ZLP fixup
00000038 ccid_usb.c:1101:InterruptRead() before (0)
00000025 ccid_usb.c:1102:InterruptRead() timeout (1000 ms)          <- I’ve inserted this statement - and tried to increase timeout from 100ms to 1000ms - did not help
01000190 ccid_usb.c:1144:InterruptRead() after (0) (2)
00000307 -> 000000 65 00 00 00 00 00 00 00 00 00
00001742 <- 000000 81 00 00 00 00 00 00 00 00 00
00001119 -> 000000 65 00 00 00 00 00 01 00 00 00
00000487 <- 000000
00000029 commands.c:1110:CmdGetSlotStatus() Not enough data received: 0 bytes


As you can see here - i have already tried a version with the ZLP fixup - but it did not help.

The ZLP fix is not correct for all cases (especially for "slow" computers).
Try to increase the timeout value of the libusb_bulk_transfer() call from 10 to 100 ms. It should be near line 790.

So the problem must be somehow related to the dataRates - maybe i do try to exclude the extra datarates in the source - maybe it then just works ;-)

The problem is related to the reader firmware.

Bye

--
 Dr. Ludovic Rousseau

_______________________________________________
Pcsclite-muscle mailing list
[hidden email]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pcsclite-muscle