SymCryptMarvin32

VOID __stdcall SymCryptMarvin32(
        PCSYMCRYPT_MARVIN32_EXPANDED_SEED pExpandedSeed,
        PCBYTE pbData,
        _SIZE_T cbData,
        PBYTE pbResult,
        UINT8 pbResulta){
  int v5; 
  int v6; 
  unsigned __int64 v7; 
  int v8; 
  int v9; 
  int v10; 
  int v11; 
  int v12; 
  int v13; 
  int v14; 
  int v15; 
  int v16; 
  __int64 v17; 
  __int64 v18; 
  __int64 v19; 
  __int64 v20; 
  __int64 v21; 
  int v22; 
  int v23; 
  int v24; 
  int v25; 
  unsigned int v26; 
  int v27; 
  int v28; 
  int v29; 
  int v30; 
  int v31; 
  int v32; 
  int v33; 
  int v34; 
  unsigned int v35; 
  int v36; 
  int v37; 
  int v38; 
  int v39; 
  int v40; 
  int v41; 
  int v42; 

  v5 = **(_DWORD **)&pExpandedSeed;
  v6 = *(_DWORD *)(*(_QWORD *)&pExpandedSeed + 4i64);
  if( *(_QWORD *)&cbData > 7ui64 )
  {
    v7 = ((unsigned __int64)(*(_QWORD *)&cbData - 8i64) >> 3) + 1;
    *(_QWORD *)&cbData += -8i64 * v7;
    do
    {
      v8 = *(_DWORD *)pbData + v5;
      v9 = v8 ^ v6;
      v10 = v9 + __ROL4__(v8, 20);
      v11 = v10 ^ __ROL4__(v9, 9);
      v12 = *((_DWORD *)pbData + 1) + __ROL4__(v10, 27);
      pbData += 8;
      v13 = v11 + v12;
      v14 = v13 ^ __ROL4__(v11, 19);
      v15 = v14 + __ROL4__(v13, 20);
      v16 = v15 ^ __ROL4__(v14, 9);
      v5 = v16 + __ROL4__(v15, 27);
      v6 = __ROL4__(v16, 19);
      --v7;
    }
    while( v7 );
  }
  if( !*(_QWORD *)&cbData )
    goto LABEL_17;
  v17 = *(_QWORD *)&cbData - 1i64;
  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 *)pbData + v5;
        v23 = v22 ^ v6;
        v24 = v23 + __ROL4__(v22, 20);
        v25 = v24 ^ __ROL4__(v23, 9);
        v5 = v25 + __ROL4__(v24, 27);
        v6 = __ROL4__(v25, 19);
        if( v21 == 1 )
        {
          pbData += 4;
          goto LABEL_12;
        }
LABEL_17:
        v26 = 128;
        goto LABEL_18;
      }
      v27 = *(_DWORD *)pbData + v5;
      v28 = v27 ^ v6;
      v29 = v28 + __ROL4__(v27, 20);
      v30 = v29 ^ __ROL4__(v28, 9);
      v5 = v30 + __ROL4__(v29, 27);
      v6 = __ROL4__(v30, 19);
      pbData += 4;
LABEL_14:
      v26 = *(unsigned __int16 *)pbData | 0x800000;
      goto LABEL_18;
    }
    v31 = *(_DWORD *)pbData + v5;
    v32 = v31 ^ v6;
    v33 = v32 + __ROL4__(v31, 20);
    v34 = v33 ^ __ROL4__(v32, 9);
    v5 = v34 + __ROL4__(v33, 27);
    v6 = __ROL4__(v34, 19);
    pbData += 4;
LABEL_16:
    v26 = *pbData | 0x8000;
    goto LABEL_18;
  }
LABEL_12:
  v26 = *(unsigned __int16 *)pbData | (pbData[2] << 16) | 0x80000000;
LABEL_18:
  v35 = v26 + v5;
  v36 = v35 ^ v6;
  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);
  *((_DWORD *)pbResult + 1) = __ROL4__(v42, 19);
  *(_DWORD *)pbResult = v42 + __ROL4__(v41, 27);
}

Referenced by:

HvpApplyIncrementalLogFile
HvpGenerateLogEntryChecksums
HvpLogEntryCheckHeaderChecksum