Juan Lang : crypt32: Implement CertFindCertificateInStore for CERT_FIND_SIGNATURE_HASH.
Alexandre Julliard
julliard at winehq.org
Tue Aug 19 08:46:25 CDT 2008
Module: wine
Branch: master
Commit: a1e14feeac8a5bbcda8ea9ecfd35252ba1a91cbb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a1e14feeac8a5bbcda8ea9ecfd35252ba1a91cbb
Author: Juan Lang <juan.lang at gmail.com>
Date: Fri Aug 8 10:44:46 2008 -0700
crypt32: Implement CertFindCertificateInStore for CERT_FIND_SIGNATURE_HASH.
---
dlls/crypt32/cert.c | 29 +++++++++++++++++++++++++++++
1 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/dlls/crypt32/cert.c b/dlls/crypt32/cert.c
index 4d5d5e4..d9ab229 100644
--- a/dlls/crypt32/cert.c
+++ b/dlls/crypt32/cert.c
@@ -1143,6 +1143,32 @@ static BOOL compare_existing_cert(PCCERT_CONTEXT pCertContext, DWORD dwType,
pCertContext->pCertInfo, toCompare->pCertInfo);
}
+static BOOL compare_cert_by_signature_hash(PCCERT_CONTEXT pCertContext, DWORD dwType,
+ DWORD dwFlags, const void *pvPara)
+{
+ const CRYPT_HASH_BLOB *hash = (const CRYPT_HASH_BLOB *)pvPara;
+ DWORD size = 0;
+ BOOL ret;
+
+ ret = CertGetCertificateContextProperty(pCertContext,
+ CERT_SIGNATURE_HASH_PROP_ID, NULL, &size);
+ if (ret && size == hash->cbData)
+ {
+ LPBYTE buf = CryptMemAlloc(size);
+
+ if (buf)
+ {
+ CertGetCertificateContextProperty(pCertContext,
+ CERT_SIGNATURE_HASH_PROP_ID, buf, &size);
+ ret = !memcmp(buf, hash->pbData, size);
+ CryptMemFree(buf);
+ }
+ }
+ else
+ ret = FALSE;
+ return ret;
+}
+
PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE hCertStore,
DWORD dwCertEncodingType, DWORD dwFlags, DWORD dwType, const void *pvPara,
PCCERT_CONTEXT pPrevCertContext)
@@ -1179,6 +1205,9 @@ PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE hCertStore,
case CERT_COMPARE_EXISTING:
compare = compare_existing_cert;
break;
+ case CERT_COMPARE_SIGNATURE_HASH:
+ compare = compare_cert_by_signature_hash;
+ break;
default:
FIXME("find type %08x unimplemented\n", dwType);
compare = NULL;
More information about the wine-cvs
mailing list