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