aboutsummaryrefslogtreecommitdiffstats
path: root/scd/app.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2005-05-20 20:39:36 +0000
committerWerner Koch <[email protected]>2005-05-20 20:39:36 +0000
commit41862f5f13bef8113cf040ecaba34a35c370eeb3 (patch)
tree8deaa1ca3c63351b2ef028947aa445b422081e9f /scd/app.c
parentChanged the scdaemon to handle concurrent sessions. Adjusted (diff)
downloadgnupg-41862f5f13bef8113cf040ecaba34a35c370eeb3.tar.gz
gnupg-41862f5f13bef8113cf040ecaba34a35c370eeb3.zip
* protect-tool.c: New option --canonical.
(show_file): Implement it. * keyformat.txt: Define the created-at attribute for keys. * ccid-driver.c: Replaced macro DEBUG_T1 by a new debug level. (parse_ccid_descriptor): Mark SCR335 firmware version 5.18 good. (ccid_transceive): Arghhh. The seqno is another bit in the R-block than in the I block, this was wrong at one place. * scdaemon.c: New options --debug-ccid-driver and --debug-disable-ticker. * app-openpgp.c (do_genkey, do_writekey): Factored code to check for existing key out into .. (does_key_exist): .. New function. * gpg-connect-agent.c (add_definq, show_definq, clear_definq) (handle_inquire): New. (read_and_print_response): Handle INQUIRE command. (main): Implement control commands.
Diffstat (limited to 'scd/app.c')
-rw-r--r--scd/app.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/scd/app.c b/scd/app.c
index 0a1960267..f2c427f5b 100644
--- a/scd/app.c
+++ b/scd/app.c
@@ -546,6 +546,35 @@ app_decipher (app_t app, const char *keyidstr,
}
+/* Perform the WRITEKEY operation. */
+gpg_error_t
+app_writekey (app_t app, ctrl_t ctrl,
+ const char *keyidstr, unsigned int flags,
+ gpg_error_t (*pincb)(void*, const char *, char **),
+ void *pincb_arg,
+ const unsigned char *keydata, size_t keydatalen)
+{
+ gpg_error_t err;
+
+ if (!app || !keyidstr || !*keyidstr || !pincb)
+ return gpg_error (GPG_ERR_INV_VALUE);
+ if (!app->initialized)
+ return gpg_error (GPG_ERR_CARD_NOT_INITIALIZED);
+ if (!app->fnc.writekey)
+ return gpg_error (GPG_ERR_UNSUPPORTED_OPERATION);
+ err = lock_reader (app);
+ if (err)
+ return err;
+ err = app->fnc.writekey (app, ctrl, keyidstr, flags,
+ pincb, pincb_arg, keydata, keydatalen);
+ unlock_reader (app);
+ if (opt.verbose)
+ log_info ("operation writekey result: %s\n", gpg_strerror (err));
+ return err;
+
+}
+
+
/* Perform a SETATTR operation. */
gpg_error_t
app_genkey (app_t app, CTRL ctrl, const char *keynostr, unsigned int flags,