sub_1402001A0

void __fastcall sub_1402001A0(__int64 a1, _BYTE *a2, char *a3, unsigned int a4, __int64 a5, unsigned int a6, _BYTE *a7){
  unsigned int v7; 
  __int64 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; 
  unsigned int v19; 
  unsigned int v20; 
  int v21; 
  int v22; 
  __int64 v23; 
  unsigned int v24; 
  char *v25; 
  signed __int64 v26; 
  __int64 v27; 
  unsigned int 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; 
  int v38; 
  int v39; 
  char *v40; 
  bool v41; 
  char *Src; 
  __int64 v43; 
  __int64 v44; 
  char *v46; 
  unsigned int Size; 

  if( a4 )
  {
    v46 = a3;
    v7 = a6;
    v10 = a1;
    v11 = ~a6;
    *a7 = a2[a4 - 1];
    Size = a4 & 7;
    if( (a4 & 7) != 0 )
    {
      v12 = v11 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 9u, a5, a6);
      v13 = a6 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(v10, 8u, a5, v12);
      v14 = v12 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(v10, 7u, a5, v13);
      v15 = v13 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(v10, 6u, a5, v14);
      v16 = v14 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 5u, a5, v15);
      v17 = v15 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 4u, a5, v16);
      v10 = a1;
      v18 = v16 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 3u, a5, v17);
      v19 = v17 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 2u, a5, v18);
      v20 = WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 1u, a5, v19) ^ v18;
      v43 = 0i64;
      v21 = v19 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 0, a5, v20);
      memmove(&v43, a2, Size);
      v22 = v43;
      LODWORD(Src) = v43 ^ v20;
      HIDWORD(Src) = v21 ^ HIDWORD(v43);
      v23 = Size;
      memset((char *)&Src + Size, 0i64, 8 - Size);
      memmove(v46, &Src, Size);
      a3 = v46;
      v7 = HIDWORD(Src);
      v11 = (unsigned int)Src;
    }
    else
    {
      v22 = 0;
      v43 = 0i64;
      v23 = 0i64;
    }
    v24 = a4 >> 3;
    v25 = &a3[v23];
    Src = &a3[v23];
    if( v24 )
    {
      v26 = a2 - a3;
      v44 = v24;
      do
      {
        v27 = *(_QWORD *)&v25[v26];
        v28 = v27 ^ v11;
        v29 = HIDWORD(v27) ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(v10, 0, a5, v28) ^ v7;
        v30 = v28 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(v10, 1u, a5, v29);
        v31 = v29 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 2u, a5, v30);
        v32 = v30 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 3u, a5, v31);
        v33 = v31 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 4u, a5, v32);
        v34 = v32 ^ WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 5u, a5, v33);
        v35 = WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 6u, a5, v34) ^ v33;
        v36 = WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 7u, a5, v35) ^ v34;
        v37 = WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 8u, a5, v36) ^ v35;
        v38 = WarbirdCrypto::CCipherFeistel64::CallRoundFunction(a1, 9u, a5, v37);
        v7 = HIDWORD(v43) ^ v37;
        v39 = v38;
        v40 = Src;
        v11 = v22 ^ v36 ^ v39;
        v43 = v27;
        v22 = v27;
        *(_DWORD *)Src = v11;
        *((_DWORD *)v40 + 1) = v7;
        v25 = v40 + 8;
        Src = v25;
        v41 = v44-- == 1;
        v10 = a1;
      }
      while( !v41 );
    }
  }
}

Referenced by:

sub_14065F78C