SymCryptParallelHashSetNextWork
CHAR __fastcall SymCryptParallelHashSetNextWork(INT64 *a1, UINT64 **a2){
UINT64 *v2;
INT64 v4;
UINT64 *v6;
char v7;
__int64 v8;
UINT64 *v9;
UINT64 *v10;
__int64 v11;
UINT64 *v12;
UINT64 v13;
UINT64 *v14;
CHAR v16;
v2 = *a2;
v4 = *a1;
v16 = 0;
while( 1 )
{
while( 1 )
{
v6 = a2[3];
if( !*((_BYTE *)a2 + 8) )
break;
switch( *((_BYTE *)a2 + 8) )
{
case 1:
v8 = *((unsigned __int8 *)a2 + 9);
a2[4] = (UINT64 *)(v8 + v6[2]);
v9 = (UINT64 *)(v6[3] - v8);
a2[5] = v9;
if( (unsigned __int64)v9 >= *(unsigned int *)(v4 + 40) )
{
*((_BYTE *)a2 + 8) = 2;
return 1;
}
goto LABEL_11;
case 2:
LABEL_11:
v10 = a2[5];
if( v10 )
{
memmove((UINT8 *)v2 + 32, (UINT8 *)a2[4], (UINT64)v10);
*(_DWORD *)v2 = *((_DWORD *)a2 + 10);
}
LABEL_8:
a2[3] = (UINT64 *)v6[4];
*((_BYTE *)a2 + 8) = 0;
break;
case 3:
v7 = ((__int64(__fastcall *)(INT64 *, UINT64 *, UINT64 **, CHAR *))a1[3])(a1, v2, a2, &v16);
LABEL_25:
if( v7 )
return v16;
break;
case 4:
((void(__fastcall *)(INT64 *, UINT64 *, UINT64 *))a1[4])(a1, v2, a2[3]);
goto LABEL_8;
}
}
if( !v6 )
return 0;
v11 = *(unsigned int *)v2;
if( *((_DWORD *)v6 + 2) != 1 )
{
v7 = ((__int64(__fastcall *)(INT64 *, UINT64 *, UINT64 **, CHAR *))a1[2])(a1, v2, a2, &v16);
goto LABEL_25;
}
v2[2] += v6[3];
if( v2[2] < v6[3] )
++v2[3];
if( v11 )
{
v12 = v2 + 4;
v13 = *(unsigned int *)(v4 + 40) - v11;
if( v13 >= v6[3] )
v13 = v6[3];
memmove((UINT8 *)v12 + v11, (UINT8 *)v6[2], v13);
*(_DWORD *)v2 += v13;
if( *(_DWORD *)v2 == *(_DWORD *)(v4 + 40) )
{
a2[4] = v12;
a2[5] = (UINT64 *)*(unsigned int *)(v4 + 40);
if( v13 == v6[3] )
{
a2[3] = (UINT64 *)v6[4];
}
else
{
*((_BYTE *)a2 + 8) = 1;
*((_BYTE *)a2 + 9) = v13;
}
*(_DWORD *)v2 = 0;
return 1;
}
a2[3] = (UINT64 *)v6[4];
}
else
{
a2[4] = (UINT64 *)v6[2];
v14 = (UINT64 *)v6[3];
a2[5] = v14;
*((_BYTE *)a2 + 8) = 2;
if( (unsigned __int64)v14 >= *(unsigned int *)(v4 + 40) )
return 1;
}
}
}Referenced by:
SymCryptParallelHashProcess