On Mon, 2012-02-27 at 20:54 +0100, Andreas Kroehnert wrote:
> Hi Anthony,
>
> ( To mess it up even more SafeNet now renamed/rebranded the ikey 4000
> to eToken 5000)
FWIW, SafeNet bought DataKey and the DataKey Card Operating System
(DKCOS) (which RainBow had licensed from DataKey BTW) and SafeNet
renamed DKCOS to SafeNet Cryptographic Card Operating System (SCCOS).
> Back to topic: In general its claimed that regardless of the PID, the
> ikey4000 / SC400 is a CCID compliant device, but I never got it to
> work using libccid.
The two iKey4000 tokens I had worked with certainly are not CCID
compliant. The USB descriptors for CCID device don't exist on them.
They also only use the USB control pipe AFAICT.
> While developing the first attempt of the patch I was confused why the
> ATR from the card contains a trailing byte before it continues with
> 0x3B...
FWIW that extra byte is the length of the ATR and Historical bytes that
follow:
URB[14-15]
ControlTransfer
bRequestType: 0x41 (Write-Vendor-Interface)
bRequest: 22 ---> 0x16 (22): command for reader (usually)
wValue: 8197 (0x2005) ---> 0x05: Get ATR? 0x20: Fetch only 32 (0x20) bytes
wIndex: 0 (0x0000)
wLength: 0
URB[16-17]
struct AnswerToReset
{
u8 length; /* 0x19 = 25 meaningful bytes follow */
u8 atr[9]; /* Defined in ISO std for smartcards: TS - TD */
u8 historical[16]; /* historical bytes: Type, Key-Len Val, Key-Len Val
and XORsum */
u8 crud[6];
};
ControlTransfer
data:
0000: 19 3b ff 18 00 00 81 31 fe 4d 80 25 a0 00 00 00 | ; 1 M % |
0010: 56 57 44 4b 34 30 30 06 00 dd c8 40 02 01 a0 00 | VWDK400 @ |
bRequestType: 0xc1 (Read-Vendor-Interface)
bRequest: 1
wValue: 0 (0x0000)
wIndex: 0 (0x0000)
wLength: 32
The "smart card" is internally a DataKey 400 (DK400). Sending that ATR
through the online ATR parser yields the following:
Parsing ATR: 3B FF 18 00 00 81 31 FE 4D 80 25 A0 00 00 00 56 57 44 4B 34 30 30
06 00 DD
TS = 0x3B Direct Convention
T0 = 0xFF Y(1): b1111, K: 15 (historical bytes)
TA(1) = 0x18 Fi=372, Di=12, 31 cycles/ETU (129032 bits/s at 4.00 MHz, 161290
bits/s for fMax=5 MHz)
TB(1) = 0x00 VPP is not electrically connected
TC(1) = 0x00 Extra guard time: 0
TD(1) = 0x81 Y(i+1) = b1000, Protocol T=1
----
TD(2) = 0x31 Y(i+1) = b0011, Protocol T=1
----
TA(3) = 0xFE IFSC: 254
TB(3) = 0x4D Block Waiting Integer: 4 - Character Waiting Integer: 13
----
Historical bytes 80 25 A0 00 00 00 56 57 44 4B 34 30 30 06 00
Category indicator byte: 0x80
(compact TLV data object)
Tag: 2, Len: 5 (issuer identification number, ISO 7812-1)
Issuer identification number: A0 00 00 00 56 Tag: 5, Len: 7 (card
issuer's data)
Card issuer data: 44 4B 34 30 30 06 00
TCK = 0xDD (correct checksum)
Regards,
Andy
> Kind Regards
> Andreas
_______________________________________________
opensc-devel mailing list
[email protected]
http://www.opensc-project.org/mailman/listinfo/opensc-devel