Module: wine Branch: master Commit: ea43c5989cc6e44ad2681548f18efc389b330698 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ea43c5989cc6e44ad2681548f1...
Author: Juan Lang juan.lang@gmail.com Date: Thu Feb 10 09:40:14 2011 -0800
rsaenh: Disallow creating schannel master hashes before setting the client random and server random.
---
dlls/rsaenh/rsaenh.c | 7 +++++++ dlls/rsaenh/tests/rsaenh.c | 14 -------------- 2 files changed, 7 insertions(+), 14 deletions(-)
diff --git a/dlls/rsaenh/rsaenh.c b/dlls/rsaenh/rsaenh.c index afd06e1..5f67589 100644 --- a/dlls/rsaenh/rsaenh.c +++ b/dlls/rsaenh/rsaenh.c @@ -1857,6 +1857,13 @@ BOOL WINAPI RSAENH_CPCreateHash(HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey, SetLastError(NTE_BAD_KEY); return FALSE; } + if (Algid == CALG_SCHANNEL_MASTER_HASH && + ((!pCryptKey->siSChannelInfo.blobClientRandom.cbData) || + (!pCryptKey->siSChannelInfo.blobServerRandom.cbData))) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + }
if ((Algid == CALG_TLS1PRF) && (pCryptKey->dwState != RSAENH_KEYSTATE_MASTERKEY)) { SetLastError(NTE_BAD_KEY_STATE); diff --git a/dlls/rsaenh/tests/rsaenh.c b/dlls/rsaenh/tests/rsaenh.c index e3a31a2..0476275 100644 --- a/dlls/rsaenh/tests/rsaenh.c +++ b/dlls/rsaenh/tests/rsaenh.c @@ -2346,22 +2346,8 @@ static void test_schannel_provider(void) * random or server random set. */ result = CryptCreateHash(hProv, CALG_SCHANNEL_MASTER_HASH, hMasterSecret, 0, &hMasterHash); - todo_wine ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - if (result) - { - CryptDestroyHash(hMasterHash); - /* Reimporting the master secret is necessary under Wine until creating - * the hash fails as it should. - */ - CryptDestroyKey(hMasterSecret); - - dwLen = (DWORD)sizeof(abTLS1Master); - result = CryptImportKey(hProv, abTLS1Master, dwLen, hRSAKey, 0, &hMasterSecret); - ok (result, "%08x\n", GetLastError()); - if (!result) return; - }
/* Setting the TLS1 client and server random parameters, as well as the * MAC and encryption algorithm parameters. */