diff options
author | NIIBE Yutaka <[email protected]> | 2015-06-22 05:31:25 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2015-06-22 05:31:25 +0000 |
commit | 444e9232aa9e00aacd939cbf7bdb881b550dfebe (patch) | |
tree | 6608405c202192d9dbe2a91366a84037d5c51af2 | |
parent | gpg: Print number of good signatures with --check-sigs. (diff) | |
download | gnupg-444e9232aa9e00aacd939cbf7bdb881b550dfebe.tar.gz gnupg-444e9232aa9e00aacd939cbf7bdb881b550dfebe.zip |
scd: Fix Cherry ST-2000 support for pinpad input.
* scd/apdu.c (pcsc_vendor_specific_init): Set pinmax to 15.
* scd/ccid-driver.c (ccid_transceive_secure): Add zero for the
template of APDU.
--
GnuPG-bug-id: 2003, 2004
Diffstat (limited to '')
-rw-r--r-- | scd/apdu.c | 16 | ||||
-rw-r--r-- | scd/ccid-driver.c | 6 |
2 files changed, 16 insertions, 6 deletions
diff --git a/scd/apdu.c b/scd/apdu.c index 189fd4afa..82b2e1f43 100644 --- a/scd/apdu.c +++ b/scd/apdu.c @@ -1825,8 +1825,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")) @@ -1891,8 +1895,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 4f0a4897e..fe1f67915 100644 --- a/scd/ccid-driver.c +++ b/scd/ccid-driver.c @@ -3316,6 +3316,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; @@ -3357,7 +3358,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 @@ -3366,6 +3367,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; @@ -3488,7 +3490,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) { |