aboutsummaryrefslogtreecommitdiffstats
path: root/scd/app-openpgp.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2020-01-10 06:58:49 +0000
committerNIIBE Yutaka <[email protected]>2020-01-10 06:58:49 +0000
commit0cfded4bb1484366c785c268f2fb1061c7be5fdb (patch)
treef0616de7da099c3b413b0cdf59dfe6e78036c7fe /scd/app-openpgp.c
parentscd:openpgp: Implement PIN cache. (diff)
downloadgnupg-0cfded4bb1484366c785c268f2fb1061c7be5fdb.tar.gz
gnupg-0cfded4bb1484366c785c268f2fb1061c7be5fdb.zip
scd: Implement direct access by KEYGRIP for GETATTR and READKEY.
* scd/app-openpgp.c (do_readkey): Handle KEYGRIP access. * scd/command.c (do_readkey): New. (cmd_readkey): Use do_readkey supporting KEYGRIP access. (cmd_getattr): Supporting KEYGRIP access. Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to 'scd/app-openpgp.c')
-rw-r--r--scd/app-openpgp.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c
index b5906f887..2301ba3f5 100644
--- a/scd/app-openpgp.c
+++ b/scd/app-openpgp.c
@@ -1920,7 +1920,21 @@ do_readkey (app_t app, ctrl_t ctrl, const char *keyid, unsigned int flags,
int keyno;
unsigned char *buf;
- if (!strcmp (keyid, "OPENPGP.1"))
+ if (strlen (keyid) == 40)
+ {
+ const unsigned char *keygrip_str;
+
+ for (keyno = 0; keyno < 3; keyno++)
+ {
+ keygrip_str = app->app_local->pk[keyno].keygrip_str;
+ if (!strncmp (keygrip_str, keyid, 40))
+ break;
+ }
+
+ if (keyno >= 3)
+ return gpg_error (GPG_ERR_INV_ID);
+ }
+ else if (!strcmp (keyid, "OPENPGP.1"))
keyno = 0;
else if (!strcmp (keyid, "OPENPGP.2"))
keyno = 1;