From 23784f8bf0ac6d6c52cb2de2f99f46017a92c11a Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 3 Apr 2019 13:16:22 +0200 Subject: [PATCH] scd: New standard attributes $ENCRKEYID and $SIGNKEYID. * g10/call-agent.c (agent_scd_keypairinfo): Use --keypairinfo. * sm/call-agent.c (gpgsm_agent_scd_keypairinfo): Ditto. * scd/app-openpgp.c (do_getattr): Add attributes "$ENCRKEYID" and "$SIGNKEYID". * scd/app-nks.c (do_getattr): Add attributes too. -- We already have $AUTHKEYID to locate the keyref of the key to be used with ssh. It will also be useful to have default keyref for encryption and signing. For example, this will allow us to replace the use of "OPENPGP.2" by a app type specific keyref. Signed-off-by: Werner Koch (cherry picked from commit 2b1135cf920cf3d863813d60f032d476dcccfb58) Removed changes for the non-existing app-piv.c. Added support for NKS. --- g10/call-agent.c | 2 +- scd/app-nks.c | 24 ++++++++++++++++++++---- scd/app-openpgp.c | 14 ++++++++++++++ sm/call-agent.c | 2 +- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/g10/call-agent.c b/g10/call-agent.c index c85c659ab..c8d3471d1 100644 --- a/g10/call-agent.c +++ b/g10/call-agent.c @@ -819,7 +819,7 @@ agent_scd_keypairinfo (ctrl_t ctrl, strlist_t *r_list) memset (&inq_parm, 0, sizeof inq_parm); inq_parm.ctx = agent_ctx; - err = assuan_transact (agent_ctx, "SCD LEARN --force", + err = assuan_transact (agent_ctx, "SCD LEARN --keypairinfo", NULL, NULL, default_inq_cb, &inq_parm, scd_keypairinfo_status_cb, &list); diff --git a/scd/app-nks.c b/scd/app-nks.c index 0f38e7cd0..6fe367433 100644 --- a/scd/app-nks.c +++ b/scd/app-nks.c @@ -308,8 +308,10 @@ do_getattr (app_t app, ctrl_t ctrl, const char *name) int special; } table[] = { { "$AUTHKEYID", 1 }, - { "NKS-VERSION", 2 }, - { "CHV-STATUS", 3 }, + { "$ENCRKEYID", 2 }, + { "$SIGNKEYID", 3 }, + { "NKS-VERSION", 4 }, + { "CHV-STATUS", 5 }, { NULL, 0 } }; gpg_error_t err = 0; @@ -339,13 +341,27 @@ do_getattr (app_t app, ctrl_t ctrl, const char *name) } break; - case 2: /* NKS-VERSION */ + case 2: /* $ENCRKEYID */ + { + char const tmp[] = "NKS-NKS3.45B1"; + send_status_info (ctrl, table[idx].name, tmp, strlen (tmp), NULL, 0); + } + break; + + case 3: /* $SIGNKEYID */ + { + char const tmp[] = "NKS-NKS3.4531"; + send_status_info (ctrl, table[idx].name, tmp, strlen (tmp), NULL, 0); + } + break; + + case 4: /* NKS-VERSION */ snprintf (buffer, sizeof buffer, "%d", app->app_local->nks_version); send_status_info (ctrl, table[idx].name, buffer, strlen (buffer), NULL, 0); break; - case 3: /* CHV-STATUS */ + case 5: /* CHV-STATUS */ { /* Returns: PW1.CH PW2.CH PW1.CH.SIG PW2.CH.SIG That are the two global passwords followed by the two SigG passwords. diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c index 144aa3d46..48790605f 100644 --- a/scd/app-openpgp.c +++ b/scd/app-openpgp.c @@ -984,6 +984,8 @@ do_getattr (app_t app, ctrl_t ctrl, const char *name) { "PRIVATE-DO-3", 0x0103 }, { "PRIVATE-DO-4", 0x0104 }, { "$AUTHKEYID", 0x0000, -3 }, + { "$ENCRKEYID", 0x0000, -6 }, + { "$SIGNKEYID", 0x0000, -7 }, { "$DISPSERIALNO",0x0000, -4 }, { "KDF", 0x00F9 }, { NULL, 0 } @@ -1065,6 +1067,18 @@ do_getattr (app_t app, ctrl_t ctrl, const char *name) send_key_attr (ctrl, app, table[idx].name, i); return 0; } + if (table[idx].special == -6) + { + char const tmp[] = "OPENPGP.2"; + send_status_info (ctrl, table[idx].name, tmp, strlen (tmp), NULL, 0); + return 0; + } + if (table[idx].special == -7) + { + char const tmp[] = "OPENPGP.1"; + send_status_info (ctrl, table[idx].name, tmp, strlen (tmp), NULL, 0); + return 0; + } relptr = get_one_do (app, table[idx].tag, &value, &valuelen, &rc); if (relptr) diff --git a/sm/call-agent.c b/sm/call-agent.c index d38dbecaa..d93f1e332 100644 --- a/sm/call-agent.c +++ b/sm/call-agent.c @@ -796,7 +796,7 @@ gpgsm_agent_scd_keypairinfo (ctrl_t ctrl, strlist_t *r_list) inq_parm.ctrl = ctrl; inq_parm.ctx = agent_ctx; - rc = assuan_transact (agent_ctx, "SCD LEARN --force", + rc = assuan_transact (agent_ctx, "SCD LEARN --keypairinfo", NULL, NULL, default_inq_cb, &inq_parm, scd_keypairinfo_status_cb, &list);