mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
[common,assistance] replace winpr_Cipher_New
* use winpr_Cipher_NewEx where possible * use winpr_RC4_New where RC4 is used
This commit is contained in:
@@ -514,7 +514,7 @@ static BOOL freerdp_assistance_parse_attr_uint32(UINT32* opt, const char* key, c
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
*opt = val;
|
||||
*opt = (UINT32)val;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -851,27 +851,25 @@ BYTE* freerdp_assistance_encrypt_pass_stub(const char* password, const char* pas
|
||||
BOOL rc = 0;
|
||||
size_t cbPasswordW = 0;
|
||||
size_t cbPassStubW = 0;
|
||||
size_t EncryptedSize = 0;
|
||||
BYTE PasswordHash[WINPR_MD5_DIGEST_LENGTH];
|
||||
WINPR_CIPHER_CTX* rc4Ctx = NULL;
|
||||
BYTE PasswordHash[WINPR_MD5_DIGEST_LENGTH] = { 0 };
|
||||
WINPR_RC4_CTX* rc4Ctx = NULL;
|
||||
BYTE* pbIn = NULL;
|
||||
BYTE* pbOut = NULL;
|
||||
size_t cbOut = 0;
|
||||
size_t cbIn = 0;
|
||||
size_t cbFinal = 0;
|
||||
BYTE* res = NULL;
|
||||
WCHAR* PasswordW = ConvertUtf8ToWCharAlloc(password, &cbPasswordW);
|
||||
WCHAR* PassStubW = ConvertUtf8ToWCharAlloc(passStub, &cbPassStubW);
|
||||
|
||||
cbPasswordW = (cbPasswordW) * sizeof(WCHAR);
|
||||
cbPassStubW = (cbPassStubW) * sizeof(WCHAR);
|
||||
const size_t EncryptedSize = cbPassStubW + 4;
|
||||
|
||||
if (!PasswordW || !PassStubW)
|
||||
goto fail;
|
||||
|
||||
cbPasswordW = (cbPasswordW) * sizeof(WCHAR);
|
||||
cbPassStubW = (cbPassStubW) * sizeof(WCHAR);
|
||||
if (!winpr_Digest(WINPR_MD_MD5, (BYTE*)PasswordW, cbPasswordW, (BYTE*)PasswordHash,
|
||||
sizeof(PasswordHash)))
|
||||
goto fail;
|
||||
|
||||
EncryptedSize = cbPassStubW + 4;
|
||||
pbIn = (BYTE*)calloc(1, EncryptedSize);
|
||||
pbOut = (BYTE*)calloc(1, EncryptedSize);
|
||||
|
||||
@@ -880,7 +878,7 @@ BYTE* freerdp_assistance_encrypt_pass_stub(const char* password, const char* pas
|
||||
|
||||
*((UINT32*)pbIn) = (UINT32)cbPassStubW;
|
||||
CopyMemory(&pbIn[4], PassStubW, cbPassStubW);
|
||||
rc4Ctx = winpr_Cipher_New(WINPR_CIPHER_ARC4_128, WINPR_ENCRYPT, PasswordHash, NULL);
|
||||
rc4Ctx = winpr_RC4_New(PasswordHash, sizeof(PasswordHash));
|
||||
|
||||
if (!rc4Ctx)
|
||||
{
|
||||
@@ -888,35 +886,24 @@ BYTE* freerdp_assistance_encrypt_pass_stub(const char* password, const char* pas
|
||||
goto fail;
|
||||
}
|
||||
|
||||
cbOut = cbFinal = 0;
|
||||
cbIn = EncryptedSize;
|
||||
rc = winpr_Cipher_Update(rc4Ctx, pbIn, cbIn, pbOut, &cbOut);
|
||||
rc = winpr_RC4_Update(rc4Ctx, EncryptedSize, pbIn, pbOut);
|
||||
|
||||
if (!rc)
|
||||
{
|
||||
WLog_ERR(TAG, "winpr_Cipher_Update failure");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!winpr_Cipher_Final(rc4Ctx, pbOut + cbOut, &cbFinal))
|
||||
{
|
||||
WLog_ERR(TAG, "winpr_Cipher_Final failure");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
winpr_Cipher_Free(rc4Ctx);
|
||||
free(pbIn);
|
||||
free(PasswordW);
|
||||
free(PassStubW);
|
||||
*pEncryptedSize = EncryptedSize;
|
||||
return pbOut;
|
||||
res = pbOut;
|
||||
fail:
|
||||
winpr_Cipher_Free(rc4Ctx);
|
||||
winpr_RC4_Free(rc4Ctx);
|
||||
free(PasswordW);
|
||||
free(PassStubW);
|
||||
free(pbIn);
|
||||
free(pbOut);
|
||||
return NULL;
|
||||
if (!res)
|
||||
free(pbOut);
|
||||
else
|
||||
*pEncryptedSize = EncryptedSize;
|
||||
return res;
|
||||
}
|
||||
|
||||
static BOOL freerdp_assistance_decrypt2(rdpAssistanceFile* file)
|
||||
@@ -959,7 +946,8 @@ static BOOL freerdp_assistance_decrypt2(rdpAssistanceFile* file)
|
||||
goto fail;
|
||||
|
||||
aesDec =
|
||||
winpr_Cipher_New(WINPR_CIPHER_AES_128_CBC, WINPR_DECRYPT, DerivedKey, InitializationVector);
|
||||
winpr_Cipher_NewEx(WINPR_CIPHER_AES_128_CBC, WINPR_DECRYPT, DerivedKey, sizeof(DerivedKey),
|
||||
InitializationVector, sizeof(InitializationVector));
|
||||
|
||||
if (!aesDec)
|
||||
goto fail;
|
||||
|
||||
Reference in New Issue
Block a user