wintrust(6/8): Use a helper function to get a signer's cert info
from a message
Juan Lang
juan.lang at gmail.com
Tue Aug 28 18:22:17 CDT 2007
--Juan
-------------- next part --------------
From 8d56fd47557e119abcc5180c2136d97654394ff9 Mon Sep 17 00:00:00 2001
From: Juan Lang <juanlang at juan.corp.google.com>
Date: Tue, 28 Aug 2007 16:10:00 -0700
Subject: [PATCH] Use a helper function to get a signer's cert info from a message
---
dlls/wintrust/softpub.c | 74 ++++++++++++++++++++++++++++-------------------
1 files changed, 44 insertions(+), 30 deletions(-)
diff --git a/dlls/wintrust/softpub.c b/dlls/wintrust/softpub.c
index 4b6b33a..caab601 100644
--- a/dlls/wintrust/softpub.c
+++ b/dlls/wintrust/softpub.c
@@ -292,6 +292,34 @@ error:
return ret ? S_OK : S_FALSE;
}
+static CERT_INFO *WINTRUST_GetSignerCertInfo(CRYPT_PROVIDER_DATA *data,
+ DWORD signerIdx)
+{
+ BOOL ret;
+ CERT_INFO *certInfo = NULL;
+ DWORD size;
+
+ ret = CryptMsgGetParam(data->hMsg, CMSG_SIGNER_CERT_INFO_PARAM, signerIdx,
+ NULL, &size);
+ if (ret)
+ {
+ certInfo = data->psPfns->pfnAlloc(size);
+ if (certInfo)
+ {
+ ret = CryptMsgGetParam(data->hMsg, CMSG_SIGNER_CERT_INFO_PARAM,
+ signerIdx, certInfo, &size);
+ if (!ret)
+ {
+ data->psPfns->pfnFree(certInfo);
+ certInfo = NULL;
+ }
+ }
+ else
+ SetLastError(ERROR_OUTOFMEMORY);
+ }
+ return certInfo;
+}
+
HRESULT WINAPI SoftpubLoadSignature(CRYPT_PROVIDER_DATA *data)
{
BOOL ret;
@@ -311,45 +339,31 @@ HRESULT WINAPI SoftpubLoadSignature(CRYP
for (i = 0; ret && i < signerCount; i++)
{
- ret = CryptMsgGetParam(data->hMsg, CMSG_SIGNER_CERT_INFO_PARAM,
- i, NULL, &size);
- if (ret)
+ CERT_INFO *certInfo = WINTRUST_GetSignerCertInfo(data, i);
+
+ if (certInfo)
{
- CERT_INFO *certInfo = data->psPfns->pfnAlloc(size);
+ CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA para = { sizeof(para), 0, i,
+ CMSG_VERIFY_SIGNER_CERT, NULL };
- if (certInfo)
+ para.pvSigner = (LPVOID)CertGetSubjectCertificateFromStore(
+ data->pahStores[0], data->dwEncoding, certInfo);
+ if (para.pvSigner)
{
- ret = CryptMsgGetParam(data->hMsg,
- CMSG_SIGNER_CERT_INFO_PARAM, i, certInfo, &size);
- if (ret)
- {
- CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA para = {
- sizeof(para), 0, i, CMSG_VERIFY_SIGNER_CERT, NULL };
-
- para.pvSigner =
- (LPVOID)CertGetSubjectCertificateFromStore(
- data->pahStores[0], data->dwEncoding, certInfo);
- if (para.pvSigner)
- {
- ret = CryptMsgControl(data->hMsg, 0,
- CMSG_CTRL_VERIFY_SIGNATURE_EX, ¶);
- if (!ret)
- SetLastError(TRUST_E_CERT_SIGNATURE);
- }
- else
- {
- SetLastError(TRUST_E_NO_SIGNER_CERT);
- ret = FALSE;
- }
- }
- data->psPfns->pfnFree(certInfo);
+ ret = CryptMsgControl(data->hMsg, 0,
+ CMSG_CTRL_VERIFY_SIGNATURE_EX, ¶);
+ if (!ret)
+ SetLastError(TRUST_E_CERT_SIGNATURE);
}
else
{
- SetLastError(ERROR_OUTOFMEMORY);
+ SetLastError(TRUST_E_NO_SIGNER_CERT);
ret = FALSE;
}
+ data->psPfns->pfnFree(certInfo);
}
+ else
+ ret = FALSE;
}
}
else
--
1.4.1
More information about the wine-patches
mailing list