SymCryptMarvin32AppendBlocks

VOID __stdcall SymCryptMarvin32AppendBlocks(PSYMCRYPT_MARVIN32_CHAINING_STATE pChain, PCBYTE pbData, _SIZE_T cbData){
  unsigned int v3; 
  unsigned int v4; 
  __int64 v5; 
  const unsigned __int8 *v6; 
  __int64 v7; 
  unsigned int v8; 
  int v9; 
  int v10; 
  int v11; 
  unsigned int v12; 
  int v13; 
  int v14; 
  int v15; 
  unsigned int v16; 
  int v17; 
  int v18; 
  int v19; 
  unsigned int v20; 
  int v21; 
  int v22; 
  int v23; 

  v3 = pChain->s[0];
  v4 = pChain->s[1];
  v5 = cbData & 0xC;
  v6 = &pbData[v5];
  v7 = *(_QWORD *)&cbData - v5;
  switch( v5 )
  {
    case 0i64:
      goto LABEL_6;
    case 4i64:
      goto LABEL_10;
    case 8i64:
      goto LABEL_9;
    case 12i64:
      while( 1 )
      {
        v12 = *((_DWORD *)v6 - 3) + v3;
        v13 = v12 ^ v4;
        v14 = v13 + __ROL4__(v12, 20);
        v15 = v14 ^ __ROL4__(v13, 9);
        v3 = v15 + __ROL4__(v14, 27);
        v4 = __ROL4__(v15, 19);
LABEL_9:
        v16 = *((_DWORD *)v6 - 2) + v3;
        v17 = v16 ^ v4;
        v18 = v17 + __ROL4__(v16, 20);
        v19 = v18 ^ __ROL4__(v17, 9);
        v3 = v19 + __ROL4__(v18, 27);
        v4 = __ROL4__(v19, 19);
LABEL_10:
        v20 = *((_DWORD *)v6 - 1) + v3;
        v21 = v20 ^ v4;
        v22 = v21 + __ROL4__(v20, 20);
        v23 = v22 ^ __ROL4__(v21, 9);
        v3 = v23 + __ROL4__(v22, 27);
        v4 = __ROL4__(v23, 19);
LABEL_6:
        if( !v7 )
          break;
        v8 = *(_DWORD *)v6 + v3;
        v6 += 16;
        v9 = v8 ^ v4;
        v7 -= 16i64;
        v10 = v9 + __ROL4__(v8, 20);
        v11 = v10 ^ __ROL4__(v9, 9);
        v3 = v11 + __ROL4__(v10, 27);
        v4 = __ROL4__(v11, 19);
      }
      break;
  }
  pChain->s[0] = v3;
  pChain->s[1] = v4;
}

Referenced by:

SymCryptMarvin32Append
SymCryptMarvin32Result