Module: wine Branch: master Commit: 86dd877f4e5d6b1652501b53c8648e017b8a03c9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=86dd877f4e5d6b1652501b53c8...
Author: Bruno Jesus 00cpxxx@gmail.com Date: Wed Jul 30 23:21:11 2014 -0300
rsaenh: The RC2 algorithm from Base provider supports only 40 bit keys.
---
dlls/rsaenh/rsaenh.c | 11 +++++++++-- dlls/rsaenh/tests/rsaenh.c | 1 - 2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/dlls/rsaenh/rsaenh.c b/dlls/rsaenh/rsaenh.c index fce9f1a..dc9e70f 100644 --- a/dlls/rsaenh/rsaenh.c +++ b/dlls/rsaenh/rsaenh.c @@ -3495,22 +3495,29 @@ BOOL WINAPI RSAENH_CPSetKeyParam(HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam case KP_EFFECTIVE_KEYLEN: switch (pCryptKey->aiAlgid) { case CALG_RC2: + { + DWORD keylen; + KEYCONTAINER *pKeyContainer = get_key_container(pCryptKey->hProv); + if (!pbData) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } - else if (!*(DWORD *)pbData || *(DWORD *)pbData > 1024) + keylen = *(DWORD *)pbData; + if (!keylen || keylen > 1024 || (keylen != 40 && + pKeyContainer->dwPersonality == RSAENH_PERSONALITY_BASE)) { SetLastError(NTE_BAD_DATA); return FALSE; } else { - pCryptKey->dwEffectiveKeyLen = *(DWORD *)pbData; + pCryptKey->dwEffectiveKeyLen = keylen; setup_key(pCryptKey); } break; + } default: SetLastError(NTE_BAD_TYPE); return FALSE; diff --git a/dlls/rsaenh/tests/rsaenh.c b/dlls/rsaenh/tests/rsaenh.c index 1dfca3c..46d0451 100644 --- a/dlls/rsaenh/tests/rsaenh.c +++ b/dlls/rsaenh/tests/rsaenh.c @@ -1529,7 +1529,6 @@ static void test_rc2(void) if (!BASE_PROV) ok(result, "expected success, got error 0x%08X\n", GetLastError()); else - todo_wine ok(!result, "expected error\n");
dwLen = sizeof(dwKeyLen);