diff options
author | NIIBE Yutaka <gniibe@fsij.org> | 2020-09-08 08:34:42 +0200 |
---|---|---|
committer | NIIBE Yutaka <gniibe@fsij.org> | 2020-09-08 08:34:42 +0200 |
commit | 2bc1ec294422504e2d2e5d20716aba68f1c2b0d7 (patch) | |
tree | dbf3e2e3ff84482a72b8d09b44b8297dea76251c /g10 | |
parent | scd: Add a workaround for Yubikey. (diff) | |
download | gnupg2-2bc1ec294422504e2d2e5d20716aba68f1c2b0d7.tar.xz gnupg2-2bc1ec294422504e2d2e5d20716aba68f1c2b0d7.zip |
gpg,tools: Add handling of supported algorithms by a card.
* g10/call-agent.h (struct agent_card_info_s): Add supported_keyalgo.
* g10/call-agent.c (learn_status_cb): Parse KEY-ATTR-INFO.
(agent_release_card_info): Release supported_keyalgo.
* tools/gpg-card.h (struct card_info_s): Add supported_keyalgo.
* tools/card-call-scd.c (learn_status_cb): Parse KEY-ATTR-INFO.
(release_card_info): Release supported_keyalgo.
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
Diffstat (limited to 'g10')
-rw-r--r-- | g10/call-agent.c | 24 | ||||
-rw-r--r-- | g10/call-agent.h | 1 |
2 files changed, 25 insertions, 0 deletions
diff --git a/g10/call-agent.c b/g10/call-agent.c index 4e3bdf9e4..42e2d3720 100644 --- a/g10/call-agent.c +++ b/g10/call-agent.c @@ -499,6 +499,11 @@ agent_release_card_info (struct agent_card_info_s *info) xfree (info->private_do[i]); info->private_do[i] = NULL; } + for (i=0; i < DIM(info->supported_keyalgo); i++) + { + free_strlist (info->supported_keyalgo[i]); + info->supported_keyalgo[i] = NULL; + } } @@ -744,6 +749,25 @@ learn_status_cb (void *opaque, const char *line) parm->uif[no] = (data[0] != 0xff); xfree (data); } + else if (keywordlen == 13 && !memcmp (keyword, "KEY-ATTR-INFO", 13)) + { + if (!strncmp (line, "OPENPGP.", 8)) + { + int no; + + line += 8; + no = atoi (line); + if (no >= 1 && no <= 3) + { + no--; + line++; + while (spacep (line)) + line++; + append_to_strlist (&parm->supported_keyalgo[no], xstrdup (line)); + } + } + /* Skip when it's not "OPENPGP.[123]". */ + } return 0; } diff --git a/g10/call-agent.h b/g10/call-agent.h index 8f929be27..4a66af2aa 100644 --- a/g10/call-agent.h +++ b/g10/call-agent.h @@ -76,6 +76,7 @@ struct agent_card_info_s unsigned int status_indicator; int kdf_do_enabled; /* Non-zero if card has a KDF object, 0 if not. */ int uif[3]; /* True if User Interaction Flag is on. */ + strlist_t supported_keyalgo[3]; }; |