From a63fddad6808763e2916d0e7e6972ed025a0f336 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Thu, 17 Sep 2015 11:21:44 +0900 Subject: scd: Fix ccid-driver timeout for OpenPGPcard v2.1. * scd/ccid-driver.c (CCID_CMD_TIMEOUT): New. (ccid_transceive_apdu_level, ccid_transceive): Use. -- It is reported that key generation causes timeout with OpenPGPcard v2.1. Ideally, timeout value could be determined at run-time by examining card's ATR. Compile-time fixed value is OK for internal CCID driver. (cherry-picked from 2.1 6510df3a7cd2b5bf44fac1e4d50ee54b8c897daa) --- scd/ccid-driver.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c index 8a68a443f..8f9c1bd33 100644 --- a/scd/ccid-driver.c +++ b/scd/ccid-driver.c @@ -109,6 +109,9 @@ */ #define CCID_MAX_BUF (2048+7+10) +/* CCID command timeout. OpenPGPcard v2.1 requires timeout of 13 seconds. */ +#define CCID_CMD_TIMEOUT (13*1000) + /* Depending on how this source is used we either define our error output to go to stderr or to the jnlib based logging functions. We use the latter when GNUPG_MAJOR_VERSION is defines or when both, @@ -2885,7 +2888,7 @@ ccid_transceive_apdu_level (ccid_driver_t handle, apdu_len -= apdu_part_len; rc = bulk_in (handle, msg, sizeof msg, &msglen, - RDR_to_PC_DataBlock, seqno, 5000, 0); + RDR_to_PC_DataBlock, seqno, CCID_CMD_TIMEOUT, 0); if (rc) return rc; @@ -2920,7 +2923,7 @@ ccid_transceive_apdu_level (ccid_driver_t handle, return rc; rc = bulk_in (handle, msg, sizeof msg, &msglen, - RDR_to_PC_DataBlock, seqno, 5000, 0); + RDR_to_PC_DataBlock, seqno, CCID_CMD_TIMEOUT, 0); if (rc) return rc; } @@ -3129,7 +3132,7 @@ ccid_transceive (ccid_driver_t handle, msg = recv_buffer; rc = bulk_in (handle, msg, sizeof recv_buffer, &msglen, via_escape? RDR_to_PC_Escape : RDR_to_PC_DataBlock, - seqno, 5000, 0); + seqno, CCID_CMD_TIMEOUT, 0); if (rc) return rc; -- cgit v1.2.3