From c581d1b26f7b832d2e57062246d852d997d49721 Mon Sep 17 00:00:00 2001 From: Vincent JARDIN Date: Wed, 3 Feb 2021 21:50:23 +0000 Subject: [PATCH] IASECC/CPX: opensc-explorer asn1 of EF.ATR objects Workaround the parsing of EF.ATR objects, for instance: ./opensc-explorer -r 0 OpenSC [3F00]> cat 2F01 00000000: 80 43 01 B8 46 04 04 B0 EC C1 47 03 94 01 80 4F .C..F.....G....O 00000010: 08 80 25 00 00 01 FF 01 00 E0 10 02 02 01 04 02 ..%............. 00000020: 02 01 04 02 02 01 00 02 02 01 00 78 08 06 06 2B ...........x...+ 00000030: 81 22 F8 78 02 82 02 90 00 .".x..... OpenSC [3F00]> info 2F01 Working Elementary File ID 2F01, SFI E8 File path: 3F00/2F01 File size: 57 bytes EF structure: Transparent ACL for READ: NONE ACL for UPDATE: SecOx45 ACL for DELETE: SecOx45 ACL for WRITE: N/A ACL for REHABILITATE: N/A ACL for INVALIDATE: N/A ACL for LIST FILES: N/A ACL for CRYPTO: N/A Type attributes: 01 Life cycle: Operational, activated In order to avoid adding an offset of 1 for such objects on some OpenSC [3F00]> asn1 2F01 1 specific cards, then, we get: OpenSC [3F00]> asn1 2F01 80 Context 0 (0 bytes) 43 Application 3 (1 byte): decode error: B8 . 46 Application 6 (4 bytes): decode error: 04 B0 EC C1 .... 47 Application 7 (3 bytes): 94 01 80 ... 4F Application 15 (8 bytes): 80 25 00 00 01 FF 01 00 .%...... E0 Private 0 (16 bytes) 02 INTEGER (2 bytes): 260 02 INTEGER (2 bytes): 260 02 INTEGER (2 bytes): 256 02 INTEGER (2 bytes): 256 78 Application 24 (8 bytes) 06 OBJECT IDENTIFIER (6 bytes): 1.3.162.15480.2 82 Context 2 (2 bytes): 36864: 90 00 .. OpenSC [3F00]> which means: ef-atr.c:49:sc_parse_ef_atr_content: EF.ATR: card service 0xB8 ef-atr.c:59:sc_parse_ef_atr_content: EF.ATR: Pre-Issuing data '04B0ECC1' ef-atr.c:67:sc_parse_ef_atr_content: EF.ATR: DF selection 94, unit_size 1, card caps 80 ef-atr.c:95:sc_parse_ef_atr_content: EF.ATR: AID '8025000001FF0100' ef-atr.c:106:sc_parse_ef_atr_content: EF.ATR: Issuer data '02020104020201040202010002020100' ef-atr.c:111:sc_parse_ef_atr_content: EF.ATR: DER encoded OID 06062B8122F87802 ef-atr.c:114:sc_parse_ef_atr_content: EF.ATR: OID 2B8122F87802 ef-atr.c:123:sc_parse_ef_atr_content: EF.ATR: status word 0x9000 Fix: issue #2220 --- src/tools/opensc-explorer.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/tools/opensc-explorer.c b/src/tools/opensc-explorer.c index 532ce0a0..4c5f4a17 100644 --- a/src/tools/opensc-explorer.c +++ b/src/tools/opensc-explorer.c @@ -48,6 +48,7 @@ #include "libopensc/cards.h" #include "libopensc/log.h" #include "libopensc/internal.h" +#include "libopensc/iso7816.h" #include "common/compat_strlcpy.h" #include #include "util.h" @@ -2176,6 +2177,10 @@ static int do_asn1(int argc, char **argv) } } + /* workaround when the issuer of a card does prefix the EF.ATR payload with 0x80 */ + if ((buf[0] == ISO7816_II_CATEGORY_TLV) && + (memcmp(path.value, "\x3f\x00\x2f\x01", 4) == 0)) + offs++; /* if offset does not exceed the length read from file/record, ... */ if (offs <= (unsigned int) r) { /* ... perform the ASN.1 dump */