wintrust(3/5): Partially implement SoftpubAuthenticode
Juan Lang
juan.lang at gmail.com
Tue Sep 11 12:38:57 CDT 2007
--Juan
-------------- next part --------------
From 7f3594670adf38e39f144cf5d13fe9156d67979a Mon Sep 17 00:00:00 2001
From: Juan Lang <juan.lang at gmail.com>
Date: Tue, 11 Sep 2007 10:23:03 -0700
Subject: [PATCH] Partially implement SoftpubAuthenticode
---
dlls/wintrust/softpub.c | 49 +++++++++++++++++++++++++++++++++++++++++++
dlls/wintrust/wintrust.spec | 2 +-
2 files changed, 50 insertions(+), 1 deletions(-)
diff --git a/dlls/wintrust/softpub.c b/dlls/wintrust/softpub.c
index 2008750..785dc8a 100644
--- a/dlls/wintrust/softpub.c
+++ b/dlls/wintrust/softpub.c
@@ -572,6 +572,55 @@ HRESULT WINAPI WintrustCertificateTrust(
return ret ? S_OK : S_FALSE;
}
+HRESULT WINAPI SoftpubAuthenticode(CRYPT_PROVIDER_DATA *data)
+{
+ BOOL ret;
+ CERT_CHAIN_POLICY_STATUS policyStatus = { sizeof(policyStatus), 0 };
+
+ if (data->pWintrustData->dwUIChoice != WTD_UI_NONE)
+ FIXME("unimplemented for UI choice %d\n",
+ data->pWintrustData->dwUIChoice);
+ if (!data->csSigners)
+ {
+ ret = FALSE;
+ policyStatus.dwError = TRUST_E_NOSIGNATURE;
+ }
+ else
+ {
+ DWORD i;
+
+ ret = TRUE;
+ for (i = 0; ret && i < data->csSigners; i++)
+ {
+ CERT_CHAIN_POLICY_PARA policyPara = { sizeof(policyPara), 0 };
+
+ if (data->dwRegPolicySettings & WTPF_TRUSTTEST)
+ policyPara.dwFlags |= CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG;
+ if (data->dwRegPolicySettings & WTPF_TESTCANBEVALID)
+ policyPara.dwFlags |= CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG;
+ if (data->dwRegPolicySettings & WTPF_IGNOREEXPIRATION)
+ policyPara.dwFlags |=
+ CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG |
+ CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG |
+ CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG;
+ if (data->dwRegPolicySettings & WTPF_IGNOREREVOKATION)
+ policyPara.dwFlags |=
+ CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG |
+ CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG |
+ CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG |
+ CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG;
+ CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_AUTHENTICODE,
+ data->pasSigners[i].pChainContext, &policyPara, &policyStatus);
+ if (policyStatus.dwError != NO_ERROR)
+ ret = FALSE;
+ }
+ }
+ if (!ret)
+ data->padwTrustStepErrors[TRUSTERROR_STEP_FINAL_POLICYPROV] =
+ policyStatus.dwError;
+ return ret ? S_OK : S_FALSE;
+}
+
HRESULT WINAPI SoftpubCleanup(CRYPT_PROVIDER_DATA *data)
{
DWORD i, j;
diff --git a/dlls/wintrust/wintrust.spec b/dlls/wintrust/wintrust.spec
index f260193..a28257d 100644
--- a/dlls/wintrust/wintrust.spec
+++ b/dlls/wintrust/wintrust.spec
@@ -56,7 +56,7 @@
@ stub OfficeCleanupPolicy
@ stub OfficeInitializePolicy
@ stub OpenPersonalTrustDBDialog
-@ stub SoftpubAuthenticode
+@ stdcall SoftpubAuthenticode(ptr)
@ stdcall SoftpubCheckCert(ptr long long long)
@ stdcall SoftpubCleanup(ptr)
@ stub SoftpubDefCertInit
--
1.4.1
More information about the wine-patches
mailing list