Allow the use of a private-key s-expression with gcry_pk_verify.
authorWerner Koch <wk@gnupg.org>
Fri, 26 Jul 2013 17:22:36 +0000 (19:22 +0200)
committerWerner Koch <wk@gnupg.org>
Fri, 26 Jul 2013 17:22:36 +0000 (19:22 +0200)
* cipher/pubkey.c (sexp_to_key): Fallback to private key.

Signed-off-by: Werner Koch <wk@gnupg.org>
cipher/pubkey.c

index 606cedf..b540bd5 100644 (file)
@@ -2022,9 +2022,14 @@ sexp_to_key (gcry_sexp_t sexp, int want_private, int use,
   pk_extra_spec_t *extraspec;
   int is_ecc;
 
-  /* Check that the first element is valid.  */
+  /* Check that the first element is valid.  If we are looking for a
+     public key but a private key was supplied, we allow the use of
+     the private key anyway.  The rationale for this is that the
+     private key is a superset of the public key. */
   list = gcry_sexp_find_token (sexp,
                                want_private? "private-key":"public-key", 0);
+  if (!list && !want_private)
+    list = gcry_sexp_find_token (sexp, "private-key", 0);
   if (!list)
     return GPG_ERR_INV_OBJ; /* Does not contain a key object.  */