mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-03 12:11:33 +01:00
card: Let the APDU command prints a description of the status word.
* tools/card-call-scd.c (scd_apdu_strerror): New. * tools/gpg-card.c (cmd_apdu): Print a description. -- Pretty convenient to explore smartcards.
This commit is contained in:
parent
0e34683a6c
commit
ad469609b1
@ -1709,3 +1709,33 @@ agent_get_s2k_count (void)
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
/* Return a malloced string describing the statusword SW. On error
|
||||
* NULL is returned. */
|
||||
char *
|
||||
scd_apdu_strerror (unsigned int sw)
|
||||
{
|
||||
gpg_error_t err;
|
||||
char line[ASSUAN_LINELENGTH];
|
||||
membuf_t data;
|
||||
char *buf;
|
||||
|
||||
err = start_agent (0);
|
||||
if (err)
|
||||
return NULL;
|
||||
|
||||
init_membuf (&data, 64);
|
||||
snprintf (line, sizeof line, "SCD GETINFO apdu_strerror 0x%x", sw);
|
||||
err = assuan_transact (agent_ctx, line, put_membuf_cb, &data,
|
||||
NULL, NULL, NULL, NULL);
|
||||
if (err)
|
||||
{
|
||||
xfree (get_membuf (&data, NULL));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
put_membuf (&data, "", 1);
|
||||
buf = get_membuf (&data, NULL);
|
||||
return buf;
|
||||
}
|
||||
|
@ -3501,7 +3501,16 @@ cmd_apdu (card_info_t info, char *argstr)
|
||||
if (err)
|
||||
goto leave;
|
||||
if (!with_atr)
|
||||
log_info ("Statusword: 0x%04x\n", sw);
|
||||
{
|
||||
if (opt.interactive || opt.verbose)
|
||||
{
|
||||
char *p = scd_apdu_strerror (sw);
|
||||
log_info ("Statusword: 0x%04x (%s)\n", sw, p? p: "?");
|
||||
xfree (p);
|
||||
}
|
||||
else
|
||||
log_info ("Statusword: 0x%04x\n", sw);
|
||||
}
|
||||
for (i=0; i < resultlen; )
|
||||
{
|
||||
size_t save_i = i;
|
||||
|
@ -242,6 +242,9 @@ gpg_error_t scd_checkpin (const char *serialno);
|
||||
|
||||
unsigned long agent_get_s2k_count (void);
|
||||
|
||||
char *scd_apdu_strerror (unsigned int sw);
|
||||
|
||||
|
||||
/*-- card-yubikey.c --*/
|
||||
gpg_error_t yubikey_commands (card_info_t info,
|
||||
estream_t fp, int argc, const char *argv[]);
|
||||
|
Loading…
x
Reference in New Issue
Block a user