SymCryptParallelHashProcess_serial

VOID __stdcall SymCryptParallelHashProcess_serial(
        INT64 *a1,
        INT64 a2,
        UINT64 a3,
        INT64 a4,
        UINT64 a5,
        INT64 pbData,
        UINT64 a7){
  __int64 v7; 
  INT64 v10; 
  UINT64 v12; 
  UINT64 v13; 
  unsigned __int64 v14; 
  unsigned __int64 v15; 
  _QWORD *v16; 
  UINT64 v17; 

  v7 = *((unsigned int *)a1 + 2);
  v10 = *a1;
  v12 = 56 * a3;
  if( a7 < 56 * a3 + v7 )
    SymCryptFatal(0x70733273u);
  v13 = 0i64;
  v14 = v12 + (unsigned int)v7;
  if( v14 <= 0x40 )
  {
    if( (v14 & 1) != 0 )
      *(_BYTE *)(--v14 + pbData) = 0;
    if( (v14 & 2) != 0 )
    {
      v14 -= 2i64;
      *(_WORD *)(v14 + pbData) = 0;
    }
    if( (v14 & 4) != 0 )
    {
      v14 -= 4i64;
      *(_DWORD *)(v14 + pbData) = 0;
    }
    if( (v14 & 8) != 0 )
    {
      v14 -= 8i64;
      *(_QWORD *)(v14 + pbData) = 0i64;
    }
    if( (v14 & 0x10) != 0 )
    {
      v14 -= 16i64;
      *(_QWORD *)(v14 + pbData) = 0i64;
      *(_QWORD *)(v14 + pbData + 8) = 0i64;
    }
    v15 = v14;
    if( (v14 & 0x20) != 0 )
    {
      v14 -= 32i64;
      *(_QWORD *)(v14 + pbData) = 0i64;
      *(_QWORD *)(v14 + pbData + 8) = 0i64;
      *(_QWORD *)(v15 + pbData - 16) = 0i64;
      *(_QWORD *)(pbData + v15 - 8) = 0i64;
    }
    if( (v14 & 0x40) != 0 )
    {
      *(_QWORD *)(v14 + pbData - 64) = 0i64;
      *(_QWORD *)(v14 + pbData - 56) = 0i64;
      *(_QWORD *)(v14 + pbData - 48) = 0i64;
      *(_QWORD *)(v14 + pbData - 40) = 0i64;
      *(_QWORD *)(v14 + pbData - 32) = 0i64;
      *(_QWORD *)(v14 + pbData - 24) = 0i64;
      *(_QWORD *)(v14 + pbData - 16) = 0i64;
      *(_QWORD *)(v14 + pbData - 8) = 0i64;
    }
  }
  else
  {
    SymCryptWipe((VOID *)pbData, v12 + v7);
  }
  if( a5 )
  {
    v16 = (_QWORD *)(a4 + 24);
    do
    {
      v17 = *(v16 - 3);
      if( v17 >= a3 )
        SymCryptFatal(0x70733269u);
      if( *((_DWORD *)v16 - 4) == 1 )
      {
        (*(void(__fastcall **)(UINT64, _QWORD, _QWORD))(v10 + 8))(
          a2 + v17 * *(unsigned int *)(v10 + 32),
          *(v16 - 1),
          *v16);
      }
      else
      {
        if( *((_DWORD *)v16 - 4) != 2 )
          SymCryptFatal(0x7073326Fu);
        if( *v16 != *(_DWORD *)(v10 + 36) )
          SymCryptFatal(0x70733272u);
        (*(void(__fastcall **)(UINT64, _QWORD))(v10 + 16))(a2 + v17 * *(unsigned int *)(v10 + 32), *(v16 - 1));
      }
      v16 += 5;
      ++v13;
    }
    while( v13 < a5 );
  }
}

Referenced by:

SymCryptParallelSha256Process