diff options
author | NIIBE Yutaka <[email protected]> | 2022-05-26 03:01:16 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2022-10-20 10:22:08 +0000 |
commit | b19958278931e474acb266c9698839118b04f7f1 (patch) | |
tree | 538492dd11aa9174b19357888b81ed282c37917e | |
parent | scd:nks: Handle APP_READKEY_FLAG_INFO. (diff) | |
download | gnupg-b19958278931e474acb266c9698839118b04f7f1.tar.gz gnupg-b19958278931e474acb266c9698839118b04f7f1.zip |
scd:nks: Return USAGE information for KEYINFO command.
* scd/app-nks.c (set_usage_string): New.
(do_learn_status_core, do_readkey): Use set_usage_string.
(do_with_keygrip): Add USAGE to call send_keyinfo,
using set_usage_string.
* scd/command.c (send_keyinfo): Add arg usage.
--
Signed-off-by: NIIBE Yutaka <[email protected]>
Backported-from-master: 5264d3f58e8a8362900c3518bdd683ff9a23cccc
GnuPG-bug-id: 6252
This backports only the NKS parts of the original patch
Signed-off-by: Werner Koch <[email protected]>
-rw-r--r-- | scd/app-nks.c | 41 | ||||
-rw-r--r-- | scd/app-p15.c | 2 | ||||
-rw-r--r-- | scd/command.c | 5 | ||||
-rw-r--r-- | scd/scdaemon.h | 3 |
4 files changed, 26 insertions, 25 deletions
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 @@ -815,6 +815,21 @@ get_nks_tag (app_t app, int nks_app_id) } 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, |