CbsHashBuffer
来源:互联网 发布:类似精易编程助手 编辑:程序博客网 时间:2024/06/06 19:18
CbsHashBuffer
__int64 __fastcall CbsHashBuffer(BYTE *pbData, DWORD dwDataLen, __int64 a3, BYTE **a4, _DWORD *a5){ BYTE **v5; // rsi@1 DWORD v6; // er15@1 BYTE *v7; // rdi@1 int v8; // ebx@5 DWORD v9; // eax@6 const char *v10; // r9@8 DWORD v11; // eax@13 DWORD v12; // eax@17 DWORD v13; // eax@21 BYTE *v14; // rdi@24 DWORD v15; // eax@27 int v16; // eax@32 BYTE pbDataa[4]; // [sp+30h] [bp-20h]@20 DWORD pdwDataLen; // [sp+34h] [bp-1Ch]@20 HCRYPTHASH phHash; // [sp+38h] [bp-18h]@5 HCRYPTPROV phProv; // [sp+40h] [bp-10h]@5 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;}
0 0