sub_14026F930

void __fastcall sub_14026F930(__int64 a1, VOID *a2, char *a3, unsigned int a4, __int64 a5, unsigned int a6, _BYTE *a7){
  unsigned int v7; 
  char *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; 
  char *v22; 
  unsigned int v23; 
  unsigned int v24; 
  signed __int64 v25; 
  int v26; 
  int v27; 
  __int64 v28; 
  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; 
  int v39; 
  int *v40; 
  bool v41; 
  __int64 v42; 
  size_t Size[2]; 
  __int64 v44; 
  int *v45; 
  __int64 v46; 
  VOID *Src; 
  char *Srca; 

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

Referenced by:

sub_14065F78C