rsaenh: Fix read_key_container bug that prevents CryptAcquireContext from correctly loading the keys.
This commit is contained in:
parent
12f4acce04
commit
a7d897d76a
|
@ -1050,7 +1050,8 @@ static HCRYPTPROV read_key_container(PCHAR pszContainerName, DWORD dwFlags, PVTa
|
|||
KEYCONTAINER *pKeyContainer;
|
||||
HCRYPTPROV hKeyContainer;
|
||||
DATA_BLOB blobIn, blobOut;
|
||||
|
||||
HCRYPTKEY hCryptKey;
|
||||
|
||||
sprintf(szRSABase, RSAENH_REGKEY, pszContainerName);
|
||||
|
||||
if (dwFlags & CRYPT_MACHINE_KEYSET) {
|
||||
|
@ -1089,8 +1090,9 @@ static HCRYPTPROV read_key_container(PCHAR pszContainerName, DWORD dwFlags, PVTa
|
|||
if (CryptUnprotectData(&blobIn, NULL, NULL, NULL, NULL,
|
||||
(dwFlags & CRYPT_MACHINE_KEYSET) ? CRYPTPROTECT_LOCAL_MACHINE : 0, &blobOut))
|
||||
{
|
||||
RSAENH_CPImportKey(hKeyContainer, blobOut.pbData, blobOut.cbData, 0, 0,
|
||||
&pKeyContainer->hKeyExchangeKeyPair);
|
||||
if(RSAENH_CPImportKey(hKeyContainer, blobOut.pbData, blobOut.cbData, 0, 0,
|
||||
&hCryptKey))
|
||||
pKeyContainer->hKeyExchangeKeyPair = hCryptKey;
|
||||
HeapFree(GetProcessHeap(), 0, blobOut.pbData);
|
||||
}
|
||||
}
|
||||
|
@ -1113,8 +1115,9 @@ static HCRYPTPROV read_key_container(PCHAR pszContainerName, DWORD dwFlags, PVTa
|
|||
if (CryptUnprotectData(&blobIn, NULL, NULL, NULL, NULL,
|
||||
(dwFlags & CRYPT_MACHINE_KEYSET) ? CRYPTPROTECT_LOCAL_MACHINE : 0, &blobOut))
|
||||
{
|
||||
RSAENH_CPImportKey(hKeyContainer, blobOut.pbData, blobOut.cbData, 0, 0,
|
||||
&pKeyContainer->hSignatureKeyPair);
|
||||
if(RSAENH_CPImportKey(hKeyContainer, blobOut.pbData, blobOut.cbData, 0, 0,
|
||||
&hCryptKey))
|
||||
pKeyContainer->hSignatureKeyPair = hCryptKey;
|
||||
HeapFree(GetProcessHeap(), 0, blobOut.pbData);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1603,6 +1603,26 @@ static void test_null_provider(void)
|
|||
|
||||
CryptAcquireContext(&prov, szContainer, NULL, PROV_RSA_FULL,
|
||||
CRYPT_DELETEKEYSET);
|
||||
|
||||
|
||||
/* test for the bug in accessing the user key in a container
|
||||
*/
|
||||
result = CryptAcquireContext(&prov, szContainer, NULL, PROV_RSA_FULL,
|
||||
CRYPT_NEWKEYSET);
|
||||
ok(result, "CryptAcquireContext failed: %08x\n", GetLastError());
|
||||
result = CryptGenKey(prov, AT_KEYEXCHANGE, 0, &key);
|
||||
ok(result, "CryptGenKey with AT_KEYEXCHANGE failed with error %08x\n", GetLastError());
|
||||
CryptDestroyKey(key);
|
||||
CryptReleaseContext(prov,0);
|
||||
result = CryptAcquireContext(&prov, szContainer, NULL, PROV_RSA_FULL,0);
|
||||
ok(result, "CryptAcquireContext failed: 0x%08x\n", GetLastError());
|
||||
result = CryptGetUserKey(prov, AT_KEYEXCHANGE, &key);
|
||||
ok (result, "CryptGetUserKey failed with error %08x\n", GetLastError());
|
||||
CryptDestroyKey(key);
|
||||
|
||||
CryptAcquireContext(&prov, szContainer, NULL, PROV_RSA_FULL,
|
||||
CRYPT_DELETEKEYSET);
|
||||
|
||||
}
|
||||
|
||||
START_TEST(rsaenh)
|
||||
|
|
Loading…
Reference in New Issue