# the interesting stuff is at the bottom [103 ms] >>> URB 1 going down >>> [104 ms] <<< URB 1 coming back <<< 00000000: 12 01 10 01 00 00 00 20 3d 07 08 00 10 01 01 02 00000010: 00 01 00000000: 80 06 00 01 00 00 12 00 [104 ms] >>> URB 2 going down >>> [106 ms] <<< URB 2 coming back <<< 00000000: 09 02 5d 00 01 01 00 80 32 09 04 00 00 03 0b 00 00000010: 00 00 36 21 00 01 00 07 03 00 00 00 a0 0f 00 00 00000020: a0 0f 00 00 00 00 2a 00 00 16 40 05 00 00 fe 00 00000030: 00 00 00 00 00 00 00 00 00 00 30 02 01 00 0f 01 00000040: 00 00 00 00 00 00 00 01 07 05 04 02 40 00 00 07 00000050: 05 85 02 40 00 00 07 05 81 03 08 00 18 00000000: 80 06 00 02 00 00 80 00 [106 ms] >>> URB 3 going down >>> [140 ms] <<< URB 3 coming back <<< [140 ms] >>> URB 4 going down >>> [141 ms] <<< URB 4 coming back <<< 00000000: 12 01 10 01 00 00 00 20 3d 07 08 00 10 01 01 02 00000010: 00 01 00000000: 80 06 00 01 00 00 12 00 [141 ms] >>> URB 5 going down >>> [142 ms] <<< URB 5 coming back <<< 00000000: 28 03 43 00 00000000: 80 06 02 03 09 04 04 00 [142 ms] >>> URB 6 going down >>> [143 ms] <<< URB 6 coming back <<< 00000000: 28 03 43 00 72 00 79 00 70 00 74 00 6f 00 49 00 00000010: 64 00 65 00 6e 00 74 00 69 00 74 00 79 00 20 00 00000020: 43 00 43 00 49 00 44 00 00000000: 80 06 02 03 09 04 28 00 [143 ms] >>> URB 7 going down >>> [144 ms] <<< URB 7 coming back <<< 00000000: 0e 03 45 00 00000000: 80 06 01 03 09 04 04 00 [144 ms] >>> URB 8 going down >>> [145 ms] <<< URB 8 coming back <<< 00000000: 0e 03 45 00 75 00 74 00 72 00 6f 00 6e 00 00000000: 80 06 01 03 09 04 0e 00 [145 ms] >>> URB 9 going down >>> [147 ms] <<< URB 9 coming back <<< 00000000: 50 03 [147 ms] >>> URB 10 going down >>> [156 ms] >>> URB 11 going down >>> 00000000: 65 00 00 00 00 00 02 00 00 00 [157 ms] <<< URB 11 coming back <<< [157 ms] >>> URB 12 going down >>> [158 ms] <<< URB 12 coming back <<< 00000000: 81 00 00 00 00 00 02 01 00 00 [162 ms] >>> URB 13 going down >>> 00000000: 62 00 00 00 00 00 03 03 00 00 [163 ms] <<< URB 13 coming back <<< [163 ms] >>> URB 14 going down >>> [186 ms] <<< URB 14 coming back <<< 00000000: 80 00 00 00 00 00 03 40 fe 00 [186 ms] >>> URB 15 going down >>> 00000000: 62 00 00 00 00 00 04 02 00 00 [186 ms] <<< URB 15 coming back <<< [186 ms] >>> URB 16 going down >>> [243 ms] <<< URB 16 coming back <<< 00000000: 80 0f 00 00 00 00 04 00 00 00 3b f4 18 00 02 c1 00000010: 0a 31 fe 58 56 34 63 76 c5 [15254 ms] >>> URB 17 going down >>> 00000000: 63 00 00 00 00 00 05 01 00 00 [15255 ms] <<< URB 17 coming back <<< [15255 ms] >>> URB 18 going down >>> [15256 ms] <<< URB 18 coming back <<< 00000000: 81 00 00 00 00 00 05 01 00 00 [21312 ms] >>> URB 19 going down >>> 00000000: 62 00 00 00 00 00 06 03 00 00 [21313 ms] <<< URB 19 coming back <<< [21313 ms] >>> URB 20 going down >>> [21314 ms] <<< URB 20 coming back <<< 00000000: 80 00 00 00 00 00 06 41 fe 00 [21314 ms] >>> URB 21 going down >>> 00000000: 62 00 00 00 00 00 07 02 00 00 [21315 ms] <<< URB 21 coming back <<< [21315 ms] >>> URB 22 going down >>> [21361 ms] <<< URB 22 coming back <<< 00000000: 80 0f 00 00 00 00 07 00 00 00 3b f4 18 00 02 c1 00000010: 0a 31 fe 58 56 34 63 76 c5 [21361 ms] >>> URB 23 going down >>> 00000000: 6f 04 00 00 00 00 08 00 00 00 ff 11 18 f6 [21362 ms] <<< URB 23 coming back <<< [21362 ms] >>> URB 24 going down >>> [21375 ms] <<< URB 24 coming back <<< 00000000: 80 04 00 00 00 00 08 00 00 00 ff 11 18 f6 [21375 ms] >>> URB 25 going down >>> 00000000: 61 07 00 00 00 00 09 01 00 00 18 10 02 58 00 fe 00000010: 00 [21376 ms] <<< URB 25 coming back <<< [21376 ms] >>> URB 26 going down >>> [21378 ms] <<< URB 26 coming back <<< 00000000: 82 07 00 00 00 00 09 00 00 00 18 10 02 58 00 fe 00000010: 00 [21378 ms] >>> URB 27 going down >>> 00000000: 6f 05 00 00 00 00 0a 00 00 00 00 c1 01 fe 3e [21380 ms] <<< URB 27 coming back <<< [21380 ms] >>> URB 28 going down >>> [21383 ms] <<< URB 28 coming back <<< 00000000: 80 05 00 00 00 00 0a 00 00 00 00 e1 01 fe 1e [21383 ms] >>> URB 29 going down >>> # start of initialisation of token? # APDU: 00 CA 01 82 02, means: get OS version 00000000: 6f 09 00 00 00 00 0b 00 00 00 00 00 05 00 ca 01 00000010: 82 02 4e [21384 ms] <<< URB 29 coming back <<< [21384 ms] >>> URB 30 going down >>> [21394 ms] <<< URB 30 coming back <<< # response c8 08 -> 200.8 (CardOS M4.3b) 00000000: 80 08 00 00 00 00 0b 00 00 00 00 00 04 c8 08 90 00000010: 00 54 [21394 ms] >>> URB 31 going down >>> # APDU: 00 CA 01 83 01 (request lifecycle, found in cardos-info.c) 00000000: 6f 09 00 00 00 00 0c 00 00 00 00 40 05 00 ca 01 00000010: 83 01 0c [21395 ms] <<< URB 31 coming back <<< [21395 ms] >>> URB 32 going down >>> [21401 ms] <<< URB 32 coming back <<< # response 10 (operational) 00000000: 80 07 00 00 00 00 0c 00 00 00 00 40 03 10 90 00 00000010: c3 [21401 ms] >>> URB 33 going down >>> # APDU: 00 A4 00 0c 02 3f 00 (select 'root' 3F00, return FCP template?) 00000000: 6f 0b 00 00 00 00 0d 00 00 00 00 00 07 00 a4 00 00000010: 0c 02 3f 00 92 [21403 ms] <<< URB 33 coming back <<< [21403 ms] >>> URB 34 going down >>> [21412 ms] <<< URB 34 coming back <<< # response OK 00000000: 80 06 00 00 00 00 0d 00 00 00 00 00 02 90 00 92 [21412 ms] >>> URB 35 going down >>> # ADPU: 00 A4 01 00 02 20 00 00 (select 2000 in root, return first page) 00000000: 6f 0c 00 00 00 00 0e 00 00 00 00 40 08 00 a4 01 00000010: 00 02 20 00 00 cf [21413 ms] <<< URB 35 coming back <<< [21413 ms] >>> URB 36 going down >>> [21437 ms] <<< URB 36 coming back <<< # response, first page of 3F002000, page size 44 bytes?? weird size # in response at bytes 20-27 we might have 'DF name', probably # prefixed by length, future references to 3F002000 are through it's # 'DF name', why? 00000000: 80 32 00 00 00 00 0e 00 00 00 00 40 2e 6f 2a 81 00000010: 02 02 00 82 06 38 b5 00 fe 00 05 83 02 20 00 84 00000020: 08 d2 76 00 00 98 c0 00 00 85 03 00 65 0a 86 09 00000030: 00 ff 01 01 01 ff 01 01 01 90 00 7f [21437 ms] >>> URB 37 going down >>> # APDU: 00 A4 01 00 02 20 01 00 (select 2001 in 2000, return first page) 00000000: 6f 0c 00 00 00 00 0f 00 00 00 00 00 08 00 a4 01 00000010: 00 02 20 01 00 8e [21439 ms] <<< URB 37 coming back <<< [21439 ms] >>> URB 38 going down >>> [21461 ms] <<< URB 38 coming back <<< # response, first page of 3F0020002001, page has 34 bytes # its 'DF name' appears a lot in this trace, but only as replies 00000000: 80 28 00 00 00 00 0f 00 00 00 00 00 24 6f 20 81 00000010: 02 02 00 82 06 38 b5 00 fe 00 00 83 02 20 01 85 00000020: 03 00 65 0a 86 09 00 ff 01 01 01 ff 01 01 01 90 00000030: 00 4b [21461 ms] >>> URB 39 going down >>> # APDU: 00 A4 00 0c 02 3F 00 (we have verified the existance of 20002001, # go back to root? 00000000: 6f 0b 00 00 00 00 10 00 00 00 00 40 07 00 a4 00 00000010: 0c 02 3f 00 d2 [21463 ms] <<< URB 39 coming back <<< [21463 ms] >>> URB 40 going down >>> [21473 ms] <<< URB 40 coming back <<< # response OK 00000000: 80 06 00 00 00 00 10 00 00 00 00 40 02 90 00 d2 [21473 ms] >>> URB 41 going down >>> # ADPU: 00 A4 01 00 02 20 00 00 (select 2000 in root, return first page) AGAIN? 00000000: 6f 0c 00 00 00 00 11 00 00 00 00 00 08 00 a4 01 00000010: 00 02 20 00 00 8f [21475 ms] <<< URB 41 coming back <<< [21475 ms] >>> URB 42 going down >>> [21498 ms] <<< URB 42 coming back <<< # response, first page of 3F002000, again, why?!?!? 00000000: 80 32 00 00 00 00 11 00 00 00 00 00 2e 6f 2a 81 00000010: 02 02 00 82 06 38 b5 00 fe 00 05 83 02 20 00 84 00000020: 08 d2 76 00 00 98 c0 00 00 85 03 00 65 0a 86 09 00000030: 00 ff 01 01 01 ff 01 01 01 90 00 3f [21498 ms] >>> URB 43 going down >>> # APDU: 00 A4 01 00 02 20 01 00 (select 2001 in 2000, return first page) AGAIN? 00000000: 6f 0c 00 00 00 00 12 00 00 00 00 40 08 00 a4 01 00000010: 00 02 20 01 00 ce [21500 ms] <<< URB 43 coming back <<< [21500 ms] >>> URB 44 going down >>> [21522 ms] <<< URB 44 coming back <<< # response, first page of 3F0020002001, page has 34 bytes, why oh why? 00000000: 80 28 00 00 00 00 12 00 00 00 00 40 24 6f 20 81 00000010: 02 02 00 82 06 38 b5 00 fe 00 00 83 02 20 01 85 00000020: 03 00 65 0a 86 09 00 ff 01 01 01 ff 01 01 01 90 00000030: 00 0b [21522 ms] >>> URB 45 going down >>> # APDU: 00 a4 04 0c 08 d2 76 00 00 98 c0 00 00 # this seems to be another way of selecting 3f002000 00000000: 6f 11 00 00 00 00 13 00 00 00 00 00 0d 00 a4 04 00000010: 0c 08 d2 76 00 00 98 c0 00 00 55 [21523 ms] <<< URB 45 coming back <<< [21523 ms] >>> URB 46 going down >>> [21536 ms] <<< URB 46 coming back <<< # response OK 00000000: 80 06 00 00 00 00 13 00 00 00 00 00 02 90 00 92 [21536 ms] >>> URB 47 going down >>> # APDU: 00 A4 01 00 02 20 01 00 (select 2001 in 2000, return first page) AGAIN?? 00000000: 6f 0c 00 00 00 00 14 00 00 00 00 40 08 00 a4 01 00000010: 00 02 20 01 00 ce [21538 ms] <<< URB 47 coming back <<< [21538 ms] >>> URB 48 going down >>> [21560 ms] <<< URB 48 coming back <<< # response, first page of 3F0020002001, page has 34 bytes, still hasn't changed 00000000: 80 28 00 00 00 00 14 00 00 00 00 40 24 6f 20 81 00000010: 02 02 00 82 06 38 b5 00 fe 00 00 83 02 20 01 85 00000020: 03 00 65 0a 86 09 00 ff 01 01 01 ff 01 01 01 90 00000030: 00 0b [21560 ms] >>> URB 49 going down >>> # APDU: 00 a4 04 0c 08 d2 76 00 00 98 c0 00 00, it is doing the same thing # over and over and over again, it's not logical 00000000: 6f 11 00 00 00 00 15 00 00 00 00 00 0d 00 a4 04 00000010: 0c 08 d2 76 00 00 98 c0 00 00 55 [21562 ms] <<< URB 49 coming back <<< [21562 ms] >>> URB 50 going down >>> [21573 ms] <<< URB 50 coming back <<< # response OK 00000000: 80 06 00 00 00 00 15 00 00 00 00 00 02 90 00 92 [21573 ms] >>> URB 51 going down >>> # APDU: 00 A4 01 00 02 20 01 00 (select 2001 in 2000, return first page) AGAIN?? 00000000: 6f 0c 00 00 00 00 16 00 00 00 00 40 08 00 a4 01 00000010: 00 02 20 01 00 ce [21574 ms] <<< URB 51 coming back <<< [21574 ms] >>> URB 52 going down >>> [21597 ms] <<< URB 52 coming back <<< # response, first page of 3F0020002001, get it over with already! 00000000: 80 28 00 00 00 00 16 00 00 00 00 40 24 6f 20 81 00000010: 02 02 00 82 06 38 b5 00 fe 00 00 83 02 20 01 85 00000020: 03 00 65 0a 86 09 00 ff 01 01 01 ff 01 01 01 90 00000030: 00 0b [21597 ms] >>> URB 53 going down >>> # APDU: 00 a4 02 00 02 00 01 00 (first page of 0001 in 3f0020002001) 00000000: 6f 0c 00 00 00 00 17 00 00 00 00 00 08 00 a4 02 00000010: 00 02 00 01 00 ad [21599 ms] <<< URB 53 coming back <<< [21599 ms] >>> URB 54 going down >>> [21617 ms] <<< URB 54 coming back <<< # response, first page indeed 00000000: 80 21 00 00 00 00 17 00 00 00 00 00 1d 6f 19 80 00000010: 02 01 e0 82 01 01 83 02 00 01 85 01 00 86 09 00 00000020: 01 00 00 00 01 01 00 00 90 00 90 [21617 ms] >>> URB 55 going down >>> # APDU: 00 b0 00 00 70, read 0x70 bytes from selected EF 00000000: 6f 09 00 00 00 00 18 00 00 00 00 40 05 00 b0 00 00000010: 00 70 85 [21619 ms] <<< URB 55 coming back <<< [21619 ms] >>> URB 56 going down >>> [21636 ms] <<< URB 56 coming back <<< # response, the requested bytes, why is this info useful? 00000000: 80 76 00 00 00 00 18 00 00 00 00 40 72 06 00 00 00000010: 02 00 00 01 01 00 03 00 04 02 00 00 05 00 04 05 00000020: 00 00 06 00 00 03 00 00 07 00 08 00 00 00 00 00 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 ad [21636 ms] >>> URB 57 going down >>> # APDU: 00 b0 00 70 70 read second 0x70 bytes from 3f00200020010001 00000000: 6f 09 00 00 00 00 19 00 00 00 00 00 05 00 b0 00 00000010: 70 70 b5 [21637 ms] <<< URB 57 coming back <<< [21637 ms] >>> URB 58 going down >>> [21655 ms] <<< URB 58 coming back <<< # response, the requested bytes, why is this info useful? 00000000: 80 76 00 00 00 00 19 00 00 00 00 00 72 00 00 00 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 e2 [21655 ms] >>> URB 59 going down >>> # APDU: 00 b0 00 70 70 read third 0x70 bytes from 3f00200020010001 00000000: 6f 09 00 00 00 00 1a 00 00 00 00 40 05 00 b0 00 00000010: e0 70 65 [21657 ms] <<< URB 59 coming back <<< [21657 ms] >>> URB 60 going down >>> [21674 ms] <<< URB 60 coming back <<< # response, the requested bytes, why is this info useful? 00000000: 80 76 00 00 00 00 1a 00 00 00 00 40 72 00 00 00 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 a2 [21674 ms] >>> URB 61 going down >>> # APDU: 00 b0 01 50 70 fourth third 0x70 bytes from 3f00200020010001 00000000: 6f 09 00 00 00 00 1b 00 00 00 00 00 05 00 b0 01 00000010: 50 70 94 [21675 ms] <<< URB 61 coming back <<< [21675 ms] >>> URB 62 going down >>> [21693 ms] <<< URB 62 coming back <<< # response, the requested bytes, why is this info useful? 00000000: 80 76 00 00 00 00 1b 00 00 00 00 00 72 00 00 00 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 e2 [21693 ms] >>> URB 63 going down >>> # APDU: 00 b0 01 c0 20 read last 32 bytes 3f00200020010001 # size of file is thus known, probably from 'first page' 00000000: 6f 09 00 00 00 00 1c 00 00 00 00 40 05 00 b0 01 00000010: c0 20 14 [21694 ms] <<< URB 63 coming back <<< [21694 ms] >>> URB 64 going down >>> [21703 ms] <<< URB 64 coming back <<< 00000000: 80 26 00 00 00 00 1c 00 00 00 00 40 22 00 00 00 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 f2 [21704 ms] >>> URB 65 going down >>> # APDU: 00 a4 04 0c 08 d2 76 00 00 98 c0 00 00, go to 3f002000 again # over and over and over again, it's not logical 00000000: 6f 11 00 00 00 00 1d 00 00 00 00 00 0d 00 a4 04 00000010: 0c 08 d2 76 00 00 98 c0 00 00 55 [21705 ms] <<< URB 65 coming back <<< [21705 ms] >>> URB 66 going down >>> [21717 ms] <<< URB 66 coming back <<< # response OK 00000000: 80 06 00 00 00 00 1d 00 00 00 00 00 02 90 00 92 [21717 ms] >>> URB 67 going down >>> # APDU: 00 A4 01 00 02 20 01 00 (select 2001 in 2000, return first page) AGAIN?? 00000000: 6f 0c 00 00 00 00 1e 00 00 00 00 40 08 00 a4 01 00000010: 00 02 20 01 00 ce [21719 ms] <<< URB 67 coming back <<< [21719 ms] >>> URB 68 going down >>> [21741 ms] <<< URB 68 coming back <<< # response, first page of 3F0020002001, it really puzzles me 00000000: 80 28 00 00 00 00 1e 00 00 00 00 40 24 6f 20 81 00000010: 02 02 00 82 06 38 b5 00 fe 00 00 83 02 20 01 85 00000020: 03 00 65 0a 86 09 00 ff 01 01 01 ff 01 01 01 90 00000030: 00 0b [21741 ms] >>> URB 69 going down >>> # APDU: select 3f00200020010002 00000000: 6f 0c 00 00 00 00 1f 00 00 00 00 00 08 00 a4 02 00000010: 00 02 00 02 00 ae [21742 ms] <<< URB 69 coming back <<< [21742 ms] >>> URB 70 going down >>> [21761 ms] <<< URB 70 coming back <<< # response: first page of 3f00200020010002 00000000: 80 21 00 00 00 00 1f 00 00 00 00 00 1d 6f 19 80 00000010: 02 00 80 82 01 01 83 02 00 02 85 01 00 86 09 00 00000020: 01 00 00 00 01 01 00 00 90 00 f2 [21761 ms] >>> URB 71 going down >>> # APDU: read first 0x70 bytes of file 00000000: 6f 09 00 00 00 00 20 00 00 00 00 40 05 00 b0 00 00000010: 00 70 85 [21763 ms] <<< URB 71 coming back <<< [21763 ms] >>> URB 72 going down >>> [21780 ms] <<< URB 72 coming back <<< # response: contents of probably useless file 00000000: 80 76 00 00 00 00 20 00 00 00 00 40 72 30 3d 04 00000010: 20 43 52 59 50 54 4f 49 44 45 4e 54 49 54 59 20 00000020: 37 62 66 66 35 36 34 32 64 32 30 33 31 65 31 63 00000030: 20 04 10 37 62 66 66 35 36 34 32 64 32 30 33 31 00000040: 65 31 63 04 01 0a 04 01 04 04 01 08 00 00 00 00 00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 89 [21780 ms] >>> URB 73 going down >>> # APDU: read last 0x10 bytes of 3f00200020010002 00000000: 6f 09 00 00 00 00 21 00 00 00 00 00 05 00 b0 00 00000010: 70 10 d5 [21782 ms] <<< URB 73 coming back <<< [21782 ms] >>> URB 74 going down >>> [21789 ms] <<< URB 74 coming back <<< # response: last bytes 00000000: 80 16 00 00 00 00 21 00 00 00 00 00 12 00 00 00 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 82 [21790 ms] >>> URB 75 going down >>> # APDU: and again move back to 3f002000 via 'DF name' 00000000: 6f 11 00 00 00 00 22 00 00 00 00 40 0d 00 a4 04 00000010: 0c 08 d2 76 00 00 98 c0 00 00 15 [21791 ms] <<< URB 75 coming back <<< [21791 ms] >>> URB 76 going down >>> [21803 ms] <<< URB 76 coming back <<< # response OK 00000000: 80 06 00 00 00 00 22 00 00 00 00 40 02 90 00 d2 [21803 ms] >>> URB 77 going down >>> # and to 3f0020002001 00000000: 6f 0c 00 00 00 00 23 00 00 00 00 00 08 00 a4 01 00000010: 00 02 20 01 00 8e [21804 ms] <<< URB 77 coming back <<< [21804 ms] >>> URB 78 going down >>> [21827 ms] <<< URB 78 coming back <<< # response contains something we saw already 10 times or so 00000000: 80 28 00 00 00 00 23 00 00 00 00 00 24 6f 20 81 00000010: 02 02 00 82 06 38 b5 00 fe 00 00 83 02 20 01 85 00000020: 03 00 65 0a 86 09 00 ff 01 01 01 ff 01 01 01 90 00000030: 00 4b [21827 ms] >>> URB 79 going down >>> # select EF 0003 00000000: 6f 0c 00 00 00 00 24 00 00 00 00 40 08 00 a4 02 00000010: 00 02 00 03 00 ef [21829 ms] <<< URB 79 coming back <<< [21829 ms] >>> URB 80 going down >>> [21848 ms] <<< URB 80 coming back <<< # returns first page of 3F00200020010003 00000000: 80 21 00 00 00 00 24 00 00 00 00 40 1d 6f 19 80 00000010: 02 01 14 82 01 01 83 02 00 03 85 01 00 86 09 00 00000020: 01 01 01 01 01 01 01 01 90 00 27 [21848 ms] >>> URB 81 going down >>> # read first 0x70 bytes from 0003 00000000: 6f 09 00 00 00 00 25 00 00 00 00 00 05 00 b0 00 00000010: 00 70 c5 [21849 ms] <<< URB 81 coming back <<< [21849 ms] >>> URB 82 going down >>> [21867 ms] <<< URB 82 coming back <<< # response queried bytes 00000000: 80 76 00 00 00 00 25 00 00 00 00 00 72 30 52 04 00000010: 24 33 33 31 31 64 31 66 32 2d 35 32 64 33 2d 34 00000020: 37 35 61 2d 38 62 39 65 2d 39 34 34 34 64 64 36 00000030: 32 62 62 62 39 04 24 33 33 31 31 64 31 66 32 2d 00000040: 35 32 64 33 2d 34 37 35 61 2d 38 62 39 65 2d 39 00000050: 34 34 34 64 64 36 32 62 62 62 39 04 04 00 00 00 00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 80 [21867 ms] >>> URB 83 going down >>> # read second 0x70 bytes from 0003 00000000: 6f 09 00 00 00 00 26 00 00 00 00 40 05 00 b0 00 00000010: 70 70 f5 [21869 ms] <<< URB 83 coming back <<< [21869 ms] >>> URB 84 going down >>> [21886 ms] <<< URB 84 coming back <<< # response queried bytes 00000000: 80 76 00 00 00 00 26 00 00 00 00 40 72 00 00 00 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 a2 [21886 ms] >>> URB 85 going down >>> # read last 0x34 bytes from 0003 00000000: 6f 09 00 00 00 00 27 00 00 00 00 00 05 00 b0 00 00000010: e0 34 61 [21888 ms] <<< URB 85 coming back <<< [21888 ms] >>> URB 86 going down >>> [21899 ms] <<< URB 86 coming back <<< # response queried bytes 00000000: 80 3a 00 00 00 00 27 00 00 00 00 00 36 00 00 00 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000040: 00 90 00 a6 [21950 ms] >>> URB 87 going down >>> # APDU: and again move back to 3f002000 via 'DF name' 00000000: 6f 11 00 00 00 00 28 00 00 00 00 40 0d 00 a4 04 00000010: 0c 08 d2 76 00 00 98 c0 00 00 15 [21951 ms] <<< URB 87 coming back <<< [21951 ms] >>> URB 88 going down >>> [21963 ms] <<< URB 88 coming back <<< # response OK 00000000: 80 06 00 00 00 00 28 00 00 00 00 40 02 90 00 d2 [21963 ms] >>> URB 89 going down >>> # APDU: and again to 3f0020002001 00000000: 6f 0c 00 00 00 00 29 00 00 00 00 00 08 00 a4 01 00000010: 00 02 20 01 00 8e [21965 ms] <<< URB 89 coming back <<< [21965 ms] >>> URB 90 going down >>> [21987 ms] <<< URB 90 coming back <<< # response sigh 00000000: 80 28 00 00 00 00 29 00 00 00 00 00 24 6f 20 81 00000010: 02 02 00 82 06 38 b5 00 fe 00 00 83 02 20 01 85 00000020: 03 00 65 0a 86 09 00 ff 01 01 01 ff 01 01 01 90 00000030: 00 4b [21987 ms] >>> URB 91 going down >>> # select 3f00200020010006 (0004 is DF containing private key, 0005 ignored?) 00000000: 6f 0c 00 00 00 00 2a 00 00 00 00 40 08 00 a4 02 00000010: 00 02 00 06 00 ea [21988 ms] <<< URB 91 coming back <<< [21988 ms] >>> URB 92 going down >>> [22008 ms] <<< URB 92 coming back <<< # first page of 0006 00000000: 80 21 00 00 00 00 2a 00 00 00 00 40 1d 6f 19 80 00000010: 02 01 03 82 01 01 83 02 00 06 85 01 00 86 09 00 00000020: 01 01 01 01 01 01 01 01 90 00 35 [22008 ms] >>> URB 93 going down >>> # read first 0x70 bytes of 0006 00000000: 6f 09 00 00 00 00 2b 00 00 00 00 00 05 00 b0 00 00000010: 00 70 c5 [22009 ms] <<< URB 93 coming back <<< [22009 ms] >>> URB 94 going down >>> [22027 ms] <<< URB 94 coming back <<< # response, requested bytes 00000000: 80 76 00 00 00 00 2b 00 00 00 00 00 72 30 41 04 00000010: 24 33 33 31 31 64 31 66 32 2d 35 32 64 33 2d 34 00000020: 37 35 61 2d 38 62 39 65 2d 39 34 34 34 64 64 36 00000030: 32 62 62 62 39 04 04 00 00 00 01 04 04 00 00 00 00000040: 04 04 04 00 00 00 00 04 04 00 00 00 00 04 01 00 00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 e1 [22028 ms] >>> URB 95 going down >>> # read second 0x70 bytes of 0006 00000000: 6f 09 00 00 00 00 2c 00 00 00 00 40 05 00 b0 00 00000010: 70 70 f5 [22029 ms] <<< URB 95 coming back <<< [22029 ms] >>> URB 96 going down >>> [22047 ms] <<< URB 96 coming back <<< # response, requested bytes 00000000: 80 76 00 00 00 00 2c 00 00 00 00 40 72 00 00 00 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 a2 [22047 ms] >>> URB 97 going down >>> # read last 0x23 bytes of 0006 00000000: 6f 09 00 00 00 00 2d 00 00 00 00 00 05 00 b0 00 00000010: e0 23 76 [22048 ms] <<< URB 97 coming back <<< [22048 ms] >>> URB 98 going down >>> [22058 ms] <<< URB 98 coming back <<< # response, requested bytes 00000000: 80 29 00 00 00 00 2d 00 00 00 00 00 25 00 00 00 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000030: 90 00 b5 [22311 ms] >>> URB 99 going down >>> # go back to 3f002000 00000000: 6f 11 00 00 00 00 2e 00 00 00 00 40 0d 00 a4 04 00000010: 0c 08 d2 76 00 00 98 c0 00 00 15 [22312 ms] <<< URB 99 coming back <<< [22312 ms] >>> URB 100 going down >>> [22324 ms] <<< URB 100 coming back <<< # response OK 00000000: 80 06 00 00 00 00 2e 00 00 00 00 40 02 90 00 d2 [22324 ms] >>> URB 101 going down >>> # cd to 3f0020002001 and ask for fist page, again 00000000: 6f 0c 00 00 00 00 2f 00 00 00 00 00 08 00 a4 01 00000010: 00 02 20 01 00 8e [22325 ms] <<< URB 101 coming back <<< [22325 ms] >>> URB 102 going down >>> [22348 ms] <<< URB 102 coming back <<< # response: first page of 3f0020002001 00000000: 80 28 00 00 00 00 2f 00 00 00 00 00 24 6f 20 81 00000010: 02 02 00 82 06 38 b5 00 fe 00 00 83 02 20 01 85 00000020: 03 00 65 0a 86 09 00 ff 01 01 01 ff 01 01 01 90 00000030: 00 4b [22348 ms] >>> URB 103 going down >>> # open DF 0004 which contains private key 00000000: 6f 0c 00 00 00 00 30 00 00 00 00 40 08 00 a4 01 00000010: 00 02 00 04 00 eb [22350 ms] <<< URB 103 coming back <<< [22350 ms] >>> URB 104 going down >>> [22373 ms] <<< URB 104 coming back <<< # first page of private key 'directory' 00000000: 80 28 00 00 00 00 30 00 00 00 00 40 24 6f 20 81 00000010: 02 04 00 82 06 38 b5 00 fe 00 02 83 02 00 04 85 00000020: 03 00 65 0a 86 09 00 01 01 01 01 01 01 01 01 90 00000030: 00 2a [22373 ms] >>> URB 105 going down >>> # get info from private key file, 3f002000200100040001 00000000: 6f 0c 00 00 00 00 31 00 00 00 00 00 08 00 a4 02 00000010: 00 02 00 01 00 ad [22375 ms] <<< URB 105 coming back <<< [22375 ms] >>> URB 106 going down >>> [22394 ms] <<< URB 106 coming back <<< # contains key type? number of bits? any useful info? 00000000: 80 24 00 00 00 00 31 00 00 00 00 00 20 6f 1c 80 00000010: 02 01 2c 82 06 05 b5 00 fe 00 02 83 02 00 01 85 00000020: 01 00 86 07 00 00 00 ff ff 00 00 90 00 21 [22394 ms] >>> URB 107 going down >>> # read records of private key, read P1 record 1 (first record) # seems to ask for 0 bytes 00000000: 6f 09 00 00 00 00 32 00 00 00 00 40 05 00 b2 01 00000010: 04 00 f2 [22396 ms] <<< URB 107 coming back <<< [22396 ms] >>> URB 108 going down >>> [22409 ms] <<< URB 108 coming back <<< # response: first record P1 of private key 00000000: 80 4a 00 00 00 00 32 00 00 00 00 40 46 10 42 41 00000010: 00 87 dd 37 ef 6d 29 c0 27 1f 34 45 bd e0 e0 33 00000020: e1 1e 66 4d ba d8 cf 20 c0 14 b2 48 98 03 0e f6 00000030: 84 14 eb 71 17 c1 89 04 7c f7 c5 f6 60 57 64 9d 00000040: d8 30 5c cc 56 67 23 18 f5 a9 80 f2 cd 4b 96 e2 00000050: 79 90 00 a0 [22410 ms] >>> URB 109 going down >>> # read records of private key, read P1 record 2 (second record) # seems to ask for 0 bytes 00000000: 6f 09 00 00 00 00 33 00 00 00 00 00 05 00 b2 02 00000010: 04 00 b1 [22411 ms] <<< URB 109 coming back <<< [22411 ms] >>> URB 110 going down >>> [22418 ms] <<< URB 110 coming back <<< # response: second record P1 of private key 00000000: 80 0d 00 00 00 00 33 00 00 00 00 00 09 11 05 04 00000010: 00 c5 69 45 90 00 60 [22419 ms] >>> URB 111 going down >>> # go back to 3f002000 00000000: 6f 11 00 00 00 00 34 00 00 00 00 40 0d 00 a4 04 00000010: 0c 08 d2 76 00 00 98 c0 00 00 15 [22420 ms] <<< URB 111 coming back <<< [22420 ms] >>> URB 112 going down >>> [22432 ms] <<< URB 112 coming back <<< # response OK 00000000: 80 06 00 00 00 00 34 00 00 00 00 40 02 90 00 d2 [22432 ms] >>> URB 113 going down >>> # switch to 3f0020002001 00000000: 6f 0c 00 00 00 00 35 00 00 00 00 00 08 00 a4 01 00000010: 00 02 20 01 00 8e [22433 ms] <<< URB 113 coming back <<< [22433 ms] >>> URB 114 going down >>> [22456 ms] <<< URB 114 coming back <<< # reponse contains 'first page' 00000000: 80 28 00 00 00 00 35 00 00 00 00 00 24 6f 20 81 00000010: 02 02 00 82 06 38 b5 00 fe 00 00 83 02 20 01 85 00000020: 03 00 65 0a 86 09 00 ff 01 01 01 ff 01 01 01 90 00000030: 00 4b [22456 ms] >>> URB 115 going down >>> # yet again got to private key 'directory' 00000000: 6f 0c 00 00 00 00 36 00 00 00 00 40 08 00 a4 01 00000010: 00 02 00 04 00 eb [22458 ms] <<< URB 115 coming back <<< [22458 ms] >>> URB 116 going down >>> [22481 ms] <<< URB 116 coming back <<< # get first page of this 'directory' (2nd time) 00000000: 80 28 00 00 00 00 36 00 00 00 00 40 24 6f 20 81 00000010: 02 04 00 82 06 38 b5 00 fe 00 02 83 02 00 04 85 00000020: 03 00 65 0a 86 09 00 01 01 01 01 01 01 01 01 90 00000030: 00 2a [22481 ms] >>> URB 117 going down >>> # select private key file again, and ask for 'first page' 00000000: 6f 0c 00 00 00 00 37 00 00 00 00 00 08 00 a4 02 00000010: 00 02 00 01 00 ad [22483 ms] <<< URB 117 coming back <<< [22483 ms] >>> URB 118 going down >>> [22502 ms] <<< URB 118 coming back <<< # response again first page 00000000: 80 24 00 00 00 00 37 00 00 00 00 00 20 6f 1c 80 00000010: 02 01 2c 82 06 05 b5 00 fe 00 02 83 02 00 01 85 00000020: 01 00 86 07 00 00 00 ff ff 00 00 90 00 21 [22502 ms] >>> URB 119 going down >>> # read records of private key, read P1 record 1 (first record) # seems to ask for 0 bytes 00000000: 6f 09 00 00 00 00 38 00 00 00 00 40 05 00 b2 01 00000010: 04 00 f2 [22503 ms] <<< URB 119 coming back <<< [22503 ms] >>> URB 120 going down >>> [22517 ms] <<< URB 120 coming back <<< # response: first record P1 of private key (AGAIN) 00000000: 80 4a 00 00 00 00 38 00 00 00 00 40 46 10 42 41 00000010: 00 87 dd 37 ef 6d 29 c0 27 1f 34 45 bd e0 e0 33 00000020: e1 1e 66 4d ba d8 cf 20 c0 14 b2 48 98 03 0e f6 00000030: 84 14 eb 71 17 c1 89 04 7c f7 c5 f6 60 57 64 9d 00000040: d8 30 5c cc 56 67 23 18 f5 a9 80 f2 cd 4b 96 e2 00000050: 79 90 00 a0 [22517 ms] >>> URB 121 going down >>> # read records of private key, read P1 record 2 (first record) # seems to ask for 0 bytes 00000000: 6f 09 00 00 00 00 39 00 00 00 00 00 05 00 b2 02 00000010: 04 00 b1 [22518 ms] <<< URB 121 coming back <<< [22518 ms] >>> URB 122 going down >>> [22525 ms] <<< URB 122 coming back <<< # response: second record P1 of private key 00000000: 80 0d 00 00 00 00 39 00 00 00 00 00 09 11 05 04 00000010: 00 c5 69 45 90 00 60 # this concludes the stuf run at insertion of the token, it seems # to look at some files, but this probably doesn't change the internal # state of the token # here the browser is talking to the token [33243 ms] >>> URB 123 going down >>> # goto 3f002000 (the DF name is learned in the init phase) 00000000: 6f 11 00 00 00 00 3a 00 00 00 00 40 0d 00 a4 04 00000010: 0c 08 d2 76 00 00 98 c0 00 00 15 [33243 ms] <<< URB 123 coming back <<< [33247 ms] >>> URB 124 going down >>> [33256 ms] <<< URB 124 coming back <<< # response OK 00000000: 80 06 00 00 00 00 3a 00 00 00 00 40 02 90 00 d2 [33257 ms] >>> URB 125 going down >>> # verify user PIN 1234 (not my real pin, of course) 00000000: 6f 0d 00 00 00 00 3b 00 00 00 00 00 09 00 20 00 00000010: 81 04 31 32 33 34 86 [33258 ms] <<< URB 125 coming back <<< [33259 ms] >>> URB 126 going down >>> [33312 ms] <<< URB 126 coming back <<< # response OK (user pin verification doesn't work in the root 3f00) 00000000: 80 06 00 00 00 00 3b 00 00 00 00 00 02 90 00 92 [33337 ms] >>> URB 127 going down >>> # goto 3f002000, why? since we are already there 00000000: 6f 11 00 00 00 00 3c 00 00 00 00 40 0d 00 a4 04 00000010: 0c 08 d2 76 00 00 98 c0 00 00 15 [33337 ms] <<< URB 127 coming back <<< [33338 ms] >>> URB 128 going down >>> [33348 ms] <<< URB 128 coming back <<< # response OK 00000000: 80 06 00 00 00 00 3c 00 00 00 00 40 02 90 00 d2 [33349 ms] >>> URB 129 going down >>> # cd 3f0020002001 and ask for 'first page' 00000000: 6f 0c 00 00 00 00 3d 00 00 00 00 00 08 00 a4 01 00000010: 00 02 20 01 00 8e [33349 ms] <<< URB 129 coming back <<< [33350 ms] >>> URB 130 going down >>> [33372 ms] <<< URB 130 coming back <<< # and here it is, just as in init phase 00000000: 80 28 00 00 00 00 3d 00 00 00 00 00 24 6f 20 81 00000010: 02 02 00 82 06 38 b5 00 fe 00 00 83 02 20 01 85 00000020: 03 00 65 0a 86 09 00 ff 01 01 01 ff 01 01 01 90 00000030: 00 4b [33373 ms] >>> URB 131 going down >>> # cd private key 'directory' 3f00200020010004 00000000: 6f 0c 00 00 00 00 3e 00 00 00 00 40 08 00 a4 01 00000010: 00 02 00 04 00 eb [33374 ms] <<< URB 131 coming back <<< [33375 ms] >>> URB 132 going down >>> [33397 ms] <<< URB 132 coming back <<< # again first page 00000000: 80 28 00 00 00 00 3e 00 00 00 00 40 24 6f 20 81 00000010: 02 04 00 82 06 38 b5 00 fe 00 02 83 02 00 04 85 00000020: 03 00 65 0a 86 09 00 01 01 01 01 01 01 01 01 90 00000030: 00 2a [33398 ms] >>> URB 133 going down >>> # select private key file and ask for first page 00000000: 6f 0c 00 00 00 00 3f 00 00 00 00 00 08 00 a4 02 00000010: 00 02 00 01 00 ad [33398 ms] <<< URB 133 coming back <<< [33399 ms] >>> URB 134 going down >>> [33419 ms] <<< URB 134 coming back <<< # return first page 00000000: 80 24 00 00 00 00 3f 00 00 00 00 00 20 6f 1c 80 00000010: 02 01 2c 82 06 05 b5 00 fe 00 02 83 02 00 01 85 00000020: 01 00 86 07 00 00 00 ff ff 00 00 90 00 21 [33419 ms] >>> URB 135 going down >>> # read records of private key, read P1 record 1 (first record) # seems to ask for 0 bytes 00000000: 6f 09 00 00 00 00 40 00 00 00 00 40 05 00 b2 01 00000010: 04 00 f2 [33420 ms] <<< URB 135 coming back <<< [33421 ms] >>> URB 136 going down >>> [33433 ms] <<< URB 136 coming back <<< # response: first record P1 of private key (AGAIN) 00000000: 80 4a 00 00 00 00 40 00 00 00 00 40 46 10 42 41 00000010: 00 87 dd 37 ef 6d 29 c0 27 1f 34 45 bd e0 e0 33 00000020: e1 1e 66 4d ba d8 cf 20 c0 14 b2 48 98 03 0e f6 00000030: 84 14 eb 71 17 c1 89 04 7c f7 c5 f6 60 57 64 9d 00000040: d8 30 5c cc 56 67 23 18 f5 a9 80 f2 cd 4b 96 e2 00000050: 79 90 00 a0 [33438 ms] >>> URB 137 going down >>> # read records of private key, read P1 record 2 (second record) # seems to ask for 0 bytes 00000000: 6f 09 00 00 00 00 41 00 00 00 00 00 05 00 b2 02 00000010: 04 00 b1 [33439 ms] <<< URB 137 coming back <<< [33440 ms] >>> URB 138 going down >>> [33446 ms] <<< URB 138 coming back <<< # response: second record P1 of private key (AGAIN) 00000000: 80 0d 00 00 00 00 41 00 00 00 00 00 09 11 05 04 00000010: 00 c5 69 45 90 00 60 # what was the use of this execise? # now start over again [33452 ms] >>> URB 139 going down >>> # cd 3f002000 (using DF name) 00000000: 6f 11 00 00 00 00 42 00 00 00 00 40 0d 00 a4 04 00000010: 0c 08 d2 76 00 00 98 c0 00 00 15 [33453 ms] <<< URB 139 coming back <<< [33454 ms] >>> URB 140 going down >>> [33466 ms] <<< URB 140 coming back <<< # response OK 00000000: 80 06 00 00 00 00 42 00 00 00 00 40 02 90 00 d2 [33466 ms] >>> URB 141 going down >>> # cd 3f0020002001 and ask for first case 00000000: 6f 0c 00 00 00 00 43 00 00 00 00 00 08 00 a4 01 00000010: 00 02 20 01 00 8e [33467 ms] <<< URB 141 coming back <<< [33468 ms] >>> URB 142 going down >>> [33490 ms] <<< URB 142 coming back <<< # resonse contains first page of 3f0020002001 00000000: 80 28 00 00 00 00 43 00 00 00 00 00 24 6f 20 81 00000010: 02 02 00 82 06 38 b5 00 fe 00 00 83 02 20 01 85 00000020: 03 00 65 0a 86 09 00 ff 01 01 01 ff 01 01 01 90 00000030: 00 4b [33494 ms] >>> URB 143 going down >>> # cd to private key directory 00000000: 6f 0c 00 00 00 00 44 00 00 00 00 40 08 00 a4 01 00000010: 00 02 00 04 00 eb [33494 ms] <<< URB 143 coming back <<< [33495 ms] >>> URB 144 going down >>> [33517 ms] <<< URB 144 coming back <<< # again: first page of private key directory 00000000: 80 28 00 00 00 00 44 00 00 00 00 40 24 6f 20 81 00000010: 02 04 00 82 06 38 b5 00 fe 00 02 83 02 00 04 85 00000020: 03 00 65 0a 86 09 00 01 01 01 01 01 01 01 01 90 00000030: 00 2a [33519 ms] >>> URB 145 going down >>> # select private key 00000000: 6f 0c 00 00 00 00 45 00 00 00 00 00 08 00 a4 02 00000010: 00 02 00 01 00 ad [33519 ms] <<< URB 145 coming back <<< [33520 ms] >>> URB 146 going down >>> [33539 ms] <<< URB 146 coming back <<< # first page of private key file 00000000: 80 24 00 00 00 00 45 00 00 00 00 00 20 6f 1c 80 00000010: 02 01 2c 82 06 05 b5 00 fe 00 02 83 02 00 01 85 00000020: 01 00 86 07 00 00 00 ff ff 00 00 90 00 21 [33540 ms] >>> URB 147 going down >>> # read records of private key, read P1 record 1 (first record) # seems to ask for 0 bytes 00000000: 6f 09 00 00 00 00 46 00 00 00 00 40 05 00 b2 01 00000010: 04 00 f2 [33540 ms] <<< URB 147 coming back <<< [33541 ms] >>> URB 148 going down >>> [33554 ms] <<< URB 148 coming back <<< # response: first record P1 of private key (AGAIN) 00000000: 80 4a 00 00 00 00 46 00 00 00 00 40 46 10 42 41 00000010: 00 87 dd 37 ef 6d 29 c0 27 1f 34 45 bd e0 e0 33 00000020: e1 1e 66 4d ba d8 cf 20 c0 14 b2 48 98 03 0e f6 00000030: 84 14 eb 71 17 c1 89 04 7c f7 c5 f6 60 57 64 9d 00000040: d8 30 5c cc 56 67 23 18 f5 a9 80 f2 cd 4b 96 e2 00000050: 79 90 00 a0 [33555 ms] >>> URB 149 going down >>> # read records of private key, read P1 record 2 (second record) # seems to ask for 0 bytes 00000000: 6f 09 00 00 00 00 47 00 00 00 00 00 05 00 b2 02 00000010: 04 00 b1 [33555 ms] <<< URB 149 coming back <<< [33556 ms] >>> URB 150 going down >>> [33562 ms] <<< URB 150 coming back <<< # response: second record P1 of private key (yet AGAIN) 00000000: 80 0d 00 00 00 00 47 00 00 00 00 00 09 11 05 04 00000010: 00 c5 69 45 90 00 60 # this we have done three times now, first without PIN, then with PIN and # the last time without PIN, maybe need to make sure if there are differences # in the responses of the token [33564 ms] >>> URB 151 going down >>> # cd 3f002000 using 'DF name' 00000000: 6f 11 00 00 00 00 48 00 00 00 00 40 0d 00 a4 04 00000010: 0c 08 d2 76 00 00 98 c0 00 00 15 [33564 ms] <<< URB 151 coming back <<< [33565 ms] >>> URB 152 going down >>> [33577 ms] <<< URB 152 coming back <<< # response OK 00000000: 80 06 00 00 00 00 48 00 00 00 00 40 02 90 00 d2 [33578 ms] >>> URB 153 going down >>> # verify PIN 1234 00000000: 6f 0d 00 00 00 00 49 00 00 00 00 00 09 00 20 00 00000010: 81 04 31 32 33 34 86 [33579 ms] <<< URB 153 coming back <<< [33580 ms] >>> URB 154 going down >>> [33632 ms] <<< URB 154 coming back <<< # response OK 00000000: 80 06 00 00 00 00 49 00 00 00 00 00 02 90 00 92 [33633 ms] >>> URB 155 going down >>> # cd 3f002000 using 'DF name' 00000000: 6f 11 00 00 00 00 4a 00 00 00 00 40 0d 00 a4 04 00000010: 0c 08 d2 76 00 00 98 c0 00 00 15 [33634 ms] <<< URB 155 coming back <<< [33635 ms] >>> URB 156 going down >>> [33645 ms] <<< URB 156 coming back <<< # response OK 00000000: 80 06 00 00 00 00 4a 00 00 00 00 40 02 90 00 d2 [33646 ms] >>> URB 157 going down >>> # cd 3f0020002001 and ask for first page 00000000: 6f 0c 00 00 00 00 4b 00 00 00 00 00 08 00 a4 01 00000010: 00 02 20 01 00 8e [33646 ms] <<< URB 157 coming back <<< [33647 ms] >>> URB 158 going down >>> [33669 ms] <<< URB 158 coming back <<< # first page of 3f0020002001 (which we already say a lot of times) 00000000: 80 28 00 00 00 00 4b 00 00 00 00 00 24 6f 20 81 00000010: 02 02 00 82 06 38 b5 00 fe 00 00 83 02 20 01 85 00000020: 03 00 65 0a 86 09 00 ff 01 01 01 ff 01 01 01 90 00000030: 00 4b [33670 ms] >>> URB 159 going down >>> # select private key directory, ask for first page 00000000: 6f 0c 00 00 00 00 4c 00 00 00 00 40 08 00 a4 01 00000010: 00 02 00 04 00 eb [33670 ms] <<< URB 159 coming back <<< [33671 ms] >>> URB 160 going down >>> [33694 ms] <<< URB 160 coming back <<< # yet again first page 00000000: 80 28 00 00 00 00 4c 00 00 00 00 40 24 6f 20 81 00000010: 02 04 00 82 06 38 b5 00 fe 00 02 83 02 00 04 85 00000020: 03 00 65 0a 86 09 00 01 01 01 01 01 01 01 01 90 00000030: 00 2a [33695 ms] >>> URB 161 going down >>> # APDU: 00:22:03:40:00 proprietary command (probably needed # for proper signing) 00000000: 6f 09 00 00 00 00 4d 00 00 00 00 00 05 00 22 03 00000010: 40 00 64 [33696 ms] <<< URB 161 coming back <<< [33697 ms] >>> URB 162 going down >>> [33702 ms] <<< URB 162 coming back <<< # resonse OK 00000000: 80 06 00 00 00 00 4d 00 00 00 00 00 02 90 00 92 [33703 ms] >>> URB 163 going down >>> # APDU: 00:22:f1:b8:03:83:01:01:00, gives three byte data 83 01 01 # to the card and expects no bytes in return (what could those bytes mean) 00000000: 6f 0d 00 00 00 00 4e 00 00 00 00 40 09 00 22 f1 00000010: b8 03 83 01 01 00 a2 [33703 ms] <<< URB 163 coming back <<< [33704 ms] >>> URB 164 going down >>> [33709 ms] <<< URB 164 coming back <<< # response OK 00000000: 80 06 00 00 00 00 4e 00 00 00 00 40 02 90 00 d2 [33710 ms] >>> URB 165 going down >>> # SIGN: ins=0x2a, p1=80, p2=86 amount of data to be signed is 0x40 bytes # since we seem to have a 512 bit rsa key (which is not very big) # 00 01 ff ff ff ff ff ff ff ff ff ff ff ff ff ff # ff ff ff ff ff ff ff ff ff ff ff 00 71 b9 35 86 # c6 e9 5d ee e3 4a ae 9c a2 5e 94 db 86 22 7f bf # 13 94 17 b4 52 38 ae b5 46 bf c5 80 61 dd 89 b7 00000000: 6f 4b 00 00 00 00 4f 00 00 00 00 00 47 00 2a 80 00000010: 86 41 00 00 01 ff ff ff ff ff ff ff ff ff ff ff 00000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00 71 00000030: b9 35 86 c6 e9 5d ee e3 4a ae 9c a2 5e 94 db 86 00000040: 22 7f bf 13 94 17 b4 52 38 ae b5 46 bf c5 80 61 00000050: dd 89 b7 00 14 [33712 ms] <<< URB 165 coming back <<< [33713 ms] >>> URB 166 going down >>> [33818 ms] <<< URB 166 coming back <<< # response contains signature # 17 f1 a0 cc ce 8d 3a 15 e0 b9 da d6 42 2d bf 0c # a5 3a cd a4 a6 09 b5 95 87 a4 5a 7a 6b 69 12 50 # e8 29 aa 39 c8 ec 9e af 9d 3a 4a 3d 4b 6f 1a 93 # a8 e8 b7 d7 98 5a e1 f7 9e 83 a3 81 15 7c 77 d6 # 00000000: 80 46 00 00 00 00 4f 00 00 00 00 00 42 17 f1 a0 00000010: cc ce 8d 3a 15 e0 b9 da d6 42 2d bf 0c a5 3a cd 00000020: a4 a6 09 b5 95 87 a4 5a 7a 6b 69 12 50 e8 29 aa 00000030: 39 c8 ec 9e af 9d 3a 4a 3d 4b 6f 1a 93 a8 e8 b7 00000040: d7 98 5a e1 f7 9e 83 a3 81 15 7c 77 d6 90 00 be [41906 ms] <<< URB 10 coming back <<< # # I am able to verify this signature using the public key stored in the # certificate in 3f00200020010008 # # For now I assume the minimal way to get a signature to be: # # go to root 3F00 opensc-tool --send-apdu 00:a4:00:0c:02:3f:00 # go to 3F002000 opensc-tool --send-apdu 00:a4:01:00:02:20:00:00 # verify PIN 1234 opensc-tool --send-apdu 00:20:00:81:04:31:32:33:34 # go to 3F0020002001 opensc-tool --send-apdu 00:a4:01:00:02:20:00:00 # select private key directory opensc-tool --send-apdu 00:a4:01:00:02:00:04:00 # frobnicate foo opensc-tool --send-apdu 00:22:03:40:00 # frobnicate bar opensc-tool --send-apdu 00:22:f1:b8:03:83:01:01:00 # sign opensc-tool --send-apdu 00:2a:80:86:41:00:00:01:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:00:71:b9:35:86:c6:e9:5d:ee:e3:4a:ae:9c:a2:5e:94:db:86:22:7f:bf:13:94:17:b4:52:38:ae:b5:46:bf:c5:80:61:dd:89:b7:00 # # this script indeed generates the same signature as shown in the usb # after a fresh plug in.