diff options
author | Werner Koch <[email protected]> | 2002-04-15 10:11:11 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2002-04-15 10:11:11 +0000 |
commit | 4e5bda76552e31195db58052bc670cb7049d3002 (patch) | |
tree | d5d3cddb98886b3933fd602433063b8d8f332e4f /scd/command.c | |
parent | * cryptmiss.c: New. (diff) | |
download | gnupg-4e5bda76552e31195db58052bc670cb7049d3002.tar.gz gnupg-4e5bda76552e31195db58052bc670cb7049d3002.zip |
* command.c (cmd_pksign, cmd_pkdecrypt): Use a copy of the key ID.
Diffstat (limited to 'scd/command.c')
-rw-r--r-- | scd/command.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/scd/command.c b/scd/command.c index 8f005a329..f62baae98 100644 --- a/scd/command.c +++ b/scd/command.c @@ -430,15 +430,23 @@ cmd_pksign (ASSUAN_CONTEXT ctx, char *line) int rc; void *outdata; size_t outdatalen; + char *keyidstr; if ((rc = open_card (ctrl))) return rc; + /* We have to use a copy of the key ID because the function may use + the pin_cb which in turn uses the assuan line buffer and thus + overwriting the original line with the keyid */ + keyidstr = xtrystrdup (line); + if (!keyidstr) + return ASSUAN_Out_Of_Core; rc = card_sign (ctrl->card_ctx, - line, GCRY_MD_SHA1, + keyidstr, GCRY_MD_SHA1, pin_cb, ctx, ctrl->in_data.value, ctrl->in_data.valuelen, &outdata, &outdatalen); + xfree (keyidstr); if (rc) { log_error ("card_sign failed: %s\n", gnupg_strerror (rc)); @@ -464,15 +472,20 @@ cmd_pkdecrypt (ASSUAN_CONTEXT ctx, char *line) int rc; void *outdata; size_t outdatalen; + char *keyidstr; if ((rc = open_card (ctrl))) return rc; + keyidstr = xtrystrdup (line); + if (!keyidstr) + return ASSUAN_Out_Of_Core; rc = card_decipher (ctrl->card_ctx, - line, + keyidstr, pin_cb, ctx, ctrl->in_data.value, ctrl->in_data.valuelen, &outdata, &outdatalen); + xfree (keyidstr); if (rc) { log_error ("card_create_signature failed: %s\n", gnupg_strerror (rc)); |