aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scd/app-common.h18
-rw-r--r--scd/app.c32
-rw-r--r--scd/command.c22
3 files changed, 34 insertions, 38 deletions
diff --git a/scd/app-common.h b/scd/app-common.h
index e12b4fbfd..21f659eb6 100644
--- a/scd/app-common.h
+++ b/scd/app-common.h
@@ -152,26 +152,26 @@ gpg_error_t app_munge_serialno (app_t app);
gpg_error_t app_get_serial_and_stamp (app_t app, char **serial, time_t *stamp);
gpg_error_t app_write_learn_status (app_t app, ctrl_t ctrl,
unsigned int flags);
-gpg_error_t app_readcert (app_t app, const char *certid,
+gpg_error_t app_readcert (app_t app, ctrl_t ctrl, const char *certid,
unsigned char **cert, size_t *certlen);
-gpg_error_t app_readkey (app_t app, int advanced, const char *keyid,
- unsigned char **pk, size_t *pklen);
+gpg_error_t app_readkey (app_t app, ctrl_t ctrl, int advanced,
+ const char *keyid, unsigned char **pk, size_t *pklen);
gpg_error_t app_getattr (app_t app, ctrl_t ctrl, const char *name);
-gpg_error_t app_setattr (app_t app, const char *name,
+gpg_error_t app_setattr (app_t app, ctrl_t ctrl, const char *name,
gpg_error_t (*pincb)(void*, const char *, char **),
void *pincb_arg,
const unsigned char *value, size_t valuelen);
-gpg_error_t app_sign (app_t app, const char *keyidstr, int hashalgo,
+gpg_error_t app_sign (app_t app, ctrl_t ctrl, const char *keyidstr, int hashalgo,
gpg_error_t (*pincb)(void*, const char *, char **),
void *pincb_arg,
const void *indata, size_t indatalen,
unsigned char **outdata, size_t *outdatalen );
-gpg_error_t app_auth (app_t app, const char *keyidstr,
+gpg_error_t app_auth (app_t app, ctrl_t ctrl, const char *keyidstr,
gpg_error_t (*pincb)(void*, const char *, char **),
void *pincb_arg,
const void *indata, size_t indatalen,
unsigned char **outdata, size_t *outdatalen);
-gpg_error_t app_decipher (app_t app, const char *keyidstr,
+gpg_error_t app_decipher (app_t app, ctrl_t ctrl, const char *keyidstr,
gpg_error_t (*pincb)(void*, const char *, char **),
void *pincb_arg,
const void *indata, size_t indatalen,
@@ -192,13 +192,13 @@ gpg_error_t app_genkey (app_t app, ctrl_t ctrl,
time_t createtime,
gpg_error_t (*pincb)(void*, const char *, char **),
void *pincb_arg);
-gpg_error_t app_get_challenge (app_t app, size_t nbytes,
+gpg_error_t app_get_challenge (app_t app, ctrl_t ctrl, size_t nbytes,
unsigned char *buffer);
gpg_error_t app_change_pin (app_t app, ctrl_t ctrl,
const char *chvnostr, int reset_mode,
gpg_error_t (*pincb)(void*, const char *, char **),
void *pincb_arg);
-gpg_error_t app_check_pin (app_t app, const char *keyidstr,
+gpg_error_t app_check_pin (app_t app, ctrl_t ctrl, const char *keyidstr,
gpg_error_t (*pincb)(void*, const char *, char **),
void *pincb_arg);
diff --git a/scd/app.c b/scd/app.c
index 40bdd22a5..6868cc3f2 100644
--- a/scd/app.c
+++ b/scd/app.c
@@ -584,7 +584,7 @@ app_write_learn_status (app_t app, ctrl_t ctrl, unsigned int flags)
buffer put into CERT and the length of the certificate put into
CERTLEN. */
gpg_error_t
-app_readcert (app_t app, const char *certid,
+app_readcert (app_t app, ctrl_t ctrl, const char *certid,
unsigned char **cert, size_t *certlen)
{
gpg_error_t err;
@@ -595,7 +595,7 @@ app_readcert (app_t app, const char *certid,
return gpg_error (GPG_ERR_CARD_NOT_INITIALIZED);
if (!app->fnc.readcert)
return gpg_error (GPG_ERR_UNSUPPORTED_OPERATION);
- err = lock_reader (app->slot, NULL/* FIXME*/);
+ err = lock_reader (app->slot, ctrl);
if (err)
return err;
err = app->fnc.readcert (app, certid, cert, certlen);
@@ -612,7 +612,7 @@ app_readcert (app_t app, const char *certid,
This function might not be supported by all applications. */
gpg_error_t
-app_readkey (app_t app, int advanced, const char *keyid,
+app_readkey (app_t app, ctrl_t ctrl, int advanced, const char *keyid,
unsigned char **pk, size_t *pklen)
{
gpg_error_t err;
@@ -628,7 +628,7 @@ app_readkey (app_t app, int advanced, const char *keyid,
return gpg_error (GPG_ERR_CARD_NOT_INITIALIZED);
if (!app->fnc.readkey)
return gpg_error (GPG_ERR_UNSUPPORTED_OPERATION);
- err = lock_reader (app->slot, NULL /*FIXME*/);
+ err = lock_reader (app->slot, ctrl);
if (err)
return err;
err= app->fnc.readkey (app, advanced, keyid, pk, pklen);
@@ -680,7 +680,7 @@ app_getattr (app_t app, ctrl_t ctrl, const char *name)
/* Perform a SETATTR operation. */
gpg_error_t
-app_setattr (app_t app, const char *name,
+app_setattr (app_t app, ctrl_t ctrl, const char *name,
gpg_error_t (*pincb)(void*, const char *, char **),
void *pincb_arg,
const unsigned char *value, size_t valuelen)
@@ -693,7 +693,7 @@ app_setattr (app_t app, const char *name,
return gpg_error (GPG_ERR_CARD_NOT_INITIALIZED);
if (!app->fnc.setattr)
return gpg_error (GPG_ERR_UNSUPPORTED_OPERATION);
- err = lock_reader (app->slot, NULL /*FIXME*/);
+ err = lock_reader (app->slot, ctrl);
if (err)
return err;
err = app->fnc.setattr (app, name, pincb, pincb_arg, value, valuelen);
@@ -705,7 +705,7 @@ app_setattr (app_t app, const char *name,
If a PIN is required the PINCB will be used to ask for the PIN; it
should return the PIN in an allocated buffer and put it into PIN. */
gpg_error_t
-app_sign (app_t app, const char *keyidstr, int hashalgo,
+app_sign (app_t app, ctrl_t ctrl, const char *keyidstr, int hashalgo,
gpg_error_t (*pincb)(void*, const char *, char **),
void *pincb_arg,
const void *indata, size_t indatalen,
@@ -719,7 +719,7 @@ app_sign (app_t app, const char *keyidstr, int hashalgo,
return gpg_error (GPG_ERR_CARD_NOT_INITIALIZED);
if (!app->fnc.sign)
return gpg_error (GPG_ERR_UNSUPPORTED_OPERATION);
- err = lock_reader (app->slot, NULL /*FIXME*/);
+ err = lock_reader (app->slot, ctrl);
if (err)
return err;
err = app->fnc.sign (app, keyidstr, hashalgo,
@@ -737,7 +737,7 @@ app_sign (app_t app, const char *keyidstr, int hashalgo,
PINCB will be used to ask for the PIN; it should return the PIN in
an allocated buffer and put it into PIN. */
gpg_error_t
-app_auth (app_t app, const char *keyidstr,
+app_auth (app_t app, ctrl_t ctrl, const char *keyidstr,
gpg_error_t (*pincb)(void*, const char *, char **),
void *pincb_arg,
const void *indata, size_t indatalen,
@@ -751,7 +751,7 @@ app_auth (app_t app, const char *keyidstr,
return gpg_error (GPG_ERR_CARD_NOT_INITIALIZED);
if (!app->fnc.auth)
return gpg_error (GPG_ERR_UNSUPPORTED_OPERATION);
- err = lock_reader (app->slot, NULL /*FIXME*/);
+ err = lock_reader (app->slot, ctrl);
if (err)
return err;
err = app->fnc.auth (app, keyidstr,
@@ -769,7 +769,7 @@ app_auth (app_t app, const char *keyidstr,
If a PIN is required the PINCB will be used to ask for the PIN; it
should return the PIN in an allocated buffer and put it into PIN. */
gpg_error_t
-app_decipher (app_t app, const char *keyidstr,
+app_decipher (app_t app, ctrl_t ctrl, const char *keyidstr,
gpg_error_t (*pincb)(void*, const char *, char **),
void *pincb_arg,
const void *indata, size_t indatalen,
@@ -786,7 +786,7 @@ app_decipher (app_t app, const char *keyidstr,
return gpg_error (GPG_ERR_CARD_NOT_INITIALIZED);
if (!app->fnc.decipher)
return gpg_error (GPG_ERR_UNSUPPORTED_OPERATION);
- err = lock_reader (app->slot, NULL /*FIXME*/);
+ err = lock_reader (app->slot, ctrl);
if (err)
return err;
err = app->fnc.decipher (app, keyidstr,
@@ -888,7 +888,7 @@ app_genkey (app_t app, ctrl_t ctrl, const char *keynostr, unsigned int flags,
directly accesses the card without any application specific
wrapper. */
gpg_error_t
-app_get_challenge (app_t app, size_t nbytes, unsigned char *buffer)
+app_get_challenge (app_t app, ctrl_t ctrl, size_t nbytes, unsigned char *buffer)
{
gpg_error_t err;
@@ -896,7 +896,7 @@ app_get_challenge (app_t app, size_t nbytes, unsigned char *buffer)
return gpg_error (GPG_ERR_INV_VALUE);
if (!app->ref_count)
return gpg_error (GPG_ERR_CARD_NOT_INITIALIZED);
- err = lock_reader (app->slot, NULL /*FIXME*/);
+ err = lock_reader (app->slot, ctrl);
if (err)
return err;
err = iso7816_get_challenge (app->slot, nbytes, buffer);
@@ -936,7 +936,7 @@ app_change_pin (app_t app, ctrl_t ctrl, const char *chvnostr, int reset_mode,
be used to initialze a the PIN cache for long lasting other
operations. Its use is highly application dependent. */
gpg_error_t
-app_check_pin (app_t app, const char *keyidstr,
+app_check_pin (app_t app, ctrl_t ctrl, const char *keyidstr,
gpg_error_t (*pincb)(void*, const char *, char **),
void *pincb_arg)
{
@@ -948,7 +948,7 @@ app_check_pin (app_t app, const char *keyidstr,
return gpg_error (GPG_ERR_CARD_NOT_INITIALIZED);
if (!app->fnc.check_pin)
return gpg_error (GPG_ERR_UNSUPPORTED_OPERATION);
- err = lock_reader (app->slot, NULL /*FIXME*/);
+ err = lock_reader (app->slot, ctrl);
if (err)
return err;
err = app->fnc.check_pin (app, keyidstr, pincb, pincb_arg);
diff --git a/scd/command.c b/scd/command.c
index e771a745b..31443c79e 100644
--- a/scd/command.c
+++ b/scd/command.c
@@ -710,7 +710,7 @@ cmd_readcert (assuan_context_t ctx, char *line)
return rc;
line = xstrdup (line); /* Need a copy of the line. */
- rc = app_readcert (ctrl->app_ctx, line, &cert, &ncert);
+ rc = app_readcert (ctrl->app_ctx, ctrl, line, &cert, &ncert);
if (rc)
log_error ("app_readcert failed: %s\n", gpg_strerror (rc));
xfree (line);
@@ -761,7 +761,7 @@ cmd_readkey (assuan_context_t ctx, char *line)
/* If the application supports the READKEY function we use that.
Otherwise we use the old way by extracting it from the
certificate. */
- rc = app_readkey (ctrl->app_ctx, advanced, line, &pk, &pklen);
+ rc = app_readkey (ctrl->app_ctx, ctrl, advanced, line, &pk, &pklen);
if (!rc)
{ /* Yeah, got that key - send it back. */
rc = assuan_send_data (ctx, pk, pklen);
@@ -775,7 +775,7 @@ cmd_readkey (assuan_context_t ctx, char *line)
log_error ("app_readkey failed: %s\n", gpg_strerror (rc));
else
{
- rc = app_readcert (ctrl->app_ctx, line, &cert, &ncert);
+ rc = app_readcert (ctrl->app_ctx, ctrl, line, &cert, &ncert);
if (rc)
log_error ("app_readcert failed: %s\n", gpg_strerror (rc));
}
@@ -985,7 +985,7 @@ cmd_pksign (assuan_context_t ctx, char *line)
if (!keyidstr)
return out_of_core ();
- rc = app_sign (ctrl->app_ctx,
+ rc = app_sign (ctrl->app_ctx, ctrl,
keyidstr, hash_algo,
pin_cb, ctx,
ctrl->in_data.value, ctrl->in_data.valuelen,
@@ -1036,9 +1036,7 @@ cmd_pkauth (assuan_context_t ctx, char *line)
if (!keyidstr)
return out_of_core ();
- rc = app_auth (ctrl->app_ctx,
- keyidstr,
- pin_cb, ctx,
+ rc = app_auth (ctrl->app_ctx, ctrl, keyidstr, pin_cb, ctx,
ctrl->in_data.value, ctrl->in_data.valuelen,
&outdata, &outdatalen);
xfree (keyidstr);
@@ -1080,9 +1078,7 @@ cmd_pkdecrypt (assuan_context_t ctx, char *line)
keyidstr = xtrystrdup (line);
if (!keyidstr)
return out_of_core ();
- rc = app_decipher (ctrl->app_ctx,
- keyidstr,
- pin_cb, ctx,
+ rc = app_decipher (ctrl->app_ctx, ctrl, keyidstr, pin_cb, ctx,
ctrl->in_data.value, ctrl->in_data.valuelen,
&outdata, &outdatalen, &infoflags);
@@ -1194,7 +1190,7 @@ cmd_setattr (assuan_context_t ctx, char *orig_line)
line++;
nbytes = percent_plus_unescape_inplace (line, 0);
- rc = app_setattr (ctrl->app_ctx, keyword, pin_cb, ctx,
+ rc = app_setattr (ctrl->app_ctx, ctrl, keyword, pin_cb, ctx,
(const unsigned char*)line, nbytes);
xfree (linebuf);
@@ -1441,7 +1437,7 @@ cmd_random (assuan_context_t ctx, char *line)
if (!buffer)
return out_of_core ();
- rc = app_get_challenge (ctrl->app_ctx, nbytes, buffer);
+ rc = app_get_challenge (ctrl->app_ctx, ctrl, nbytes, buffer);
if (!rc)
{
rc = assuan_send_data (ctx, buffer, nbytes);
@@ -1562,7 +1558,7 @@ cmd_checkpin (assuan_context_t ctx, char *line)
if (!idstr)
return out_of_core ();
- rc = app_check_pin (ctrl->app_ctx, idstr, pin_cb, ctx);
+ rc = app_check_pin (ctrl->app_ctx, ctrl, idstr, pin_cb, ctx);
xfree (idstr);
if (rc)
log_error ("app_check_pin failed: %s\n", gpg_strerror (rc));