mirror of
https://github.com/reactos/wine.git
synced 2024-11-26 13:10:28 +00:00
rsaenh: Store key when algid is a CALG_RSA_* algid, too.
This commit is contained in:
parent
65fc5aa57e
commit
48975c38e0
@ -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;
|
||||
|
||||
|
@ -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
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user