aboutsummaryrefslogtreecommitdiffstats
path: root/scd/command.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2002-03-06 09:01:12 +0000
committerWerner Koch <[email protected]>2002-03-06 09:01:12 +0000
commit303b4bd6361a817227aa72a63b3a32d9c063b1d9 (patch)
tree36bd7306649f626b8b34a4c983efff801efe533b /scd/command.c
parentWe got more error codes than actual code ;-) (diff)
downloadgnupg-303b4bd6361a817227aa72a63b3a32d9c063b1d9.tar.gz
gnupg-303b4bd6361a817227aa72a63b3a32d9c063b1d9.zip
Decryption using a Cryptoflex card does now work.
Diffstat (limited to 'scd/command.c')
-rw-r--r--scd/command.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/scd/command.c b/scd/command.c
index a171de3df..30191dd95 100644
--- a/scd/command.c
+++ b/scd/command.c
@@ -400,6 +400,40 @@ cmd_pksign (ASSUAN_CONTEXT ctx, char *line)
return map_to_assuan_status (rc);
}
+/* PKDECRYPT <hexified_id>
+
+ */
+static int
+cmd_pkdecrypt (ASSUAN_CONTEXT ctx, char *line)
+{
+ CTRL ctrl = assuan_get_pointer (ctx);
+ int rc;
+ void *outdata;
+ size_t outdatalen;
+
+ if ((rc = open_card (ctrl)))
+ return rc;
+
+ rc = card_decipher (ctrl->card_ctx,
+ line,
+ pin_cb, ctx,
+ ctrl->in_data.value, ctrl->in_data.valuelen,
+ &outdata, &outdatalen);
+ if (rc)
+ {
+ log_error ("card_create_signature failed: %s\n", gnupg_strerror (rc));
+ }
+ else
+ {
+ rc = assuan_send_data (ctx, outdata, outdatalen);
+ xfree (outdata);
+ if (rc)
+ return rc; /* that is already an assuan error code */
+ }
+
+ return map_to_assuan_status (rc);
+}
+
@@ -417,6 +451,7 @@ register_commands (ASSUAN_CONTEXT ctx)
{ "READCERT", 0, cmd_readcert },
{ "SETDATA", 0, cmd_setdata },
{ "PKSIGN", 0, cmd_pksign },
+ { "PKDECRYPT", 0,cmd_pkdecrypt },
{ "", ASSUAN_CMD_INPUT, NULL },
{ "", ASSUAN_CMD_OUTPUT, NULL },
{ NULL }