Juan Lang : rsaenh: Support setting salt via KP_SALT (resend).
Alexandre Julliard
julliard at winehq.org
Wed Mar 31 10:04:49 CDT 2010
Module: wine
Branch: master
Commit: c5a6b7b36674e8b7f7dc687b01773b88fa7d7312
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c5a6b7b36674e8b7f7dc687b01773b88fa7d7312
Author: Juan Lang <juan.lang at gmail.com>
Date: Tue Mar 30 10:26:48 2010 -0700
rsaenh: Support setting salt via KP_SALT (resend).
---
dlls/rsaenh/rsaenh.c | 27 +++++++++++++++++++++++++++
dlls/rsaenh/tests/rsaenh.c | 3 ---
2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/dlls/rsaenh/rsaenh.c b/dlls/rsaenh/rsaenh.c
index 74ad392..d35805a 100644
--- a/dlls/rsaenh/rsaenh.c
+++ b/dlls/rsaenh/rsaenh.c
@@ -3354,6 +3354,33 @@ BOOL WINAPI RSAENH_CPSetKeyParam(HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam
setup_key(pCryptKey);
return TRUE;
+ case KP_SALT:
+ switch (pCryptKey->aiAlgid) {
+ case CALG_RC2:
+ case CALG_RC4:
+ if (!pbData)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+ /* MSDN: the base provider always sets eleven bytes of
+ * salt value.
+ */
+ memcpy(pCryptKey->abKeyValue + pCryptKey->dwKeyLen,
+ pbData, 11);
+ pCryptKey->dwSaltLen = 11;
+ setup_key(pCryptKey);
+ /* Strange but true: salt length reset to 0 after setting
+ * it via KP_SALT.
+ */
+ pCryptKey->dwSaltLen = 0;
+ break;
+ default:
+ SetLastError(NTE_BAD_KEY);
+ return FALSE;
+ }
+ return TRUE;
+
case KP_SALT_EX:
{
CRYPT_INTEGER_BLOB *blob = (CRYPT_INTEGER_BLOB *)pbData;
diff --git a/dlls/rsaenh/tests/rsaenh.c b/dlls/rsaenh/tests/rsaenh.c
index 9e17531..53fc0d6 100644
--- a/dlls/rsaenh/tests/rsaenh.c
+++ b/dlls/rsaenh/tests/rsaenh.c
@@ -986,13 +986,11 @@ static void test_rc2(void)
/* Setting the salt also succeeds... */
result = CryptSetKeyParam(hKey, KP_SALT, pbData, 0);
- todo_wine
ok(result, "setting salt failed: %08x\n", GetLastError());
/* but the resulting salt length is now zero? */
dwLen = 0;
result = CryptGetKeyParam(hKey, KP_SALT, NULL, &dwLen, 0);
ok(result, "%08x\n", GetLastError());
- todo_wine
ok(dwLen == 0, "unexpected salt length %d\n", dwLen);
/* What sizes salt can I set? */
salt.pbData = pbData;
@@ -1154,7 +1152,6 @@ static void test_rc4(void)
/* Setting the salt also succeeds... */
result = CryptSetKeyParam(hKey, KP_SALT, pbData, 0);
- todo_wine
ok(result, "setting salt failed: %08x\n", GetLastError());
/* but the resulting salt length is now zero? */
dwLen = 0;
More information about the wine-cvs
mailing list