/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400cd520 FUN_1400cd520 * Pseudocode, not original source. */ void FUN_1400cd520(byte *param_1,byte *param_2,uint *param_3) { uint uVar1; uint uVar2; uint uVar3; ulonglong uVar4; ulonglong uVar5; ulonglong uVar6; ulonglong uVar7; uint uVar8; uint *puVar9; uint uVar10; ulonglong uVar11; exception local_78 [80]; if ((int)param_3[0xf0] < 1) { FUN_14006ba50(local_78,L"aes key is not initialized",param_3,param_1); /* WARNING: Subroutine does not return */ _CxxThrowException(local_78,(ThrowInfo *)&DAT_1401a93e8); } uVar1 = ((uint)*param_1 << 0x18 | (uint)param_1[1] << 0x10 | (uint)param_1[2] << 8 | (uint)param_1[3]) ^ *param_3; uVar10 = param_3[0xf2]; uVar3 = ((uint)param_1[4] << 0x18 | (uint)param_1[5] << 0x10 | (uint)param_1[6] << 8 | (uint)param_1[7]) ^ param_3[1]; uVar2 = ((uint)param_1[8] << 0x18 | (uint)param_1[9] << 0x10 | (uint)param_1[10] << 8 | (uint)param_1[0xb]) ^ param_3[2]; uVar8 = ((uint)CONCAT11(param_1[0xe],param_1[0xf]) | (uint)param_1[0xc] << 0x18 | (uint)param_1[0xd] << 0x10) ^ param_3[3]; if (1 < (int)uVar10) { uVar11 = (ulonglong)(uVar10 - 1); puVar9 = param_3 + 10; do { uVar5 = (ulonglong)(int)uVar3; uVar6 = (ulonglong)(int)uVar2; uVar7 = (ulonglong)(int)uVar8; uVar4 = (ulonglong)(int)uVar1; uVar3 = *(uint *)(&DAT_140142cb0 + ((longlong)uVar5 >> 0x18 & 0xffU) * 4) ^ *(uint *)(&DAT_1401430b0 + ((longlong)uVar6 >> 0x10 & 0xffU) * 4) ^ *(uint *)(&DAT_1401434b0 + ((longlong)uVar7 >> 8 & 0xffU) * 4) ^ *(uint *)(&DAT_1401438b0 + (uVar4 & 0xff) * 4) ^ puVar9[-1]; uVar2 = *(uint *)(&DAT_1401434b0 + ((longlong)uVar4 >> 8 & 0xffU) * 4) ^ *(uint *)(&DAT_140142cb0 + ((longlong)uVar6 >> 0x18 & 0xffU) * 4) ^ *(uint *)(&DAT_1401430b0 + ((longlong)uVar7 >> 0x10 & 0xffU) * 4) ^ *(uint *)(&DAT_1401438b0 + (uVar5 & 0xff) * 4) ^ *puVar9; uVar8 = *(uint *)(&DAT_1401430b0 + ((longlong)uVar4 >> 0x10 & 0xffU) * 4) ^ *(uint *)(&DAT_1401434b0 + ((longlong)uVar5 >> 8 & 0xffU) * 4) ^ *(uint *)(&DAT_140142cb0 + ((longlong)uVar7 >> 0x18 & 0xffU) * 4) ^ *(uint *)(&DAT_1401438b0 + (uVar6 & 0xff) * 4) ^ puVar9[1]; uVar1 = *(uint *)(&DAT_140142cb0 + (ulonglong)(uVar1 >> 0x18) * 4) ^ *(uint *)(&DAT_1401430b0 + ((longlong)uVar5 >> 0x10 & 0xffU) * 4) ^ *(uint *)(&DAT_1401434b0 + ((longlong)uVar6 >> 8 & 0xffU) * 4) ^ *(uint *)(&DAT_1401438b0 + (uVar7 & 0xff) * 4) ^ puVar9[-2]; uVar11 = uVar11 - 1; puVar9 = puVar9 + 8; } while (uVar11 != 0); uVar10 = param_3[0xf2]; } uVar6 = (ulonglong)(int)uVar2; uVar5 = (ulonglong)(int)uVar8; puVar9 = param_3 + (longlong)(int)uVar10 * 8; uVar4 = (ulonglong)(int)uVar1; uVar11 = (ulonglong)(int)uVar3; uVar10 = *puVar9; *param_2 = (&DAT_140142ab0)[(longlong)uVar4 >> 0x18 & 0xff] ^ (byte)(uVar10 >> 0x18); param_2[1] = (&DAT_140142ab0)[(longlong)uVar11 >> 0x10 & 0xff] ^ (byte)(uVar10 >> 0x10); param_2[2] = (&DAT_140142ab0)[(longlong)uVar6 >> 8 & 0xff] ^ (byte)(uVar10 >> 8); param_2[3] = (&DAT_140142ab0)[uVar5 & 0xff] ^ (byte)uVar10; uVar10 = puVar9[1]; param_2[4] = (&DAT_140142ab0)[(longlong)uVar11 >> 0x18 & 0xff] ^ (byte)(uVar10 >> 0x18); param_2[5] = (&DAT_140142ab0)[(longlong)uVar6 >> 0x10 & 0xff] ^ (byte)(uVar10 >> 0x10); param_2[6] = (&DAT_140142ab0)[(longlong)uVar5 >> 8 & 0xff] ^ (byte)(uVar10 >> 8); param_2[7] = (&DAT_140142ab0)[uVar4 & 0xff] ^ (byte)uVar10; uVar10 = puVar9[2]; param_2[8] = (&DAT_140142ab0)[(longlong)uVar6 >> 0x18 & 0xff] ^ (byte)(uVar10 >> 0x18); param_2[9] = (&DAT_140142ab0)[(longlong)uVar5 >> 0x10 & 0xff] ^ (byte)(uVar10 >> 0x10); param_2[10] = (&DAT_140142ab0)[(longlong)uVar4 >> 8 & 0xff] ^ (byte)(uVar10 >> 8); param_2[0xb] = (&DAT_140142ab0)[uVar11 & 0xff] ^ (byte)uVar10; uVar10 = puVar9[3]; param_2[0xc] = (&DAT_140142ab0)[(longlong)uVar5 >> 0x18 & 0xff] ^ (byte)(uVar10 >> 0x18); param_2[0xd] = (&DAT_140142ab0)[(longlong)uVar4 >> 0x10 & 0xff] ^ (byte)(uVar10 >> 0x10); param_2[0xe] = (&DAT_140142ab0)[(longlong)uVar11 >> 8 & 0xff] ^ (byte)(uVar10 >> 8); param_2[0xf] = (&DAT_140142ab0)[uVar6 & 0xff] ^ (byte)uVar10; return; }