scd: Handle CCID bwi of time extension.
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 25 Jul 2019 00:16:46 +0000 (09:16 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 25 Jul 2019 00:16:46 +0000 (09:16 +0900)
* scd/ccid-driver.c (bulk_in): Increase timeout by the multiplier
value as defined section 6.2.6 in CCID specification.

--

For TPDU level transfer, it was handled.  This is fix for APDU level
transfer.

GnuPG-bug-id: 4646
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
scd/ccid-driver.c

index 54f7b13..170f366 100644 (file)
@@ -1940,6 +1940,7 @@ bulk_in (ccid_driver_t handle, unsigned char *buffer, size_t length,
   int rc;
   int msglen;
   int notified = 0;
+  int bwi = 1;
 
   /* Fixme: The next line for the current Valgrind without support
      for USB IOCTLs. */
@@ -1950,7 +1951,7 @@ bulk_in (ccid_driver_t handle, unsigned char *buffer, size_t length,
   npth_unprotect ();
 #endif
   rc = libusb_bulk_transfer (handle->idev, handle->ep_bulk_in,
-                             buffer, length, &msglen, timeout);
+                             buffer, length, &msglen, bwi*timeout);
 #ifdef USE_NPTH
   npth_protect ();
 #endif
@@ -1998,6 +1999,10 @@ bulk_in (ccid_driver_t handle, unsigned char *buffer, size_t length,
       DEBUGOUT_2 ("time extension requested (%02X,%02X)\n",
                   buffer[7], buffer[8]);
 
+      bwi = 1;
+      if (buffer[8] != 0 && buffer[8] != 0xff)
+        bwi = buffer[8];
+
       /* Gnuk enhancement to prompt user input by ack button */
       if (buffer[8] == 0xff && !notified)
         {