From 95156ef9bfb6a3a525454d50ae2f5b538ccbd774 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Fri, 12 Mar 2021 16:20:28 +0900 Subject: [PATCH] scd: Fix computing fingerprint for ECC with SOS. * scd/app-openpgp.c (count_sos_bits): New. Count as sos_write does. (store_fpr): For ECC, use count_sos_bits. -- Signed-off-by: NIIBE Yutaka --- scd/app-openpgp.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c index 918452cd0..987a31be3 100644 --- a/scd/app-openpgp.c +++ b/scd/app-openpgp.c @@ -717,6 +717,21 @@ count_bits (const unsigned char *a, size_t len) return n; } +static unsigned int +count_sos_bits (const unsigned char *a, size_t len) +{ + unsigned int n = len * 8; + int i; + + if (*a == 0) + return n; + + for (i=7; i && !(*a & (1<> 8; *p++ = nbits; } + else if (i == 1) + { + nbits = count_sos_bits (m[i], mlen[i]); + *p++ = nbits >> 8; + *p++ = nbits; + } memcpy (p, m[i], mlen[i]); p += mlen[i]; }