crypt32: Compare CRL's authority key identifier against the certificate's subject key identifier property, which also decodes the certificate's extension if necessary.
diff --git a/dlls/crypt32/crl.c b/dlls/crypt32/crl.c
index a24e6ad..72180c5 100644
--- a/dlls/crypt32/crl.c
+++ b/dlls/crypt32/crl.c
@@ -167,14 +167,21 @@
}
else if (info->KeyId.cbData)
{
- if ((ext = CertFindExtension(
- szOID_SUBJECT_KEY_IDENTIFIER,
- issuer->pCertInfo->cExtension,
- issuer->pCertInfo->rgExtension)))
+ DWORD size;
+
+ ret = CertGetCertificateContextProperty(issuer,
+ CERT_KEY_IDENTIFIER_PROP_ID, NULL, &size);
+ if (ret && size == info->KeyId.cbData)
{
- if (info->KeyId.cbData == ext->Value.cbData)
- ret = !memcmp(info->KeyId.pbData,
- ext->Value.pbData, info->KeyId.cbData);
+ LPBYTE buf = CryptMemAlloc(size);
+
+ if (buf)
+ {
+ CertGetCertificateContextProperty(issuer,
+ CERT_KEY_IDENTIFIER_PROP_ID, buf, &size);
+ ret = !memcmp(buf, info->KeyId.pbData, size);
+ CryptMemFree(buf);
+ }
else
ret = FALSE;
}