diff --git a/scd/app-nks.c b/scd/app-nks.c index f4c00d9a9..b18f73cdc 100644 --- a/scd/app-nks.c +++ b/scd/app-nks.c @@ -814,6 +814,21 @@ get_nks_tag (app_t app, int nks_app_id) return tag; } +static void +set_usage_string (char usagebuf[5], int i) +{ + int usageidx = 0; + if (filelist[i].issignkey) + usagebuf[usageidx++] = 's'; + if (filelist[i].isauthkey) + usagebuf[usageidx++] = 'a'; + if (filelist[i].isencrkey) + usagebuf[usageidx++] = 'e'; + if (!usageidx) + usagebuf[usageidx++] = '-'; + usagebuf[usageidx] = 0; +} + static void do_learn_status_core (app_t app, ctrl_t ctrl, unsigned int flags, int nks_app_id) @@ -856,7 +871,6 @@ do_learn_status_core (app_t app, ctrl_t ctrl, unsigned int flags, { char gripstr[40+1]; char usagebuf[5]; - int usageidx = 0; char *algostr = NULL; err = keygripstr_from_pk_file (app, filelist[i].fid, @@ -869,15 +883,7 @@ do_learn_status_core (app_t app, ctrl_t ctrl, unsigned int flags, { snprintf (id_buf, sizeof id_buf, "NKS-%s.%04X", tag, filelist[i].fid); - if (filelist[i].issignkey) - usagebuf[usageidx++] = 's'; - if (filelist[i].isauthkey) - usagebuf[usageidx++] = 'a'; - if (filelist[i].isencrkey) - usagebuf[usageidx++] = 'e'; - if (!usageidx) - usagebuf[usageidx++] = '-'; - usagebuf[usageidx] = 0; + set_usage_string (usagebuf, i); send_status_info (ctrl, "KEYPAIRINFO", gripstr, 40, id_buf, strlen (id_buf), @@ -1285,7 +1291,6 @@ do_readkey (app_t app, ctrl_t ctrl, const char *keyid, unsigned int flags, { char *algostr; char usagebuf[5]; - int usageidx = 0; char id_buf[100]; if (app_help_get_keygrip_string_pk (*pk, *pklen, NULL, NULL, NULL, @@ -1295,15 +1300,7 @@ do_readkey (app_t app, ctrl_t ctrl, const char *keyid, unsigned int flags, snprintf (id_buf, sizeof id_buf, "NKS-%s.%04X", get_nks_tag (app, filelist[i].nks_app_id), filelist[i].fid); - if (filelist[i].issignkey) - usagebuf[usageidx++] = 's'; - if (filelist[i].isauthkey) - usagebuf[usageidx++] = 'a'; - if (filelist[i].isencrkey) - usagebuf[usageidx++] = 'e'; - if (!usageidx) - usagebuf[usageidx++] = '-'; - usagebuf[usageidx] = 0; + set_usage_string (usagebuf, i); send_status_info (ctrl, "KEYPAIRINFO", keygripstr, strlen (keygripstr), id_buf, strlen (id_buf), @@ -2337,6 +2334,7 @@ do_with_keygrip (app_t app, ctrl_t ctrl, int action, { char idbuf[20]; const char *tagstr; + char usagebuf[5]; if (app->app_local->active_nks_app == NKS_APP_ESIGN) tagstr = "ESIGN"; @@ -2351,7 +2349,8 @@ do_with_keygrip (app_t app, ctrl_t ctrl, int action, snprintf (idbuf, sizeof idbuf, "NKS-%s.%04X", tagstr, filelist[idx].fid); - send_keyinfo (ctrl, data, keygripstr, serialno, idbuf); + set_usage_string (usagebuf, idx); + send_keyinfo (ctrl, data, keygripstr, serialno, idbuf, usagebuf); } } diff --git a/scd/app-p15.c b/scd/app-p15.c index 2884e0df5..f1f1168ec 100644 --- a/scd/app-p15.c +++ b/scd/app-p15.c @@ -6030,7 +6030,7 @@ do_with_keygrip (app_t app, ctrl_t ctrl, int action, goto leave; } - send_keyinfo (ctrl, as_data, prkdf->keygrip, serialno, keyref); + send_keyinfo (ctrl, as_data, prkdf->keygrip, serialno, keyref, NULL); xfree (keyref); if (want_keygripstr) { diff --git a/scd/command.c b/scd/command.c index 925fd7597..ec6989a4d 100644 --- a/scd/command.c +++ b/scd/command.c @@ -1903,14 +1903,15 @@ scd_command_handler (ctrl_t ctrl, int fd) * data line, else as a status line. */ void send_keyinfo (ctrl_t ctrl, int data, const char *keygrip_str, - const char *serialno, const char *idstr) + const char *serialno, const char *idstr, const char *usage) { char *string; assuan_context_t ctx = ctrl->server_local->assuan_ctx; - string = xtryasprintf ("%s T %s %s%s", keygrip_str, + string = xtryasprintf ("%s T %s %s %s%s", keygrip_str, serialno? serialno : "-", idstr? idstr : "-", + usage? usage : "-", data? "\n" : ""); if (!string) diff --git a/scd/scdaemon.h b/scd/scdaemon.h index bb7c1b025..bb7e04c61 100644 --- a/scd/scdaemon.h +++ b/scd/scdaemon.h @@ -126,7 +126,8 @@ const char *scd_get_socket_name (void); gpg_error_t initialize_module_command (void); int scd_command_handler (ctrl_t, int); void send_keyinfo (ctrl_t ctrl, int data, const char *keygrip_str, - const char *serialno, const char *idstr); + const char *serialno, const char *idstr, + const char *usage); void send_status_info (ctrl_t ctrl, const char *keyword, ...) GPGRT_ATTR_SENTINEL(1); gpg_error_t send_status_direct (ctrl_t ctrl, const char *keyword,