1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-22 10:19:57 +01:00

sm: Show the usage flags when generating a key from a card.

* g10/call-agent.c (scd_keypairinfo_status_cb): Also store the usage
flags.
* sm/call-agent.c (scd_keypairinfo_status_cb): Ditto.
* sm/certreqgen-ui.c (gpgsm_gencertreq_tty): Print the usage flags.

Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
Werner Koch 2019-04-01 19:58:33 +02:00
parent e47524c34a
commit 9ed1aa56c4
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
3 changed files with 61 additions and 8 deletions

View File

@ -798,7 +798,22 @@ scd_keypairinfo_status_cb (void *opaque, const char *line)
p++; p++;
while (*p && !spacep (p)) while (*p && !spacep (p))
p++; p++;
*p = 0; if (*p)
{
*p++ = 0;
while (spacep (p))
p++;
while (*p && !spacep (p))
{
switch (*p++)
{
case 'c': sl->flags |= GCRY_PK_USAGE_CERT; break;
case 's': sl->flags |= GCRY_PK_USAGE_SIGN; break;
case 'e': sl->flags |= GCRY_PK_USAGE_ENCR; break;
case 'a': sl->flags |= GCRY_PK_USAGE_AUTH; break;
}
}
}
} }
} }
@ -808,7 +823,8 @@ scd_keypairinfo_status_cb (void *opaque, const char *line)
/* Read the keypairinfo lines of the current card directly from /* Read the keypairinfo lines of the current card directly from
* scdaemon. The list is returned as a string made up of the keygrip, * scdaemon. The list is returned as a string made up of the keygrip,
* a space and the keyref. */ * a space and the keyref. The flags of the string carry the usage
* bits. */
gpg_error_t gpg_error_t
agent_scd_keypairinfo (ctrl_t ctrl, strlist_t *r_list) agent_scd_keypairinfo (ctrl_t ctrl, strlist_t *r_list)
{ {

View File

@ -785,9 +785,9 @@ scd_keypairinfo_status_cb (void *opaque, const char *line)
{ {
sl = append_to_strlist (listaddr, line); sl = append_to_strlist (listaddr, line);
p = sl->d; p = sl->d;
/* Make sure that we only have two tokes so that future /* Make sure that we only have two tokens so that future
extensions of the format won't change the format expected by * extensions of the format won't change the format expected by
the caller. */ * the caller. */
while (*p && !spacep (p)) while (*p && !spacep (p))
p++; p++;
if (*p) if (*p)
@ -796,7 +796,22 @@ scd_keypairinfo_status_cb (void *opaque, const char *line)
p++; p++;
while (*p && !spacep (p)) while (*p && !spacep (p))
p++; p++;
*p = 0; if (*p)
{
*p++ = 0;
while (spacep (p))
p++;
while (*p && !spacep (p))
{
switch (*p++)
{
case 'c': sl->flags |= GCRY_PK_USAGE_CERT; break;
case 's': sl->flags |= GCRY_PK_USAGE_SIGN; break;
case 'e': sl->flags |= GCRY_PK_USAGE_ENCR; break;
case 'a': sl->flags |= GCRY_PK_USAGE_AUTH; break;
}
}
}
} }
} }
@ -806,7 +821,7 @@ scd_keypairinfo_status_cb (void *opaque, const char *line)
/* Call the agent to read the keypairinfo lines of the current card. /* Call the agent to read the keypairinfo lines of the current card.
The list is returned as a string made up of the keygrip, a space The list is returned as a string made up of the keygrip, a space
and the keyid. */ and the keyid. The flags of the string carry the usage bits. */
int int
gpgsm_agent_scd_keypairinfo (ctrl_t ctrl, strlist_t *r_list) gpgsm_agent_scd_keypairinfo (ctrl_t ctrl, strlist_t *r_list)
{ {

View File

@ -249,6 +249,7 @@ gpgsm_gencertreq_tty (ctrl_t ctrl, estream_t output_stream)
gcry_sexp_t s_pkey; gcry_sexp_t s_pkey;
char *algostr = NULL; char *algostr = NULL;
const char *keyref; const char *keyref;
int any = 0;
keyref = strchr (sl->d, ' '); keyref = strchr (sl->d, ' ');
if (keyref) if (keyref)
@ -262,7 +263,28 @@ gpgsm_gencertreq_tty (ctrl_t ctrl, estream_t output_stream)
} }
xfree (pkey); xfree (pkey);
} }
tty_printf (" (%d) %s %s\n", count, sl->d, algostr); tty_printf (" (%d) %s %s", count, sl->d, algostr);
if ((sl->flags & GCRY_PK_USAGE_CERT))
{
tty_printf ("%scert", any?",":" (");
any = 1;
}
if ((sl->flags & GCRY_PK_USAGE_SIGN))
{
tty_printf ("%ssign", any?",":" (");
any = 1;
}
if ((sl->flags & GCRY_PK_USAGE_AUTH))
{
tty_printf ("%sauth", any?",":" (");
any = 1;
}
if ((sl->flags & GCRY_PK_USAGE_ENCR))
{
tty_printf ("%sencr", any?",":" (");
any = 1;
}
tty_printf ("%s\n", any?")":"");
xfree (algostr); xfree (algostr);
} }
xfree (answer); xfree (answer);