gpg: Fix creating on-disk subkey with on-card primary key.
authorWerner Koch <wk@gnupg.org>
Thu, 19 Oct 2017 16:10:37 +0000 (18:10 +0200)
committerWerner Koch <wk@gnupg.org>
Thu, 19 Oct 2017 16:10:37 +0000 (18:10 +0200)
* g10/keygen.c (generate_subkeypair): Ignore error code issued for
trying to verify a card based key.
--

We try to verify the primary key and thus seed the passphrase cache
before generating the subkey.  However, the verification does not yet
work for on-card keys and thus the PASSWD --verify send to the agent
returns an error.  This patch detects this error and continues without
a seeded passphrase cache.  After all that pre-seeding is just a
convenience.

GnuPG-bug-id: 3280
Signed-off-by: Werner Koch <wk@gnupg.org>
g10/keygen.c

index 2b17a1e..8f30b7e 100644 (file)
@@ -5051,6 +5051,9 @@ generate_subkeypair (ctrl_t ctrl, kbnode_t keyblock, const char *algostr,
     err = agent_passwd (ctrl, hexgrip, desc, 1 /*=verify*/,
                         &cache_nonce, &passwd_nonce);
     xfree (desc);
+    if (gpg_err_code (err) == GPG_ERR_NOT_IMPLEMENTED
+        && gpg_err_source (err) == GPG_ERR_SOURCE_GPGAGENT)
+      err = 0;  /* Very likely that the key is on a card.  */
     if (err)
       goto leave;
   }