CbsHashBuffer
__int64 __fastcall CbsHashBuffer(BYTE *pbData, DWORD dwDataLen, __int64 a3, BYTE **a4, _DWORD *a5)
{
BYTE **v5;
DWORD v6;
BYTE *v7;
int v8;
DWORD v9;
const char *v10;
DWORD v11;
DWORD v12;
DWORD v13;
BYTE *v14;
DWORD v15;
int v16;
BYTE pbDataa[
4];
DWORD pdwDataLen;
HCRYPTHASH phHash;
HCRYPTPROV phProv;
v5 = a4;
v6 = dwDataLen;
v7 = pbData;
if ( !pbData )
CbsUtil_Assert((__int64)
"base\\cbs\\util\\cbscat.cpp",
35i64, (__int64)
"pbBuffer");
if ( !v5 )
CbsUtil_Assert((__int64)
"base\\cbs\\util\\cbscat.cpp",
36i64, (__int64)
"ppbHash");
v8 =
0;
phProv =
0i64;
phHash =
0i64;
if ( !CryptAcquireContextW(&phProv,
0i64,
0i64,
1u,
0xF0000040) )
{
phProv =
0i64;
v9 = GetLastError();
v8 = v9;
if ( (
signed int)v9 >
0 )
v8 = (
unsigned __int16)v9 |
0x80070000;
v10 =
"Failed to acquire crypt provider context.";
LABEL_9:
if ( v8 >=
0 )
v8 = -
2147467259;
goto LABEL_11;
}
if ( !CryptCreateHash(phProv,
0x8004u,
0i64,
0, &phHash) )
{
phHash =
0i64;
v11 = GetLastError();
v8 = v11;
if ( (
signed int)v11 >
0 )
v8 = (
unsigned __int16)v11 |
0x80070000;
v10 =
"Failed to create hash.";
goto LABEL_9;
}
if ( !CryptHashData(phHash, v7, v6,
0) )
{
v12 = GetLastError();
v8 = v12;
if ( (
signed int)v12 >
0 )
v8 = (
unsigned __int16)v12 |
0x80070000;
v10 =
"Failed to hash data.";
goto LABEL_9;
}
pdwDataLen =
4;
if ( !CryptGetHashParam(phHash,
4u, pbDataa, &pdwDataLen,
0) )
{
v13 = GetLastError();
v8 = v13;
if ( (
signed int)v13 >
0 )
v8 = (
unsigned __int16)v13 |
0x80070000;
v10 =
"Failed to get hash size.";
goto LABEL_9;
}
v14 = (BYTE *)
operator new(*(
unsigned int *)pbDataa);
if ( !v14 )
{
v8 = -
2147024882;
v10 =
"Failed to allocate memory for hash.";
LABEL_11:
CBSWdsLog(
0x4000000u, v8,
1i64, v10);
goto LABEL_35;
}
pdwDataLen = *(_DWORD *)pbDataa;
if ( CryptGetHashParam(phHash,
2u, v14, &pdwDataLen,
0) )
{
v16 = *(_DWORD *)pbDataa;
*v5 = v14;
v14 =
0i64;
*a5 = v16;
}
else
{
v15 = GetLastError();
v8 = v15;
if ( (
signed int)v15 >
0 )
v8 = (
unsigned __int16)v15 |
0x80070000;
if ( v8 >=
0 )
v8 = -
2147467259;
CBSWdsLog(
0x4000000u, v8,
1i64,
"Failed to get hash value.");
}
if ( v14 )
operator delete(v14);
LABEL_35:
if ( phHash )
CryptDestroyHash(phHash);
if ( phProv )
CryptReleaseContext(phProv,
0);
return (
unsigned int)v8;
}
转载请注明原文地址: https://ju.6miu.com/read-1305559.html