From 2693db33d035d0b99d693d166c9abb2c8fdaa9e4 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 23 Sep 2008 10:36:09 +0000 Subject: Untested fix for TPDU level exchange of large data (command chaining) --- scd/ChangeLog | 1 + scd/ccid-driver.c | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/scd/ChangeLog b/scd/ChangeLog index d9ad2bfb0..2de918bb0 100644 --- a/scd/ChangeLog +++ b/scd/ChangeLog @@ -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 diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c index 899f7ae17..52a397927 100644 --- a/scd/ccid-driver.c +++ b/scd/ccid-driver.c @@ -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; -- cgit v1.2.3