aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2022-11-15 08:56:13 +0000
committerWerner Koch <[email protected]>2022-11-15 09:47:33 +0000
commit1307081dc0b4423667bd4607fba7a88359dec020 (patch)
tree3926a7a6ac90e1f4a27e62f2a5dacd61d92e8eb3
parentdirmngr: Support ECDSA for OCSP. (diff)
downloadgnupg-1307081dc0b4423667bd4607fba7a88359dec020.tar.gz
gnupg-1307081dc0b4423667bd4607fba7a88359dec020.zip
dirmngr: Fix verification of ECDSA signed CRLs.
* dirmngr/crlcache.c (finish_sig_check): Use raw value for the data. -- This had the usual signed/unsigned problem. By using the modern form we enforce Libgcrypt internal parsing as unsigned integer. (cherry picked from commit 868dabb4027a03f4ce39be3c143b480bccde1a63)
-rw-r--r--dirmngr/crlcache.c5
-rw-r--r--dirmngr/validate.c2
2 files changed, 4 insertions, 3 deletions
diff --git a/dirmngr/crlcache.c b/dirmngr/crlcache.c
index 29b8a06da..00f76d4df 100644
--- a/dirmngr/crlcache.c
+++ b/dirmngr/crlcache.c
@@ -1841,9 +1841,10 @@ finish_sig_check (ksba_crl_t crl, gcry_md_hd_t md, int algo,
if (n > qbits/8)
n = qbits/8;
- err = gcry_sexp_build (&s_hash, NULL, "%b",
+ err = gcry_sexp_build (&s_hash, NULL, "(data(flags raw)(value %b))",
(int)n,
gcry_md_read (md, algo));
+
}
else
{
@@ -1862,7 +1863,7 @@ finish_sig_check (ksba_crl_t crl, gcry_md_hd_t md, int algo,
/* Pass this on to the signature verification. */
err = gcry_pk_verify (s_sig, s_hash, s_pkey);
if (DBG_X509)
- log_debug ("gcry_pk_verify: %s\n", gpg_strerror (err));
+ log_debug ("%s: gcry_pk_verify: %s\n", __func__, gpg_strerror (err));
leave:
xfree (sigval);
diff --git a/dirmngr/validate.c b/dirmngr/validate.c
index afd9b304d..b3a1c14a1 100644
--- a/dirmngr/validate.c
+++ b/dirmngr/validate.c
@@ -1172,7 +1172,7 @@ check_cert_sig (ksba_cert_t issuer_cert, ksba_cert_t cert)
if (!err)
err = gcry_pk_verify (s_sig, s_hash, s_pkey);
if (DBG_X509)
- log_debug ("gcry_pk_verify: %s\n", gpg_strerror (err));
+ log_debug ("%s: gcry_pk_verify: %s\n", __func__, gpg_strerror (err));
leave:
gcry_md_close (md);