Added GENKEY --preset to add the passphrase of the generated key to the cache.
authorBen Kibbey <bjk@luxsci.net>
Sun, 10 Apr 2011 13:37:18 +0000 (09:37 -0400)
committerWerner Koch <wk@gnupg.org>
Tue, 12 Apr 2011 16:00:59 +0000 (18:00 +0200)
agent/ChangeLog
agent/agent.h
agent/command.c
agent/genkey.c

index b05c174..83ad651 100644 (file)
@@ -1,3 +1,8 @@
+2011-04-10  Ben Kibbey <bjk@luxsci.net>
+
+       * command.c: (cmd_genkey): Add option --preset.
+       * genkey.c: (agent_genkey): Add parameter preset.
+
 2011-04-06  Ben Kibbey <bjk@luxsci.net>
 
        * command.c: (do_one_keyinfo): Add protection type field.
index 3e01897..d5aaec8 100644 (file)
@@ -313,7 +313,7 @@ gpg_error_t agent_ask_new_passphrase (ctrl_t ctrl, const char *prompt,
                                       char **r_passphrase);
 int agent_genkey (ctrl_t ctrl, const char *cache_nonce,
                   const char *keyparam, size_t keyparmlen,
-                  int no_protection, membuf_t *outbuf);
+                  int no_protection, int preset, membuf_t *outbuf);
 gpg_error_t agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey,
                                      char **passphrase_addr);
 
index d53ca5e..0121a20 100644 (file)
@@ -831,7 +831,7 @@ cmd_pkdecrypt (assuan_context_t ctx, char *line)
 
 
 static const char hlp_genkey[] =
-  "GENKEY [--no-protection] [<cache_nonce>]\n"
+  "GENKEY [--no-protection] [--preset] [<cache_nonce>]\n"
   "\n"
   "Generate a new key, store the secret part and return the public\n"
   "part.  Here is an example transaction:\n"
@@ -843,6 +843,9 @@ static const char hlp_genkey[] =
   "  S: D (public-key\n"
   "  S: D   (rsa (n 326487324683264) (e 10001)))\n"
   "  S: OK key created\n"
+  "\n"
+  "When the --preset option is used the passphrase for the generated\n"
+  "key will be added to the cache.\n"
   "\n";
 static gpg_error_t
 cmd_genkey (assuan_context_t ctx, char *line)
@@ -854,8 +857,10 @@ cmd_genkey (assuan_context_t ctx, char *line)
   size_t valuelen;
   membuf_t outbuf;
   char *cache_nonce = NULL;
+  int opt_preset;
   char *p;
 
+  opt_preset = has_option (line, "--preset");
   no_protection = has_option (line, "--no-protection");
   line = skip_options (line);
 
@@ -874,7 +879,7 @@ cmd_genkey (assuan_context_t ctx, char *line)
   init_membuf (&outbuf, 512);
 
   rc = agent_genkey (ctrl, cache_nonce, (char*)value, valuelen, no_protection,
-                     &outbuf);
+                     opt_preset, &outbuf);
   xfree (value);
   if (rc)
     clear_outbuf (&outbuf);
index f70526d..95e0a64 100644 (file)
@@ -357,7 +357,7 @@ agent_ask_new_passphrase (ctrl_t ctrl, const char *prompt,
 int
 agent_genkey (ctrl_t ctrl, const char *cache_nonce,
               const char *keyparam, size_t keyparamlen, int no_protection,
-              membuf_t *outbuf)
+              int preset, membuf_t *outbuf)
 {
   gcry_sexp_t s_keyparam, s_key, s_private, s_public;
   char *passphrase;
@@ -434,6 +434,16 @@ agent_genkey (ctrl_t ctrl, const char *cache_nonce,
           && !agent_put_cache (cache_nonce, CACHE_MODE_NONCE,
                                passphrase, 900 /*seconds*/))
         agent_write_status (ctrl, "CACHE_NONCE", cache_nonce, NULL);
+      if (preset && !no_protection)
+       {
+         unsigned char grip[20];
+         char hexgrip[40+1];
+         if (gcry_pk_get_keygrip (s_private, grip))
+           {
+             bin2hex(grip, 20, hexgrip);
+             rc = agent_put_cache (hexgrip, CACHE_MODE_ANY, passphrase, 900);
+           }
+       }
     }
   xfree (passphrase);
   passphrase = NULL;