rsaenh: add support for mandatory parameters to
RSAENH_CPGetProvParam
Mounir IDRASSI
mounir.idrassi at idrix.fr
Wed May 9 05:16:52 CDT 2007
Hi,
This patch adds support for mandatory parameters in
RSAENH_CPGetProvParam. It also adds tests for them.
The mandatory parameters are: PP_UNIQUE_CONTAINER, PP_PROVTYPE,
PP_KEYSPEC, PP_KEYSET_TYPE, PP_KEYSTORAGE.
Mounir IDRASSI
IDRIX - Cryptography and IT Security Experts
http://www.idrix.fr
-------------- next part --------------
>From fa38a8c0c663ad11e04cecdbff82857153bd39b6 Mon Sep 17 00:00:00 2001
From: Mounir IDRASSI <mounir.idrassi at idrix.fr>
Date: Wed, 9 May 2007 03:33:45 +0200
Subject: rsaenh: fix bug in RSAENH_CPGetProvParam
---
dlls/rsaenh/rsaenh.c | 17 +++++++++++++++++
dlls/rsaenh/tests/rsaenh.c | 33 +++++++++++++++++++++++++++++----
2 files changed, 46 insertions(+), 4 deletions(-)
diff --git a/dlls/rsaenh/rsaenh.c b/dlls/rsaenh/rsaenh.c
index cfa230c..47dd2ea 100644
--- a/dlls/rsaenh/rsaenh.c
+++ b/dlls/rsaenh/rsaenh.c
@@ -2907,6 +2907,7 @@ BOOL WINAPI RSAENH_CPGetProvParam(HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData,
switch (dwParam)
{
case PP_CONTAINER:
+ case PP_UNIQUE_CONTAINER:/* MSDN says we can return the same value as PP_CONTAINER */
return copy_param(pbData, pdwDataLen, (CONST BYTE*)pKeyContainer->szName,
strlen(pKeyContainer->szName)+1);
@@ -2914,6 +2915,22 @@ BOOL WINAPI RSAENH_CPGetProvParam(HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData,
return copy_param(pbData, pdwDataLen, (CONST BYTE*)pKeyContainer->szProvName,
strlen(pKeyContainer->szProvName)+1);
+ case PP_PROVTYPE:
+ dwTemp = PROV_RSA_FULL;
+ return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwTemp, sizeof(dwTemp));
+
+ case PP_KEYSPEC:
+ dwTemp = AT_SIGNATURE | AT_KEYEXCHANGE;
+ return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwTemp, sizeof(dwTemp));
+
+ case PP_KEYSET_TYPE:
+ dwTemp = pKeyContainer->dwFlags & CRYPT_MACHINE_KEYSET;
+ return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwTemp, sizeof(dwTemp));
+
+ case PP_KEYSTORAGE:
+ dwTemp = CRYPT_SEC_DESCR;
+ return copy_param(pbData, pdwDataLen, (CONST BYTE*)&dwTemp, sizeof(dwTemp));
+
case PP_SIG_KEYSIZE_INC:
case PP_KEYX_KEYSIZE_INC:
dwTemp = 8;
diff --git a/dlls/rsaenh/tests/rsaenh.c b/dlls/rsaenh/tests/rsaenh.c
index b51a0a5..a0018f5 100644
--- a/dlls/rsaenh/tests/rsaenh.c
+++ b/dlls/rsaenh/tests/rsaenh.c
@@ -1480,7 +1480,8 @@ static void test_null_provider(void)
HCRYPTPROV prov;
HCRYPTKEY key;
BOOL result;
- DWORD keySpec, dataLen;
+ DWORD keySpec, dataLen,dwParam;
+ char szName[MAX_PATH];
result = CryptAcquireContext(NULL, szContainer, NULL, 0, 0);
ok(!result && GetLastError() == NTE_BAD_PROV_TYPE,
@@ -1556,11 +1557,35 @@ static void test_null_provider(void)
CRYPT_NEWKEYSET);
ok(result, "CryptAcquireContext failed: %08x\n", GetLastError());
if (!result) return;
+ /* Test provider parameters getter */
+ dataLen = sizeof(dwParam);
+ result = CryptGetProvParam(prov, PP_PROVTYPE, (LPBYTE)&dwParam, &dataLen, 0);
+ ok(result && dataLen == sizeof(dwParam) && dwParam == PROV_RSA_FULL,
+ "Expected PROV_RSA_FULL, got 0x%08X\n",dwParam);
+ dataLen = sizeof(dwParam);
+ result = CryptGetProvParam(prov, PP_KEYSET_TYPE, (LPBYTE)&dwParam, &dataLen, 0);
+ ok(result && dataLen == sizeof(dwParam) && dwParam == 0,
+ "Expected 0, got 0x%08X\n",dwParam);
+ dataLen = sizeof(dwParam);
+ result = CryptGetProvParam(prov, PP_KEYSTORAGE, (LPBYTE)&dwParam, &dataLen, 0);
+ ok(result && dataLen == sizeof(dwParam) && (dwParam & CRYPT_SEC_DESCR),
+ "Expected CRYPT_SEC_DESCR to be set, got 0x%08X\n",dwParam);
dataLen = sizeof(keySpec);
result = CryptGetProvParam(prov, PP_KEYSPEC, (LPBYTE)&keySpec, &dataLen, 0);
- if (result)
- ok(keySpec == (AT_KEYEXCHANGE | AT_SIGNATURE),
- "Expected AT_KEYEXCHANGE | AT_SIGNATURE, got %08x\n", keySpec);
+ ok(result && keySpec == (AT_KEYEXCHANGE | AT_SIGNATURE),
+ "Expected AT_KEYEXCHANGE | AT_SIGNATURE, got %08x\n", keySpec);
+ /* PP_CONTAINER parameter */
+ dataLen = sizeof(szName);
+ result = CryptGetProvParam(prov, PP_CONTAINER, (LPBYTE)szName, &dataLen, 0);
+ ok(result && dataLen == strlen(szContainer)+1 && strcmp(szContainer,szName) == 0,
+ "failed getting PP_CONTAINER. result = %s. Error 0x%08X. returned length = %d\n",
+ (result)? "TRUE":"FALSE",GetLastError(),dataLen);
+ /* PP_UNIQUE_CONTAINER parameter */
+ dataLen = sizeof(szName);
+ result = CryptGetProvParam(prov, PP_UNIQUE_CONTAINER, (LPBYTE)szName, &dataLen, 0);
+ ok(result && dataLen == strlen(szContainer)+1 && strcmp(szContainer,szName) == 0,
+ "failed getting PP_CONTAINER. result = %s. Error 0x%08X. returned length = %d\n",
+ (result)? "TRUE":"FALSE",GetLastError(),dataLen);
result = CryptGetUserKey(prov, AT_KEYEXCHANGE, &key);
ok(!result && GetLastError() == NTE_NO_KEY,
"Expected NTE_NO_KEY, got %08x\n", GetLastError());
--
1.4.4.2
More information about the wine-patches
mailing list