sub_14026F930
VOID __fastcall sub_14026F930(INT64 a1, UINT8 *a2, UINT8 *a3, UINT64 a4, INT64 a5, UINT64 a6, INT64 a7){
unsigned int v7;
UINT8 *v8;
INT64 v9;
unsigned int v10;
unsigned int v11;
unsigned int v12;
unsigned int v13;
unsigned int v14;
unsigned int v15;
unsigned int v16;
unsigned int v17;
unsigned int v18;
int v19;
__int64 v20;
__int64 v21;
UINT8 *v22;
unsigned int v23;
int v24;
UINT8 *v25;
int v26;
int v27;
size_t v28;
unsigned int v29;
unsigned int v30;
unsigned int v31;
unsigned int v32;
unsigned int v33;
unsigned int v34;
unsigned int v35;
unsigned int v36;
unsigned int v37;
unsigned int v38;
NTSTATUS v39;
int *v40;
bool v41;
UINT8 dst[8];
size_t Size;
UINT8 v44[8];
int *v45;
__int64 v46;
UINT8 *Src;
UINT8 *Srca;
unsigned int v51;
if( (_DWORD)a4 )
{
v51 = a4;
Src = a2;
*(_QWORD *)v44 = 0i64;
*(_DWORD *)dst = ~(_DWORD)a6;
v7 = a4;
LODWORD(Size) = a4 & 7;
v8 = a3;
v9 = a1;
if( (a4 & 7) != 0 )
{
v10 = ~(_DWORD)a6 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 9ui64, a5, (unsigned int)a6);
v11 = a6 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(v9, 8ui64, a5, v10);
v12 = v10 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(v9, 7ui64, a5, v11);
v13 = v11 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 6ui64, a5, v12);
v14 = v12 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 5ui64, a5, v13);
v15 = v13 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 4ui64, a5, v14);
v16 = v14 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 3ui64, a5, v15);
v17 = v15 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 2ui64, a5, v16);
v18 = WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 1ui64, a5, v17) ^ v16;
*(_QWORD *)dst = 0i64;
v19 = v17 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 0i64, a5, v18);
v20 = (unsigned int)Size;
v21 = (unsigned int)Size;
memmove(dst, Src, (unsigned int)Size);
*(_DWORD *)v44 = *(_DWORD *)dst ^ v18;
Size = *(_QWORD *)dst;
*(_DWORD *)&v44[4] = v19 ^ *(_DWORD *)&dst[4];
memset((INT64)&v44[v20], 0i64);
memmove(v8, v44, (unsigned int)v20);
v9 = a1;
a2 = Src;
LODWORD(a6) = HIDWORD(Size);
*(_DWORD *)dst = Size;
}
else
{
v21 = 0i64;
}
v22 = &v8[v21];
v23 = v7 >> 3;
v45 = (int *)&v8[v21];
if( v7 >> 3 )
{
v24 = *(_DWORD *)&v44[4];
v25 = (UINT8 *)(a2 - v8);
v26 = *(_DWORD *)v44;
v27 = *(_DWORD *)dst;
Srca = v25;
v46 = v23;
while( 1 )
{
v28 = *(_QWORD *)&v22[(_QWORD)v25];
v29 = HIDWORD(v28) ^ v24;
v30 = v28 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(v9, 9ui64, a5, v29) ^ v26;
v31 = v29 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(v9, 8ui64, a5, v30);
v32 = v30 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 7ui64, a5, v31);
v33 = v31 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 6ui64, a5, v32);
v9 = a1;
v34 = v32 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 5ui64, a5, v33);
v35 = v33 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 4ui64, a5, v34);
v36 = WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 3ui64, a5, v35) ^ v34;
v37 = WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 2ui64, a5, v36) ^ v35;
v38 = WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 1ui64, a5, v37) ^ v36;
v39 = WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 0i64, a5, v38);
v40 = v45;
v24 = a6 ^ v39 ^ v37;
v26 = v27 ^ v38;
Size = v28;
*v45 = v26;
v40[1] = v24;
v22 = (UINT8 *)(v40 + 2);
v41 = v46-- == 1;
v45 = (int *)v22;
if( v41 )
break;
v27 = v28;
v25 = Srca;
LODWORD(a6) = HIDWORD(Size);
}
v7 = v51;
v8 = a3;
}
*(_BYTE *)a7 = v8[v7 - 1];
}
}Referenced by:
sub_14065F78C