Untested fix for TPDU level exchange of large data (command chaining)
authorWerner Koch <wk@gnupg.org>
Tue, 23 Sep 2008 10:36:09 +0000 (10:36 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 23 Sep 2008 10:36:09 +0000 (10:36 +0000)
scd/ChangeLog
scd/ccid-driver.c

index d9ad2bf..2de918b 100644 (file)
@@ -9,6 +9,7 @@
        (send_le): Implement command chaining.
        * ccid-driver.c (ccid_transceive_apdu_level): Increase allowed
        APDU size.
+       (ccid_transceive): Alow for APDUS of up to 259 bytes.
        * apdu.h: Add new SW_ codes.
 
 2008-09-16  Werner Koch  <wk@g10code.com>
index 899f7ae..52a3979 100644 (file)
@@ -1971,8 +1971,9 @@ ccid_transceive_apdu_level (ccid_driver_t handle,
   apdulen = apdu_buflen;
   assert (apdulen);
 
-  /* The maximum length for a short APDU T=1 block is 261, for an
-     extra APDU T=1 block is 65544.  */
+  /* The maximum length for a short APDU T=1 block is 261.  For an
+     extended APDU T=1 block the maximum length 65544; however
+     extended APDU exchange levele is not yet supported.  */
   if (apdulen > 261)
     return CCID_DRIVER_ERR_INV_VALUE; /* Invalid length. */
 
@@ -2119,8 +2120,11 @@ ccid_transceive (ccid_driver_t handle,
           assert (apdulen);
 
           /* Construct an I-Block. */
-#warning fixme: APDULEN may be larger
-          if (apdulen > 254)
+          /* Fixme: I am not sure whether limiting the length to 259
+             as per CCID spec is required.  The code blow chops the
+             APDU anyway into 128 byte blocks.  Needs to be addressed
+             when supporting extended length APDUs. */
+          if (apdulen > 259)
             return CCID_DRIVER_ERR_INV_VALUE; /* Invalid length. */
 
           tpdu = msg+10;