SymCryptParallelHashProcess_serial
VOID __fastcall SymCryptParallelHashProcess_serial(
INT64 *a1,
INT64 a2,
UINT64 a3,
INT64 a4,
UINT64 a5,
INT64 a6,
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((_BYTE *)0x70733273, a2);
v13 = 0i64;
v14 = v12 + (unsigned int)v7;
if( v14 <= 0x40 )
{
if( (v14 & 1) != 0 )
*(_BYTE *)(--v14 + a6) = 0;
if( (v14 & 2) != 0 )
{
v14 -= 2i64;
*(_WORD *)(v14 + a6) = 0;
}
if( (v14 & 4) != 0 )
{
v14 -= 4i64;
*(_DWORD *)(v14 + a6) = 0;
}
if( (v14 & 8) != 0 )
{
v14 -= 8i64;
*(_QWORD *)(v14 + a6) = 0i64;
}
if( (v14 & 0x10) != 0 )
{
v14 -= 16i64;
*(_QWORD *)(v14 + a6) = 0i64;
*(_QWORD *)(v14 + a6 + 8) = 0i64;
}
v15 = v14;
if( (v14 & 0x20) != 0 )
{
v14 -= 32i64;
*(_QWORD *)(v14 + a6) = 0i64;
*(_QWORD *)(v14 + a6 + 8) = 0i64;
*(_QWORD *)(v15 + a6 - 16) = 0i64;
*(_QWORD *)(a6 + v15 - 8) = 0i64;
}
if( (v14 & 0x40) != 0 )
{
*(_QWORD *)(v14 + a6 - 64) = 0i64;
*(_QWORD *)(v14 + a6 - 56) = 0i64;
*(_QWORD *)(v14 + a6 - 48) = 0i64;
*(_QWORD *)(v14 + a6 - 40) = 0i64;
*(_QWORD *)(v14 + a6 - 32) = 0i64;
*(_QWORD *)(v14 + a6 - 24) = 0i64;
*(_QWORD *)(v14 + a6 - 16) = 0i64;
*(_QWORD *)(v14 + a6 - 8) = 0i64;
}
}
else
{
SymCryptWipe((PVOID)a6, v12 + (unsigned int)v7);
}
if( a5 )
{
v16 = (_QWORD *)(a4 + 24);
do
{
v17 = *(v16 - 3);
if( v17 >= a3 )
SymCryptFatal((_BYTE *)0x70733269, v17);
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((_BYTE *)0x7073326F, v17);
if( *v16 != *(_DWORD *)(v10 + 36) )
SymCryptFatal((_BYTE *)0x70733272, v17);
(*(void(__fastcall **)(UINT64, _QWORD))(v10 + 16))(a2 + v17 * *(unsigned int *)(v10 + 32), *(v16 - 1));
}
v16 += 5;
++v13;
}
while( v13 < a5 );
}
}Referenced by:
SymCryptParallelSha256Process