SymCryptMarvin32
unsigned __int64 __fastcall SymCryptMarvin32(int *a1, unsigned __int16 *a2, unsigned __int64 a3, _DWORD *a4){
int v4;
int v5;
unsigned __int64 v6;
unsigned __int64 result;
int v8;
int v9;
int v10;
int v11;
int v12;
int v13;
int v14;
int v15;
int v16;
unsigned __int64 v17;
unsigned __int64 v18;
unsigned __int64 v19;
unsigned __int64 v20;
unsigned __int64 v21;
int v22;
int v23;
int v24;
int v25;
int v26;
int v27;
int v28;
int v29;
int v30;
int v31;
int v32;
int v33;
int v34;
int v35;
int v36;
int v37;
int v38;
int v39;
int v40;
int v41;
int v42;
v4 = *a1;
v5 = a1[1];
if( a3 > 7 )
{
v6 = ((a3 - 8) >> 3) + 1;
result = -8i64 * v6;
a3 += -8i64 * v6;
do
{
v8 = *(_DWORD *)a2 + v4;
v9 = v8 ^ v5;
v10 = v9 + __ROL4__(v8, 20);
v11 = v10 ^ __ROL4__(v9, 9);
v12 = *((_DWORD *)a2 + 1) + __ROL4__(v10, 27);
a2 += 4;
v13 = v11 + v12;
v14 = v13 ^ __ROL4__(v11, 19);
v15 = v14 + __ROL4__(v13, 20);
v16 = v15 ^ __ROL4__(v14, 9);
v4 = v16 + __ROL4__(v15, 27);
v5 = __ROL4__(v16, 19);
--v6;
}
while( v6 );
}
if( !a3 )
goto LABEL_17;
v17 = a3 - 1;
if( !v17 )
goto LABEL_16;
v18 = v17 - 1;
if( !v18 )
goto LABEL_14;
v19 = v18 - 1;
if( v19 )
{
v20 = v19 - 2;
if( v20 )
{
v21 = v20 - 1;
if( v21 )
{
v22 = *(_DWORD *)a2 + v4;
v23 = v22 ^ v5;
v24 = v23 + __ROL4__(v22, 20);
v25 = v24 ^ __ROL4__(v23, 9);
v4 = v25 + __ROL4__(v24, 27);
v5 = __ROL4__(v25, 19);
if( v21 == 1 )
{
a2 += 2;
goto LABEL_12;
}
LABEL_17:
v26 = 128;
goto LABEL_18;
}
v27 = *(_DWORD *)a2 + v4;
v28 = v27 ^ v5;
v29 = v28 + __ROL4__(v27, 20);
v30 = v29 ^ __ROL4__(v28, 9);
v4 = v30 + __ROL4__(v29, 27);
v5 = __ROL4__(v30, 19);
a2 += 2;
LABEL_14:
v26 = *a2 | 0x800000;
goto LABEL_18;
}
v31 = *(_DWORD *)a2 + v4;
v32 = v31 ^ v5;
v33 = v32 + __ROL4__(v31, 20);
v34 = v33 ^ __ROL4__(v32, 9);
v4 = v34 + __ROL4__(v33, 27);
v5 = __ROL4__(v34, 19);
a2 += 2;
LABEL_16:
v26 = *(unsigned __int8 *)a2 | 0x8000;
goto LABEL_18;
}
LABEL_12:
result = *a2;
v26 = result | (*((unsigned __int8 *)a2 + 2) << 16) | 0x80000000;
LABEL_18:
v35 = v26 + v4;
v36 = v35 ^ v5;
v37 = v36 + __ROL4__(v35, 20);
v38 = v37 ^ __ROL4__(v36, 9);
v39 = v38 + __ROL4__(v37, 27);
v40 = v39 ^ __ROL4__(v38, 19);
v41 = v40 + __ROL4__(v39, 20);
v42 = v41 ^ __ROL4__(v40, 9);
a4[1] = __ROL4__(v42, 19);
*a4 = v42 + __ROL4__(v41, 27);
return result;
}Referenced by:
HvpApplyIncrementalLogFile
HvpGenerateLogEntryChecksums
HvpLogEntryCheckHeaderChecksum