diff --git a/scd/apdu.c b/scd/apdu.c index 293849d94..58f607500 100644 --- a/scd/apdu.c +++ b/scd/apdu.c @@ -1745,21 +1745,30 @@ pcsc_vendor_specific_init (int slot) } } - /* - * For system which doesn't support GET_TLV_PROPERTIES, - * we put some heuristics here. - */ - if (reader_table[slot].rdrname - && strstr (reader_table[slot].rdrname, "SPRx32")) + if (get_tlv_ioctl == (pcsc_dword_t)-1) { - reader_table[slot].is_spr532 = 1; - reader_table[slot].pinpad_varlen_supported = 1; + /* + * For system which doesn't support GET_TLV_PROPERTIES, + * we put some heuristics here. + */ + if (reader_table[slot].rdrname) + { + if (strstr (reader_table[slot].rdrname, "SPRx32")) + { + reader_table[slot].is_spr532 = 1; + reader_table[slot].pinpad_varlen_supported = 1; + } + else if (strstr (reader_table[slot].rdrname, "ST-2xxx") + || strstr (reader_table[slot].rdrname, "cyberJack") + || strstr (reader_table[slot].rdrname, "DIGIPASS") + || strstr (reader_table[slot].rdrname, "Gnuk") + || strstr (reader_table[slot].rdrname, "KAAN")) + reader_table[slot].pinpad_varlen_supported = 1; + } + return 0; } - if (get_tlv_ioctl == (pcsc_dword_t)-1) - return 0; - len = sizeof (buf); sw = control_pcsc (slot, get_tlv_ioctl, NULL, 0, buf, &len); if (sw) @@ -1815,6 +1824,12 @@ pcsc_vendor_specific_init (int slot) reader_table[slot].is_spr532 = 1; reader_table[slot].pinpad_varlen_supported = 1; } + else if (vendor == 0x046a && product == 0x003e /* Cherry ST-2xxx */ + || vendor == 0x0c4b /* Tested with Reiner cyberJack GO */ + || vendor == 0x1a44 /* Tested with Vasco DIGIPASS 920 */ + || vendor == 0x234b /* Tested with FSIJ Gnuk Token */ + || vendor == 0x0d46 /* Tested with KAAN Advanced??? */) + reader_table[slot].pinpad_varlen_supported = 1; return 0; }