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