1
0
Fork 0
mirror of git://git.gnupg.org/gnupg.git synced 2025-07-02 22:46:30 +02:00

scd: Add new command: KEYINFO.

* scd/app-common.h (struct app_ctx_s): Add with_keygrip function.
* scd/app-openpgp.c (do_with_keygrip): New.
* scd/app.c (app_do_with_keygrip): New.
* scd/command.c (cmd_keyinfo): New.
(send_keyinfo): New.

--

KEYGRIP_ACTION_LOOKUP is not yet used.  It will be used for directly
asking PK* action to determine an APP.

Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
NIIBE Yutaka 2019-04-25 14:49:49 +09:00
parent d5443b918d
commit 874bc970ba
5 changed files with 159 additions and 1 deletions

View file

@ -4945,6 +4945,59 @@ do_check_pin (app_t app, const char *keyidstr,
return verify_chv2 (app, pincb, pincb_arg);
}
static int
do_with_keygrip (app_t app, ctrl_t ctrl, int action, const char *keygrip_str)
{
int i;
if (action == KEYGRIP_ACTION_LOOKUP)
{
if (keygrip_str == NULL)
return 1;
for (i = 0; i < 3; i++)
if (app->app_local->pk[i].read_done
&& !strcmp (keygrip_str, app->app_local->pk[i].keygrip_str))
return 0; /* Found */
return 1;
}
else
{
char idbuf[50];
char buf[65];
int data = (action == KEYGRIP_ACTION_SEND_DATA);
if (DIM (buf) < 2 * app->serialnolen + 1)
return 0;
bin2hex (app->serialno, app->serialnolen, buf);
if (keygrip_str == NULL)
{
for (i = 0; i < 3; i++)
if (app->app_local->pk[i].read_done)
{
sprintf (idbuf, "OPENPGP.%d", i+1);
send_keyinfo (ctrl, data,
app->app_local->pk[i].keygrip_str,buf, idbuf);
}
}
else
{
for (i = 0; i < 3; i++)
if (app->app_local->pk[i].read_done
&& !strcmp (keygrip_str, app->app_local->pk[i].keygrip_str))
{
sprintf (idbuf, "OPENPGP.%d", i+1);
send_keyinfo (ctrl, data, keygrip_str, buf, idbuf);
return 0;
}
}
return 1;
}
}
/* Show information about card capabilities. */
static void
@ -5327,6 +5380,7 @@ app_select_openpgp (app_t app)
app->fnc.decipher = do_decipher;
app->fnc.change_pin = do_change_pin;
app->fnc.check_pin = do_check_pin;
app->fnc.with_keygrip = do_with_keygrip;
}
leave: