diff --git a/scd/apdu.c b/scd/apdu.c index 72b291e8f..a2880f815 100644 --- a/scd/apdu.c +++ b/scd/apdu.c @@ -1784,8 +1784,12 @@ pcsc_vendor_specific_init (int slot) 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") + else if (strstr (reader_table[slot].rdrname, "ST-2xxx")) + { + reader_table[slot].pcsc.pinmax = 15; + reader_table[slot].pinpad_varlen_supported = 1; + } + else if (strstr (reader_table[slot].rdrname, "cyberJack") || strstr (reader_table[slot].rdrname, "DIGIPASS") || strstr (reader_table[slot].rdrname, "Gnuk") || strstr (reader_table[slot].rdrname, "KAAN")) @@ -1850,8 +1854,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 */ + else if (vendor == 0x046a && product == 0x003e) /* Cherry ST-2xxx */ + { + reader_table[slot].pcsc.pinmax = 15; + reader_table[slot].pinpad_varlen_supported = 1; + } + else if (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??? */) diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c index 490569f14..8a68a443f 100644 --- a/scd/ccid-driver.c +++ b/scd/ccid-driver.c @@ -3355,6 +3355,7 @@ ccid_transceive_secure (ccid_driver_t handle, size_t dummy_nresp; int testmode; int cherry_mode = 0; + int add_zero = 0; int enable_varlen = 0; testmode = !resp && !nresp; @@ -3396,7 +3397,7 @@ ccid_transceive_secure (ccid_driver_t handle, enable_varlen = 1; break; case VENDOR_CHERRY: - pininfo->maxlen = 25; + pininfo->maxlen = 15; enable_varlen = 1; /* The CHERRY XX44 keyboard echos an asterisk for each entered character on the keyboard channel. We use a special variant @@ -3405,6 +3406,7 @@ ccid_transceive_secure (ccid_driver_t handle, Lc byte to the APDU. It seems that it will be replaced with the actual length instead of being appended before the APDU is send to the card. */ + add_zero = 1; if (handle->id_product != CHERRY_ST2000) cherry_mode = 1; break; @@ -3527,7 +3529,7 @@ ccid_transceive_secure (ccid_driver_t handle, msg[msglen++] = apdu_buf[1]; /* INS */ msg[msglen++] = apdu_buf[2]; /* P1 */ msg[msglen++] = apdu_buf[3]; /* P2 */ - if (cherry_mode) + if (add_zero) msg[msglen++] = 0; else if (pininfo->fixedlen != 0) {