aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2022-05-26 03:01:16 +0000
committerWerner Koch <[email protected]>2022-10-20 10:22:08 +0000
commitb19958278931e474acb266c9698839118b04f7f1 (patch)
tree538492dd11aa9174b19357888b81ed282c37917e
parentscd:nks: Handle APP_READKEY_FLAG_INFO. (diff)
downloadgnupg-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.c41
-rw-r--r--scd/app-p15.c2
-rw-r--r--scd/command.c5
-rw-r--r--scd/scdaemon.h3
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,