rsaenh: Don't return salt for algorithms that don't support it.
authorJuan Lang <juan.lang@gmail.com>
Tue, 30 Mar 2010 19:05:25 +0000 (12:05 -0700)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 31 Mar 2010 09:36:16 +0000 (11:36 +0200)
dlls/rsaenh/rsaenh.c
dlls/rsaenh/tests/rsaenh.c

index d35805ade25661d080c497f9cb73078aa3054c9c..8a5be9935c3db0940fe32fabb9af3ab2b093415a 100644 (file)
@@ -3513,8 +3513,16 @@ BOOL WINAPI RSAENH_CPGetKeyParam(HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam
                               pCryptKey->dwBlockLen);
         
         case KP_SALT:
-            return copy_param(pbData, pdwDataLen, 
-                    &pCryptKey->abKeyValue[pCryptKey->dwKeyLen], pCryptKey->dwSaltLen);
+            switch (pCryptKey->aiAlgid) {
+                case CALG_RC2:
+                case CALG_RC4:
+                    return copy_param(pbData, pdwDataLen,
+                            &pCryptKey->abKeyValue[pCryptKey->dwKeyLen],
+                            pCryptKey->dwSaltLen);
+                default:
+                    SetLastError(NTE_BAD_KEY);
+                    return FALSE;
+            }
 
         case KP_PADDING:
             dwValue = PKCS5_PADDING;
index 53fc0d69dec10f22b5ba9831bfa4cb08f1533a98..b4bdcfac9305fada3790fae7d9290f45e39531aa 100644 (file)
@@ -744,7 +744,6 @@ static void test_aes(int keylen)
 
     /* AES provider doesn't support salt */
     result = CryptGetKeyParam(hKey, KP_SALT, NULL, &dwLen, 0);
-    todo_wine
     ok(!result && (GetLastError() == NTE_BAD_KEY || GetLastError() == ERROR_NO_TOKEN /* Win7 */),
        "expected NTE_BAD_KEY or ERROR_NO_TOKEN, got %08x\n", GetLastError());
 
@@ -1742,7 +1741,6 @@ static void test_rsa_encrypt(void)
 
     /* An RSA key doesn't support salt */
     result = CryptGetKeyParam(hRSAKey, KP_SALT, NULL, &dwLen, 0);
-    todo_wine
     ok(!result && GetLastError() == NTE_BAD_KEY,
        "expected NTE_BAD_KEY, got %08x\n", GetLastError());