From 9d6a2a60c2c3828b20c5b2114ee644515db30cf8 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 1 Apr 2009 14:38:22 +0000 Subject: [PATCH] Prepare for OpenPGP cards with extended length support. --- scd/ChangeLog | 5 +++++ scd/app-openpgp.c | 12 ++++++++---- 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 + + * app-openpgp.c (do_setattr, do_writekey): Prepare for extended + length cards. + 2009-03-31 Werner Koch * 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;