From 2bc1ec294422504e2d2e5d20716aba68f1c2b0d7 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Tue, 8 Sep 2020 15:34:42 +0900 Subject: 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 --- g10/call-agent.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'g10/call-agent.c') 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; } -- cgit v1.2.3