aboutsummaryrefslogtreecommitdiffstats
path: root/g10/getkey.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/getkey.c')
-rw-r--r--g10/getkey.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/g10/getkey.c b/g10/getkey.c
index bc49782d3..0349a3858 100644
--- a/g10/getkey.c
+++ b/g10/getkey.c
@@ -3801,7 +3801,15 @@ get_seckey_default_or_card (ctrl_t ctrl, PKT_public_key *pk,
if (def_secret_key)
add_to_strlist (&namelist, def_secret_key);
else if (fpr_card)
- return get_pubkey_byfprint (ctrl, pk, NULL, fpr_card, fpr_len);
+ {
+ int rc = get_pubkey_byfprint (ctrl, pk, NULL, fpr_card, fpr_len);
+
+ /* The key on card can be not suitable for requested usage. */
+ if (rc == GPG_ERR_UNUSABLE_PUBKEY)
+ fpr_card = NULL; /* Fallthrough as no card. */
+ else
+ return rc;
+ }
if (!fpr_card
|| (def_secret_key && def_secret_key[strlen (def_secret_key)-1] == '!'))