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