Juan Lang : wintrust: Partially implement SoftpubAuthenticode.
Alexandre Julliard
julliard at winehq.org
Thu Sep 13 07:17:19 CDT 2007
Module: wine
Branch: master
Commit: 0463f99b73ea92a6532ae38e5bf00d633049228c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0463f99b73ea92a6532ae38e5bf00d633049228c
Author: Juan Lang <juan.lang at gmail.com>
Date: Wed Sep 12 08:59:44 2007 -0700
wintrust: 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 86ef84e..3676652 100644
--- a/dlls/wintrust/softpub.c
+++ b/dlls/wintrust/softpub.c
@@ -575,6 +575,55 @@ HRESULT WINAPI WintrustCertificateTrust(CRYPT_PROVIDER_DATA *data)
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
More information about the wine-cvs
mailing list