mirror of
https://github.com/PowerShell/Win32-OpenSSH.git
synced 2025-04-08 19:35:37 +02:00
Add CNG manual memory management code to support Vista
Windows 7 improved the memory management in CNG. To support Vista we need to manage memory for cryptographic objects ourselves. This change adds a key object memory pointer to the cipher context and adds code to allocate and free it along with the key handle.
This commit is contained in:
parent
728c299d67
commit
bc6871e862
@ -216,6 +216,7 @@ unsigned int cng_cipher_init(PSSH_CNG_CIPHER_CTX x, const unsigned char *key, un
|
||||
DWORD cbData = 0;
|
||||
LPCWSTR pAlg = NULL;
|
||||
DWORD cbBlockLen = 0;
|
||||
DWORD cbKeyObject = 0;
|
||||
|
||||
if ((0 == (flags & _CNG_CIPHER_AES)) || (0 == (flags & (_CNG_MODE_CBC | _CNG_MODE_CTR))))
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
@ -281,12 +282,23 @@ unsigned int cng_cipher_init(PSSH_CNG_CIPHER_CTX x, const unsigned char *key, un
|
||||
}
|
||||
|
||||
if (status == S_OK)
|
||||
{
|
||||
status = BCryptGetProperty(
|
||||
hAlg,
|
||||
BCRYPT_OBJECT_LENGTH,
|
||||
(PBYTE)cbKeyObject,
|
||||
sizeof(DWORD),
|
||||
&cbData,
|
||||
0);
|
||||
}
|
||||
|
||||
if ((status == S_OK) && (x->pKeyObject = (PBYTE)HeapAlloc(GetProcessHeap(),0,cbKeyObject)))
|
||||
{
|
||||
status = BCryptGenerateSymmetricKey(
|
||||
hAlg,
|
||||
&(x->hKey),
|
||||
NULL,
|
||||
0,
|
||||
x->pKeyObject,
|
||||
cbKeyObject,
|
||||
(PBYTE)key,
|
||||
keylen,
|
||||
0);
|
||||
@ -310,6 +322,8 @@ void cng_cipher_cleanup(PSSH_CNG_CIPHER_CTX x)
|
||||
HeapFree(GetProcessHeap(), 0, x->pbIV);
|
||||
if (x->hKey)
|
||||
BCryptDestroyKey(x->hKey);
|
||||
if (x->pKeyObject)
|
||||
HeapFree(GetProcessHeap(), 0, x->pKeyObject);
|
||||
}
|
||||
|
||||
#endif
|
@ -63,6 +63,7 @@ extern "C" {
|
||||
unsigned char * pbIV;
|
||||
unsigned int cbBlockSize;
|
||||
unsigned int flags;
|
||||
PBYTE pKeyObject;
|
||||
} SSH_CNG_CIPHER_CTX, *PSSH_CNG_CIPHER_CTX;
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user