laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmocore/+/35154?usp=email )
Change subject: libosmsim: Support Microsoft smart card discovery process ...................................................................... libosmsim: Support Microsoft smart card discovery process Our class/instruction tables (used mainly by simtrace cardem host software) only contain support for those instructions permitted in the related card specification. Microsoft blindly tries CLA=0xCA with INS=0x00 which is not somethin that the GSM SIM, ETSI UICC or 3GPP USIM specs specify, and which hence results in log output like this: DLINP DEBUG [0] <= osmo_st2_cardem_request_sw_tx(sw=6a88) DLGLOBAL INFO => DATA: flags=0x01 (HDR ), 00 ca 7f 68 00 DLGLOBAL ERROR Unknown APDU case 0 DLGLOBAL FATAL Failed to recognize APDU, terminating Let's adjust to microsoft and *always* support their instructions no matter which osim_cla_ins_card_profile was used. Special thanks to Eric Wild for pointing me to this unexpected behaviour of PC/SC on modern Windows. Change-Id: I424964c0afab643e6a5d7824d91c2c86b0d3f25b Related: SYS#6617 --- M src/sim/class_tables.c 1 file changed, 45 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/54/35154/1 diff --git a/src/sim/class_tables.c b/src/sim/class_tables.c index 724c077..7c11f3b 100644 --- a/src/sim/class_tables.c +++ b/src/sim/class_tables.c @@ -350,6 +350,13 @@ [0x88] = 4, /* AUTHENTICATE */ }; +/* https://learn.microsoft.com/en-us/windows-hardware/drivers/smartcard/discovery-process */ +static const uint8_t microsoft_discovery_ins_tbl[256] = { + [0xA4] = 4, /* SELECT FILE */ + [0xCA] = 2, /* GET DATA */ + [0xC0] = 2, /* GET RESPONSE */ +}; + int osim_determine_apdu_case(const struct osim_cla_ins_card_profile *prof, const uint8_t *hdr) { @@ -374,5 +381,14 @@ return rc; } } + /* special handling for Microsoft who insists to use INS=0xCA in CLA=0x00 which is not + * really part of GSM SIM, ETSI UICC or 3GPP USIM specifications, but only ISO7816. Rather than adding + * it to each and every card profile, let's add the instructions listed at + * https://learn.microsoft.com/en-us/windows-hardware/drivers/smartcard/discovery-process explicitly + * here. They will only be used in case no more specific match was found in the actual profile above. */ + rc = microsoft_discovery_ins_tbl[ins]; + if (rc) + return rc; + return 0; } -- To view, visit https://gerrit.osmocom.org/c/libosmocore/+/35154?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Change-Id: I424964c0afab643e6a5d7824d91c2c86b0d3f25b Gerrit-Change-Number: 35154 Gerrit-PatchSet: 1 Gerrit-Owner: laforge <lafo...@osmocom.org> Gerrit-MessageType: newchange