At least CryptSetKeyParam(KP_X) should accept NULL pbData.
-- v2: advapi32: CryptSetKeyParam() should accept NULL pbData. rsaenh: Validate pbData in CPSetKeyParam(). dssenh: Add CPSetKeyParam() stub implementation.
From: Dmitry Timoshkov dmitry@baikal.ru
dlls/dssenh/tests depend on CryptSetKeyParam(KP_X, NULL) returning FALSE/ERROR_INVALID_PARAMETER.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/dssenh/dssenh.spec | 2 +- dlls/dssenh/main.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/dlls/dssenh/dssenh.spec b/dlls/dssenh/dssenh.spec index 9060614ce49..fb83aed8be6 100644 --- a/dlls/dssenh/dssenh.spec +++ b/dlls/dssenh/dssenh.spec @@ -19,7 +19,7 @@ @ stdcall CPImportKey(ptr ptr long ptr long ptr) @ stdcall CPReleaseContext(ptr long) @ stdcall CPSetHashParam(ptr ptr long ptr long) -@ stub CPSetKeyParam +@ stdcall CPSetKeyParam(ptr ptr long ptr long) @ stub CPSetProvParam @ stdcall CPSignHash(ptr ptr long wstr long ptr ptr) @ stdcall CPVerifySignature(ptr ptr ptr long ptr wstr long) diff --git a/dlls/dssenh/main.c b/dlls/dssenh/main.c index 365b365f53f..f6f01772d35 100644 --- a/dlls/dssenh/main.c +++ b/dlls/dssenh/main.c @@ -749,6 +749,17 @@ BOOL WINAPI CPGetUserKey( HCRYPTPROV hprov, DWORD keyspec, HCRYPTKEY *ret_key ) return ret; }
+BOOL WINAPI CPSetKeyParam( HCRYPTPROV hprov, HCRYPTKEY hkey, DWORD param, BYTE *data, DWORD flags ) +{ + if (!data) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + + return FALSE; +} + BOOL WINAPI CPGenRandom( HCRYPTPROV hprov, DWORD len, BYTE *buffer ) { struct container *container = (struct container *)hprov;
From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/rsaenh/rsaenh.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/dlls/rsaenh/rsaenh.c b/dlls/rsaenh/rsaenh.c index 3a2d7126ca4..ce740172b61 100644 --- a/dlls/rsaenh/rsaenh.c +++ b/dlls/rsaenh/rsaenh.c @@ -3797,7 +3797,7 @@ BOOL WINAPI RSAENH_CPGetHashParam(HCRYPTPROV hProv, HCRYPTHASH hHash, DWORD dwPa * CRYPT_EXPORT, CRYPT_READ, CRYPT_WRITE, CRYPT_MAC * - KP_IV: Initialization vector */ -BOOL WINAPI RSAENH_CPSetKeyParam(HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, +BOOL WINAPI RSAENH_CPSetKeyParam(HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD dwFlags) { CRYPTKEY *pCryptKey; @@ -3815,13 +3815,19 @@ BOOL WINAPI RSAENH_CPSetKeyParam(HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam SetLastError(NTE_BAD_FLAGS); return FALSE; } - + if (!lookup_handle(&handle_table, hKey, RSAENH_MAGIC_KEY, (OBJECTHDR**)&pCryptKey)) { SetLastError(NTE_BAD_KEY); return FALSE; } - + + if (!pbData) + { + SetLastError(NTE_BAD_DATA); + return FALSE; + } + switch (dwParam) { case KP_PADDING: /* The MS providers only support PKCS5_PADDING */
From: Dmitry Timoshkov dmitry@baikal.ru
At least CryptSetKeyParam(KP_X) should accept NULL pbData.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/advapi32/crypt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/advapi32/crypt.c b/dlls/advapi32/crypt.c index 73c9b1d219d..0c94999660a 100644 --- a/dlls/advapi32/crypt.c +++ b/dlls/advapi32/crypt.c @@ -1979,7 +1979,7 @@ BOOL WINAPI CryptSetKeyParam (HCRYPTKEY hKey, DWORD dwParam, const BYTE *pbData, if (!(key = key_from_handle(hKey))) return FALSE;
- if (!pbData || !key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV) + if (!key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE;
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=145211
Your paranoid android.
=== debian11 (32 bit report) ===
rsaenh: rsaenh.c:1537: Test failed: 80090005 rsaenh.c:1537: Test failed: 80090005 rsaenh.c:1537: Test failed: 80090005
=== debian11b (64 bit WoW report) ===
rsaenh: rsaenh.c:1537: Test failed: 80090005 rsaenh.c:1537: Test failed: 80090005 rsaenh.c:1537: Test failed: 80090005
On Wed May 1 07:51:52 2024 +0000, Hans Leidekker wrote:
rsaenh.CPSetKeyParam() should also validate the data parameter.
Is there anything else that needs to be addressed?
On Wed May 1 07:51:52 2024 +0000, Dmitry Timoshkov wrote:
Is there anything else that needs to be addressed?
There are test failures.