diff --git a/src/libopensc/card-cardos.c b/src/libopensc/card-cardos.c index 11603421..dfc75d93 100644 --- a/src/libopensc/card-cardos.c +++ b/src/libopensc/card-cardos.c @@ -53,6 +53,8 @@ static struct sc_atr_table cardos_atrs[] = { { "3b:f2:98:00:ff:c1:10:31:fe:55:c8:04:12", NULL, NULL, SC_CARD_TYPE_CARDOS_GENERIC, 0, NULL }, /* M4.2 */ { "3b:f2:18:00:ff:c1:0a:31:fe:55:c8:06:8a", NULL, NULL, SC_CARD_TYPE_CARDOS_M4_2, 0, NULL }, + /* M4.3 */ + { "3b:f2:18:00:02:c1:0a:31:fe;55:c8:07:76", NULL, NULL, SC_CARD_TYPE_CARDOS_M4_3, 0, NULL }, /* Italian eID card, postecert */ { "3b:e9:00:ff:c1:10:31:fe:55:00:64:05:00:c8:02:31:80:00:47", NULL, NULL, SC_CARD_TYPE_CARDOS_GENERIC, 0, NULL }, /* Italian eID card, infocamere */ diff --git a/src/libopensc/cards.h b/src/libopensc/cards.h index a78f5e1c..de960347 100644 --- a/src/libopensc/cards.h +++ b/src/libopensc/cards.h @@ -40,6 +40,7 @@ enum { SC_CARD_TYPE_CARDOS_BASE = 1000, SC_CARD_TYPE_CARDOS_GENERIC, SC_CARD_TYPE_CARDOS_M4_2, + SC_CARD_TYPE_CARDOS_M4_3, /* flex/cyberflex drivers */ SC_CARD_TYPE_FLEX_BASE = 2000, diff --git a/src/tools/cardos-info.c b/src/tools/cardos-info.c index f148adf7..b891c317 100644 --- a/src/tools/cardos-info.c +++ b/src/tools/cardos-info.c @@ -137,6 +137,8 @@ int cardos_info(void) printf(" (that's CardOS M4.01a)\n"); } else if (apdu.resp[0] == 0xc8 && apdu.resp[1] == 0x06) { printf(" (that's CardOS M4.2)\n"); + } else if (apdu.resp[0] == 0xc8 && apdu.resp[1] == 0x07) { + printf(" (that's CardOS M4.3)\n"); } else if (apdu.resp[0] == 0xc8 && apdu.resp[1] == 0x08) { printf(" (that's CardOS M4.3b)\n"); } else {