int __fastcall sub_7344(unsigned __int8 *a1, unsigned __int8 *a2) { unsigned int v2; // r3 unsigned int v3; // r5 unsigned int v4; // r4 _BYTE *v5; // r10 int v6; // r3 _BYTE *v7; // r0 int i; // r6 int v9; // r10 int v10; // r3 int v11; // r12 unsigned int v12; // r1 bool v13; // cc char v14; // r1 unsigned int v15; // r1 int v16; // r12 int v17; // r12 int v18; // r10 unsigned int v19; // r7 unsigned int v20; // r6 char *v21; // r12 int v22; // r11 int j; // r10 int v24; // r2 int k; // r3 char v26; // r0 char v27; // r1 int v28; // r2 unsigned int v29; // r2 int m; // r12 char v31; // r7 char v32; // r1 int v33; // r7 int v34; // r0 int v35; // r12 int result; // r0 unsigned int v37; // [sp+0h] [bp-60h] _BYTE *v38; // [sp+4h] [bp-5Ch] int v39; // [sp+8h] [bp-58h] int v40; // [sp+Ch] [bp-54h] _BYTE v42[8]; // [sp+2Ch] [bp-34h] BYREF int v43; // [sp+34h] [bp-2Ch] v2 = a2[3]; v3 = (*a2 << 20) | (a2[1] << 12) | (16 * a2[2]) | (v2 >> 4); v4 = ((a2[5] << 8) | (a2[4] << 16)) ^ a2[6] | ((v2 & 0xF) << 24); v40 = a2[7]; v37 = ((a1[5] << 16) | (a1[4] << 24)) ^ a1[7] | (a1[6] << 8); v5 = &algn_EFF2[1]; v39 = ((a1[1] << 16) | (*a1 << 24)) ^ a1[3] | (a1[2] << 8); while ( 1 ) { v38 = v5 + 1; if ( v5[1] ) { LOBYTE(v6) = 0; do { v6 = (unsigned __int8)(v6 + 1); v3 = ((2 * v3) | (v3 >> 27)) & 0xFFFFFFF; v4 = ((2 * v4) | (v4 >> 27)) & 0xFFFFFFF; } while ( v6 != (unsigned __int8)v5[1] ); } v7 = v42; for ( i = 0; i != 48; i = (unsigned __int8)(i + 6) ) { v9 = i; v10 = 5; v11 = 0; *v7++ = 0; while ( 1 ) { v12 = byte_F024[v9]; v13 = v12 > 0x1C; v9 = (unsigned __int8)(v9 + 1); v14 = v12 > 0x1C ? 56 - v12 : 28 - v12; v15 = v13 ? v4 >> v14 : v3 >> v14; v16 = v11 | ((v15 & 1) << v10--); *(v7 - 1) = v16; if ( v10 == -1 ) break; v11 = (unsigned __int8)*(v7 - 1); } } if ( v40 ) { v17 = HIBYTE(v37) + v40 + v40 * HIBYTE(v37); v18 = (unsigned __int8)v17 - BYTE1(v17); if ( (v18 & 0x100) != 0 ) ++v18; v19 = v37 & 0xFFFFFF | (v18 << 24); } else { v19 = v37; } v20 = 0; v21 = (char *)&unk_F0FC; v22 = 28; for ( j = 0; j != 8; ++j ) { LOBYTE(v24) = 0; for ( k = 0; k != 6; ++k ) { v26 = v21[k]; v27 = 5 - k; v24 = (unsigned __int8)(v24 | (((v19 >> (32 - v26)) & 1) << v27)); } v21 += 6; v28 = (v24 ^ (unsigned __int8)v42[j]) + (j << 6); v20 |= byte_F12C[v28] << v22; v22 -= 4; } v29 = 0; for ( m = 0; m != 32; ++m ) { v31 = byte_F004[m]; v32 = 31 - m; v29 |= ((v20 >> (32 - v31)) & 1) << v32; } v33 = (BYTE2(v29) << 24) | (HIBYTE(v29) << 16) | (unsigned __int16)v29; v34 = v39; v39 = v37; v35 = v33 ^ v34; if ( v38 == (_BYTE *)&unk_F003 ) break; v37 = v33 ^ v34; v5 = v38; } result = v43; *a1 = HIBYTE(v35); a1[1] = BYTE2(v35); a1[3] = v35; a1[2] = BYTE1(v35); a1[4] = HIBYTE(v37); a1[5] = BYTE2(v37); a1[6] = BYTE1(v37); a1[7] = v37; return result; }