summaryrefslogtreecommitdiffstats
path: root/scd
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2009-04-01 16:38:22 +0200
committerWerner Koch <wk@gnupg.org>2009-04-01 16:38:22 +0200
commit9d6a2a60c2c3828b20c5b2114ee644515db30cf8 (patch)
treea876f867e6e83afdc528da86decaf2e7be9eb2d7 /scd
parentPorted changes from 1.4. (diff)
downloadgnupg2-9d6a2a60c2c3828b20c5b2114ee644515db30cf8.tar.xz
gnupg2-9d6a2a60c2c3828b20c5b2114ee644515db30cf8.zip
Prepare for OpenPGP cards with extended length support.
Diffstat (limited to 'scd')
-rw-r--r--scd/ChangeLog5
-rw-r--r--scd/app-openpgp.c12
2 files changed, 13 insertions, 4 deletions
diff --git a/scd/ChangeLog b/scd/ChangeLog
index 534a7092b..d54355de5 100644
--- a/scd/ChangeLog
+++ b/scd/ChangeLog
@@ -1,3 +1,8 @@
+2009-04-01 Werner Koch <wk@g10code.com>
+
+ * app-openpgp.c (do_setattr, do_writekey): Prepare for extended
+ length cards.
+
2009-03-31 Werner Koch <wk@g10code.com>
* command.c (percent_plus_unescape): Remove.
diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c
index 2c89e8c3c..6f48cb8ce 100644
--- a/scd/app-openpgp.c
+++ b/scd/app-openpgp.c
@@ -1772,9 +1772,11 @@ do_setattr (app_t app, const char *name,
will reread the data from the card and thus get synced in case of
errors (e.g. data truncated by the card). */
flush_cache_item (app, table[idx].tag);
- /* For command chaining we use a value of 254 for this card. */
- if (app->app_local->cardcap.cmd_chaining && valuelen > 254)
- exmode = -254;
+
+ if (app->app_local->cardcap.ext_lc_le && valuelen > 254)
+ exmode = 1; /* Use extended length w/o a limit. */
+ else if (app->app_local->cardcap.cmd_chaining && valuelen > 254)
+ exmode = -254; /* Command chaining with max. 254 bytes. */
else
exmode = 0;
rc = iso7816_put_data (app->slot, exmode, table[idx].tag, value, valuelen);
@@ -2432,7 +2434,9 @@ do_writekey (app_t app, ctrl_t ctrl,
goto leave;
/* Store the key. */
- if (app->app_local->cardcap.cmd_chaining && template_len > 254)
+ if (app->app_local->cardcap.ext_lc_le && template_len > 254)
+ exmode = 1; /* Use extended length w/o a limit. */
+ else if (app->app_local->cardcap.cmd_chaining && template_len > 254)
exmode = -254;
else
exmode = 0;