diff --git a/scd/app.c b/scd/app.c index 2de4f129c..3961bdf6c 100644 --- a/scd/app.c +++ b/scd/app.c @@ -2062,6 +2062,10 @@ app_auth (card_t card, ctrl_t ctrl, const char *keyidstr, err = gpg_error (GPG_ERR_UNSUPPORTED_OPERATION); else { + if (card->app->apptype != APPTYPE_OPENPGP + && (!indata || !indatalen)) + return gpg_error (GPG_ERR_INV_VALUE); + if (DBG_APP) log_debug ("slot %d app %s: calling auth(%s)\n", card->slot, xstrapptype (card->app), keyidstr); diff --git a/scd/command.c b/scd/command.c index 392b678c4..28ab0f3c4 100644 --- a/scd/command.c +++ b/scd/command.c @@ -1133,10 +1133,9 @@ cmd_pkauth (assuan_context_t ctx, char *line) } else { - rc = assuan_send_data (ctx, outdata, outdatalen); + if (!challenge_response) + rc = assuan_send_data (ctx, outdata, outdatalen); xfree (outdata); - if (rc) - return rc; /* that is already an assuan error code */ } return rc;