* gpgsm.c (main): Add secmem features and set the random seed file.
authorWerner Koch <wk@gnupg.org>
Tue, 29 Jul 2003 08:53:19 +0000 (08:53 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 29 Jul 2003 08:53:19 +0000 (08:53 +0000)
(gpgsm_exit): Update the random seed file and enable debug output.

* g10.c (main): Add secmem features and set the random seed file.
(g10_exit): Update the random seed file.

* parse-packet.c (parse_signature,read_protected_v3_mpi)
(parse_key): Fixed use of mpi_set_opaque.
* keygen.c (gen_card_key): Ditto.

scd/ChangeLog
scd/apdu.c
scd/app-openpgp.c
sm/ChangeLog
sm/gpgsm.c

index ed69869..68aaa29 100644 (file)
@@ -1,3 +1,8 @@
+2003-07-28  Werner Koch  <wk@gnupg.org>
+
+       * app-openpgp.c (do_setattr): Change implementation.  Allow all
+       useful DOs.
+
 2003-07-27  Werner Koch  <wk@gnupg.org>
 
        Adjusted for gcry_mpi_print and gcry_mpi_scan API change.
index 7732254..6fec584 100644 (file)
@@ -32,8 +32,8 @@
 #define HAVE_CTAPI 1
 
 #define MAX_READER 4 /* Number of readers we support concurrently. */
-#define CARD_CONNECT_TIMEOUT 30 /* Number of seconds to wait for
-                                   insertion of the card. */
+#define CARD_CONNECT_TIMEOUT 1 /* Number of seconds to wait for
+                                  insertion of the card (1 = don't wait). */
 
 
 
@@ -149,6 +149,9 @@ ct_activate_card (int reader)
       unsigned char dad[1], sad[1], cmd[11], buf[256];
       unsigned short buflen;
 
+      if (count)
+        sleep (1); /* FIXME: we should use a more reliable timer. */
+
       /* Check whether card has been inserted. */
       dad[0] = 1;     /* Destination address: CT. */    
       sad[0] = 2;     /* Source address: Host. */
@@ -203,7 +206,6 @@ ct_activate_card (int reader)
           return 0;
         }
 
-      sleep (1); /* FIXME: we should use a more reliable timer. */
     }
  
   log_info ("ct_activate_card(%d): timeout waiting for card\n", reader);
index b344d23..f8c13f6 100644 (file)
@@ -541,10 +541,28 @@ do_setattr (APP app, const char *name,
             const unsigned char *value, size_t valuelen)
 {
   gpg_error_t rc;
-
-  log_debug ("app_openpgp#setattr `%s' value of length %u\n",
-             name, (unsigned int)valuelen); /* fixme: name should be
-                                               sanitized. */
+  int idx;
+  static struct {
+    const char *name;
+    int tag;
+  } table[] = {
+    { "DISP-NAME",    0x005B },
+    { "LOGIN-DATA",   0x005E },
+    { "DISP-LANG",    0x5F2D },
+    { "DISP-SEX",     0x5F35 },
+    { "PUBKEY-URL",   0x5F50 },
+    { "CHV-STATUS-1", 0x00C4 },
+    { "CA-FPR-1",     0x00CA },
+    { "CA-FPR-2",     0x00CB },
+    { "CA-FPR-3",     0x00CC },
+    { NULL, 0 }
+  };
+
+
+  for (idx=0; table[idx].name && strcmp (table[idx].name, name); idx++)
+    ;
+  if (!table[idx].name)
+    return gpg_error (GPG_ERR_INV_NAME); 
 
   if (!app->did_chv3)
     {
@@ -552,8 +570,8 @@ do_setattr (APP app, const char *name,
 
       rc = pincb (pincb_arg, "Admin PIN (CHV3)",
                   &pinvalue);
-      pinvalue = xstrdup ("12345678");
-      rc = 0;
+/*        pinvalue = xstrdup ("12345678"); */
+/*        rc = 0; */
       if (rc)
         {
           log_info ("PIN callback returned error: %s\n", gpg_strerror (rc));
@@ -571,32 +589,12 @@ do_setattr (APP app, const char *name,
       app->did_chv3 = 1;
     }
 
-  log_debug ("setting `%s' to `%.*s'\n", name, (int)valuelen, value);
-  if (!strcmp (name, "DISP-NAME"))
-    {
-      rc = iso7816_put_data (app->slot, 0x005B, value, valuelen);
-      if (rc)
-        {
-          /* FIXME: If this fails we should *once* try again after
-          doing a verify command, so that in case of a problem with
-          tracking the verify operation we have a fallback. */
-          /* FIXME: change this when iso7816 returns correct error
-          codes. */
-          log_error ("failed to set `Name'\n");
-          rc = gpg_error (GPG_ERR_GENERAL);
-        }
-    }
-  else if (!strcmp (name, "PUBKEY-URL"))
-    {
-      rc = iso7816_put_data (app->slot, 0x5F50, value, valuelen);
-      if (rc)
-        {
-          log_error ("failed to set `Pubkey-URL'\n");
-          rc = gpg_error (GPG_ERR_GENERAL);
-        }
-    }
-  else
-    rc = gpg_error (GPG_ERR_INV_NAME); 
+  rc = iso7816_put_data (app->slot, table[idx].tag, value, valuelen);
+  if (rc)
+    log_error ("failed to set `%s': %s\n", table[idx].name, gpg_strerror (rc));
+  /* FIXME: If this fails we should *once* try again after
+     doing a verify command, so that in case of a problem with
+     tracking the verify operation we have a fallback. */
 
   return rc;
 }
index f426403..22ed9a9 100644 (file)
@@ -1,3 +1,8 @@
+2003-07-29  Werner Koch  <wk@gnupg.org>
+
+       * gpgsm.c (main): Add secmem features and set the random seed file.
+       (gpgsm_exit): Update the random seed file and enable debug output.
+
 2003-07-27  Werner Koch  <wk@gnupg.org>
 
        Adjusted for gcry_mpi_print and gcry_mpi_scan API change.
index 5157874..f108193 100644 (file)
@@ -1071,10 +1071,7 @@ main ( int argc, char **argv)
   /* set the random seed file */
   if (use_random_seed) {
     char *p = make_filename (opt.homedir, "random_seed", NULL);
-#if 0
-#warning set_random_seed_file not yet available in Libgcrypt
-    set_random_seed_file(p);
-#endif
+    gcry_control (GCRYCTL_SET_RANDOM_SEED_FILE, p);
     xfree(p);
   }
 
@@ -1342,12 +1339,7 @@ emergency_cleanup (void)
 void
 gpgsm_exit (int rc)
 {
-  #if 0
-#warning no update_random_seed_file
-  update_random_seed_file();
-  #endif
-#if 0
-  /* at this time a bit annoying */
+  gcry_control (GCRYCTL_UPDATE_RANDOM_SEED_FILE);update_random_seed_file();
   if (opt.debug & DBG_MEMSTAT_VALUE)
     {
       gcry_control( GCRYCTL_DUMP_MEMORY_STATS );
@@ -1355,7 +1347,6 @@ gpgsm_exit (int rc)
     }
   if (opt.debug)
     gcry_control (GCRYCTL_DUMP_SECMEM_STATS );
-#endif
   emergency_cleanup ();
   rc = rc? rc : log_get_errorcount(0)? 2 : gpgsm_errors_seen? 1 : 0;
   exit (rc);