From: Bruno Jesus <00cpxxx@gmail.com> Subject: [2/2] rsaenh: The RC2 algorithm from Base provider supports only 40 bit keys Message-Id: Date: Wed, 30 Jul 2014 23:21:11 -0300 --- 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 cc287b2..11a5704 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); -- 1.8.3.2