From 2c9ab24366907a95f5741c20beaaee7eabc765ff Mon Sep 17 00:00:00 2001 From: Paul Gofman Date: Fri, 30 Sep 2022 21:37:51 -0500 Subject: [PATCH] wintrust: Support WSS_GET_SECONDARY_SIG_COUNT in Softpub provider. --- dlls/wintrust/softpub.c | 5 +++++ dlls/wintrust/tests/softpub.c | 6 +++--- dlls/wintrust/wintrust_main.c | 4 ++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/dlls/wintrust/softpub.c b/dlls/wintrust/softpub.c index d4f0088f620..06b178a98b9 100644 --- a/dlls/wintrust/softpub.c +++ b/dlls/wintrust/softpub.c @@ -909,6 +909,11 @@ HRESULT WINAPI SoftpubLoadSignature(CRYPT_PROVIDER_DATA *data) data->pSigState->hPrimarySig = CryptMsgDuplicate(data->hMsg); load_secondary_signatures(data, data->pSigState->hPrimarySig); } + if (data->pSigSettings) + { + if (data->pSigSettings->dwFlags & WSS_GET_SECONDARY_SIG_COUNT) + data->pSigSettings->cSecondarySigs = data->pSigState->cSecondarySigs; + } } if (!err && data->hMsg) diff --git a/dlls/wintrust/tests/softpub.c b/dlls/wintrust/tests/softpub.c index eb411bc7daf..77e15b2feb4 100644 --- a/dlls/wintrust/tests/softpub.c +++ b/dlls/wintrust/tests/softpub.c @@ -1830,7 +1830,7 @@ static void test_multiple_signatures(void) prov = (CRYPT_PROVIDER_DATA *)data.hWVTStateData; ok(prov->cbStruct == sizeof(*prov), "Got size %lu.\n", prov->cbStruct); ok(prov->csSigners == 1, "Got %lu.\n", prov->csSigners); - todo_wine ok(prov->pSigSettings == &settings, "Got %p, expected %p.\n", prov->pSigSettings, &settings); + ok(prov->pSigSettings == &settings, "Got %p, expected %p.\n", prov->pSigSettings, &settings); ok(!!prov->pSigState, "Got %p, expected %p.\n", prov->pSigSettings, &settings); if (prov->cbStruct == sizeof(*prov) && prov->pSigState) { @@ -1867,7 +1867,7 @@ static void test_multiple_signatures(void) settings.dwVerifiedSigIndex = 0xcccccccc; status = WinVerifyTrust(NULL, &WVTPolicyGUID, &data); todo_wine ok(status == CERT_E_UNTRUSTEDROOT || status == CERT_E_CHAINING, "Failed, ret %#lx\n", status); - todo_wine ok(settings.cSecondarySigs == 2, "Got %lu.\n", settings.cSecondarySigs); + ok(settings.cSecondarySigs == 2, "Got %lu.\n", settings.cSecondarySigs); todo_wine ok(settings.dwVerifiedSigIndex == 2, "Got %lu.\n", settings.dwVerifiedSigIndex); data.dwStateAction = WTD_STATEACTION_CLOSE; @@ -1881,7 +1881,7 @@ static void test_multiple_signatures(void) settings.dwIndex = 1; status = WinVerifyTrust(NULL, &WVTPolicyGUID, &data); todo_wine ok(status == CERT_E_UNTRUSTEDROOT || status == CERT_E_CHAINING, "Failed, ret %#lx\n", status); - todo_wine ok(settings.cSecondarySigs == 2, "Got %lu.\n", settings.cSecondarySigs); + ok(settings.cSecondarySigs == 2, "Got %lu.\n", settings.cSecondarySigs); todo_wine ok(settings.dwVerifiedSigIndex == 1, "Got %lu.\n", settings.dwVerifiedSigIndex); settings.dwIndex = 0; diff --git a/dlls/wintrust/wintrust_main.c b/dlls/wintrust/wintrust_main.c index 33695008b24..925ae7ca85a 100644 --- a/dlls/wintrust/wintrust_main.c +++ b/dlls/wintrust/wintrust_main.c @@ -294,6 +294,10 @@ static LONG WINTRUST_DefaultVerify(HWND hwnd, GUID *actionID, data->hWVTStateData = provData; provData->pWintrustData = data; + + if (WVT_ISINSTRUCT(WINTRUST_DATA, data->cbStruct, pSignatureSettings)) + provData->pSigSettings = data->pSignatureSettings; + if (hwnd == INVALID_HANDLE_VALUE) provData->hWndParent = GetDesktopWindow(); else