From 8e01676981206c209c0bfcb92633d9d2f06a2d90 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Fri, 19 Jul 2019 13:26:49 +0900 Subject: [PATCH] card: Fix showing KDF object attribute. * g10/call-agent.c (learn_status_cb): Parse the KDF DO. * g10/card-util.c (current_card_status): Show it correctly. -- Backport master commit of: 98f4eff7ffde106ae4f60739d1104282430ac14f Signed-off-by: NIIBE Yutaka --- g10/call-agent.c | 10 +++++++++- g10/call-agent.h | 2 +- g10/card-util.c | 23 ++++++++++++++++++++--- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/g10/call-agent.c b/g10/call-agent.c index 463050638..b62bd3307 100644 --- a/g10/call-agent.c +++ b/g10/call-agent.c @@ -706,7 +706,15 @@ learn_status_cb (void *opaque, const char *line) } else if (keywordlen == 3 && !memcmp (keyword, "KDF", 3)) { - parm->kdf_do_enabled = 1; + unsigned char *data = unescape_status_string (line); + + if (data[2] != 0x03) + parm->kdf_do_enabled = 0; + else if (data[22] != 0x85) + parm->kdf_do_enabled = 1; + else + parm->kdf_do_enabled = 2; + xfree (data); } return 0; diff --git a/g10/call-agent.h b/g10/call-agent.h index d7f102c2e..d929adaca 100644 --- a/g10/call-agent.h +++ b/g10/call-agent.h @@ -71,7 +71,7 @@ struct agent_card_info_s unsigned int kdf:1; /* KDF object to support PIN hashing available. */ } extcap; unsigned int status_indicator; - int kdf_do_enabled; /* Card has a KDF object */ + int kdf_do_enabled; /* Non-zero if card has a KDF object, 0 if not. */ }; diff --git a/g10/card-util.c b/g10/card-util.c index 13c244518..d952eab4c 100644 --- a/g10/card-util.c +++ b/g10/card-util.c @@ -511,7 +511,16 @@ current_card_status (ctrl_t ctrl, estream_t fp, es_fprintf (fp, "sigcount:%lu:::\n", info.sig_counter); if (info.extcap.kdf) { - es_fprintf (fp, "kdf:%s:\n", info.kdf_do_enabled ? "on" : "off"); + const char *setup; + + if (info.kdf_do_enabled == 0) + setup = "off"; + else if (info.kdf_do_enabled == 1) + setup = "single"; + else + setup = "on"; + + es_fprintf (fp, "kdf:%s:\n", setup); } for (i=0; i < 4; i++) @@ -618,8 +627,16 @@ current_card_status (ctrl_t ctrl, estream_t fp, tty_fprintf (fp, "Signature counter : %lu\n", info.sig_counter); if (info.extcap.kdf) { - tty_fprintf (fp, "KDF setting ......: %s\n", - info.kdf_do_enabled ? "on" : "off"); + const char *setup; + + if (info.kdf_do_enabled == 0) + setup = "off"; + else if (info.kdf_do_enabled == 1) + setup = "single"; + else + setup = "on"; + + tty_fprintf (fp, "KDF setting ......: %s\n", setup); } tty_fprintf (fp, "Signature key ....:"); print_sha1_fpr (fp, info.fpr1valid? info.fpr1:NULL);