SymCryptMarvin32AppendBlocks
INT64 __fastcall SymCryptMarvin32AppendBlocks(UINT64 *a1, INT64 a2, INT64 a3){
INT64 result;
int v4;
INT64 v5;
_DWORD *v6;
INT64 v7;
int v8;
int v9;
int v10;
int v11;
int v12;
int v13;
int v14;
int v15;
int v16;
int v17;
int v18;
int v19;
int v20;
int v21;
int v22;
int v23;
result = *(unsigned int *)a1;
v4 = *((_DWORD *)a1 + 1);
v5 = a3 & 0xC;
v6 = (_DWORD *)(v5 + a2);
v7 = a3 - v5;
switch( v5 )
{
case 0i64:
goto LABEL_6;
case 4i64:
goto LABEL_10;
case 8i64:
goto LABEL_9;
case 12i64:
while( 1 )
{
v12 = *(v6 - 3) + result;
v13 = v12 ^ v4;
v14 = v13 + __ROL4__(v12, 20);
v15 = v14 ^ __ROL4__(v13, 9);
LODWORD(result) = v15 + __ROL4__(v14, 27);
v4 = __ROL4__(v15, 19);
LABEL_9:
v16 = *(v6 - 2) + result;
v17 = v16 ^ v4;
v18 = v17 + __ROL4__(v16, 20);
v19 = v18 ^ __ROL4__(v17, 9);
LODWORD(result) = v19 + __ROL4__(v18, 27);
v4 = __ROL4__(v19, 19);
LABEL_10:
v20 = *(v6 - 1) + result;
v21 = v20 ^ v4;
v22 = v21 + __ROL4__(v20, 20);
v23 = v22 ^ __ROL4__(v21, 9);
result = (unsigned int)(v23 + __ROL4__(v22, 27));
v4 = __ROL4__(v23, 19);
LABEL_6:
if( !v7 )
break;
v8 = *v6 + result;
v6 += 4;
v9 = v8 ^ v4;
v7 -= 16i64;
v10 = v9 + __ROL4__(v8, 20);
v11 = v10 ^ __ROL4__(v9, 9);
LODWORD(result) = v11 + __ROL4__(v10, 27);
v4 = __ROL4__(v11, 19);
}
break;
}
*(_DWORD *)a1 = result;
*((_DWORD *)a1 + 1) = v4;
return result;
}Referenced by:
SymCryptMarvin32Append
SymCryptMarvin32Result