Prepare for OpenPGP cards with extended length support.
authorWerner Koch <wk@gnupg.org>
Wed, 1 Apr 2009 14:38:22 +0000 (14:38 +0000)
committerWerner Koch <wk@gnupg.org>
Wed, 1 Apr 2009 14:38:22 +0000 (14:38 +0000)
scd/ChangeLog
scd/app-openpgp.c

index 534a709..d54355d 100644 (file)
@@ -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.
index 2c89e8c..6f48cb8 100644 (file)
@@ -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;