rsaenh: Store key when algid is a CALG_RSA_* algid, too.

This commit is contained in:
Juan Lang 2009-10-20 15:22:21 -07:00 committed by Alexandre Julliard
parent 65fc5aa57e
commit 48975c38e0
2 changed files with 37 additions and 10 deletions

View File

@ -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;

View File

@ -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
*/