Juan Lang : rsaenh: Store key when algid is a CALG_RSA_* algid, too.
Alexandre Julliard
julliard at winehq.org
Wed Oct 21 13:14:01 CDT 2009
Module: wine
Branch: master
Commit: 48975c38e02e0ccf57e2d9dcee6999442b59c1d5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=48975c38e02e0ccf57e2d9dcee6999442b59c1d5
Author: Juan Lang <juan.lang at gmail.com>
Date: Tue Oct 20 15:22:21 2009 -0700
rsaenh: Store key when algid is a CALG_RSA_* algid, too.
---
dlls/rsaenh/rsaenh.c | 16 ++++++----------
dlls/rsaenh/tests/rsaenh.c | 31 +++++++++++++++++++++++++++++++
2 files changed, 37 insertions(+), 10 deletions(-)
diff --git a/dlls/rsaenh/rsaenh.c b/dlls/rsaenh/rsaenh.c
index de3125c..1b23391 100644
--- a/dlls/rsaenh/rsaenh.c
+++ b/dlls/rsaenh/rsaenh.c
@@ -3059,11 +3059,9 @@ BOOL WINAPI RSAENH_CPGenKey(HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYP
if (pCryptKey) {
new_key_impl(pCryptKey->aiAlgid, &pCryptKey->context, pCryptKey->dwKeyLen);
setup_key(pCryptKey);
- if (Algid == AT_SIGNATURE) {
- RSAENH_CPDestroyKey(hProv, pKeyContainer->hSignatureKeyPair);
- copy_handle(&handle_table, *phKey, RSAENH_MAGIC_KEY,
- &pKeyContainer->hSignatureKeyPair);
- }
+ RSAENH_CPDestroyKey(hProv, pKeyContainer->hSignatureKeyPair);
+ copy_handle(&handle_table, *phKey, RSAENH_MAGIC_KEY,
+ &pKeyContainer->hSignatureKeyPair);
}
break;
@@ -3073,11 +3071,9 @@ BOOL WINAPI RSAENH_CPGenKey(HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYP
if (pCryptKey) {
new_key_impl(pCryptKey->aiAlgid, &pCryptKey->context, pCryptKey->dwKeyLen);
setup_key(pCryptKey);
- if (Algid == AT_KEYEXCHANGE) {
- RSAENH_CPDestroyKey(hProv, pKeyContainer->hKeyExchangeKeyPair);
- copy_handle(&handle_table, *phKey, RSAENH_MAGIC_KEY,
- &pKeyContainer->hKeyExchangeKeyPair);
- }
+ RSAENH_CPDestroyKey(hProv, pKeyContainer->hKeyExchangeKeyPair);
+ copy_handle(&handle_table, *phKey, RSAENH_MAGIC_KEY,
+ &pKeyContainer->hKeyExchangeKeyPair);
}
break;
diff --git a/dlls/rsaenh/tests/rsaenh.c b/dlls/rsaenh/tests/rsaenh.c
index 8afa931..bfe2b5a 100644
--- a/dlls/rsaenh/tests/rsaenh.c
+++ b/dlls/rsaenh/tests/rsaenh.c
@@ -2086,6 +2086,37 @@ static void test_null_provider(void)
CryptAcquireContext(&prov, szContainer, NULL, PROV_RSA_FULL,
CRYPT_DELETEKEYSET);
+ /* Test for being able to get a key generated with CALG_RSA_SIGN. */
+ result = CryptAcquireContext(&prov, szContainer, NULL, PROV_RSA_FULL,
+ CRYPT_NEWKEYSET);
+ ok(result, "CryptAcquireContext failed: %08x\n", GetLastError());
+ result = CryptGenKey(prov, CALG_RSA_SIGN, 0, &key);
+ ok(result, "CryptGenKey with CALG_RSA_SIGN failed with error %08x\n", GetLastError());
+ result = CryptGetUserKey(prov, AT_KEYEXCHANGE, &key);
+ ok(!result, "expected CryptGetUserKey to fail\n");
+ result = CryptGetUserKey(prov, AT_SIGNATURE, &key);
+ ok(result, "CryptGetUserKey with AT_SIGNATURE failed: %08x\n", GetLastError());
+ CryptDestroyKey(key);
+ CryptReleaseContext(prov, 0);
+
+ CryptAcquireContext(&prov, szContainer, NULL, PROV_RSA_FULL,
+ CRYPT_DELETEKEYSET);
+
+ /* Test for being able to get a key generated with CALG_RSA_KEYX. */
+ result = CryptAcquireContext(&prov, szContainer, NULL, PROV_RSA_FULL,
+ CRYPT_NEWKEYSET);
+ ok(result, "CryptAcquireContext failed: %08x\n", GetLastError());
+ result = CryptGenKey(prov, CALG_RSA_KEYX, 0, &key);
+ ok(result, "CryptGenKey with CALG_RSA_KEYX failed with error %08x\n", GetLastError());
+ result = CryptGetUserKey(prov, AT_KEYEXCHANGE, &key);
+ ok(result, "CryptGetUserKey with AT_KEYEXCHANGE failed: %08x\n", GetLastError());
+ result = CryptGetUserKey(prov, AT_SIGNATURE, &key);
+ ok(!result, "expected CryptGetUserKey to fail\n");
+ CryptDestroyKey(key);
+ CryptReleaseContext(prov, 0);
+
+ CryptAcquireContext(&prov, szContainer, NULL, PROV_RSA_FULL,
+ CRYPT_DELETEKEYSET);
/* test for the bug in accessing the user key in a container
*/
More information about the wine-cvs
mailing list