[2/2] rsaenh: The RC2 algorithm from Base provider supports only 40 bit keys
Bruno Jesus
00cpxxx at gmail.com
Wed Jul 30 21:21:11 CDT 2014
-------------- next part --------------
---
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
More information about the wine-patches
mailing list