/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400ce820 FUN_1400ce820 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1400ce820(uint *param_1,byte *param_2,byte *param_3,ulonglong param_4,int param_5) { uint uVar1; undefined1 auVar2 [16]; undefined1 auVar3 [16]; ulonglong uVar4; byte *pbVar5; uint uVar6; undefined1 auStack_b8 [32]; exception local_98 [72]; byte local_50 [32]; ulonglong local_30; local_30 = DAT_1401ac5a0 ^ (ulonglong)auStack_b8; if ((int)param_1[0xf0] < 1) { FUN_14006ba50(local_98,L"aes key is not initialized",param_3,param_4); /* WARNING: Subroutine does not return */ _CxxThrowException(local_98,(ThrowInfo *)&DAT_1401a93e8); } if (param_4 != 0) { auVar2._8_8_ = 0; auVar2._0_8_ = (longlong)(int)param_1[0xf1]; auVar3._8_8_ = 0; auVar3._0_8_ = param_4; uVar4 = param_4 / (ulonglong)(longlong)(int)param_1[0xf1]; if (SUB168(auVar3 % auVar2,0) == 0) { local_50[1] = 0; local_50[2] = 0; local_50[3] = 0; local_50[4] = 0; local_50[5] = 0; local_50[6] = 0; local_50[7] = 0; local_50[8] = 0; local_50[9] = 0; local_50[10] = 0; local_50[0xb] = 0; local_50[0xc] = 0; local_50[0xd] = 0; local_50[0xe] = 0; local_50[0xf] = 0; local_50[0x10] = 0; local_50[0x11] = 0; local_50[0x12] = 0; local_50[0x13] = 0; local_50[0x14] = 0; local_50[0x15] = 0; local_50[0x16] = 0; local_50[0x17] = 0; local_50[0x18] = 0; local_50[0x19] = 0; local_50[0x1a] = 0; local_50[0x1b] = 0; local_50[0x1c] = 0; local_50[0x1d] = 0; local_50[0x1e] = 0; local_50[0x1f] = 0; uVar6 = 0; local_50[0] = SUB161(auVar3 % auVar2,0); if (param_5 == 1) { if (uVar4 != 0) { do { FUN_1400ce1e0(param_2,param_3,(longlong)param_1); if (0 < (int)param_1[0xf1]) { uVar4 = (ulonglong)param_1[0xf1]; pbVar5 = param_3; do { *pbVar5 = *pbVar5 ^ pbVar5[(longlong)(local_50 + -(longlong)param_3)]; uVar4 = uVar4 - 1; pbVar5 = pbVar5 + 1; } while (uVar4 != 0); } uVar1 = param_1[0xf1]; memcpy(local_50,param_2,(longlong)(int)uVar1); uVar6 = uVar6 + 1; param_2 = param_2 + (int)param_1[0xf1]; param_3 = param_3 + (int)param_1[0xf1]; } while ((ulonglong)uVar6 < param_4 / (ulonglong)(longlong)(int)uVar1); } } else if (param_5 == 2) { if (uVar4 != 0) { do { FUN_1400cde30(local_50,param_3,param_1); if (0 < (int)param_1[0xf1]) { uVar4 = (ulonglong)param_1[0xf1]; pbVar5 = param_3; do { *pbVar5 = *pbVar5 ^ pbVar5[(longlong)param_2 - (longlong)param_3]; uVar4 = uVar4 - 1; pbVar5 = pbVar5 + 1; } while (uVar4 != 0); } uVar1 = param_1[0xf1]; memcpy(local_50,param_2,(longlong)(int)uVar1); uVar6 = uVar6 + 1; param_2 = param_2 + (int)param_1[0xf1]; param_3 = param_3 + (int)param_1[0xf1]; } while ((ulonglong)uVar6 < param_4 / (ulonglong)(longlong)(int)uVar1); } } else if (uVar4 != 0) { do { FUN_1400ce1e0(param_2,param_3,(longlong)param_1); uVar6 = uVar6 + 1; param_2 = param_2 + (int)param_1[0xf1]; param_3 = param_3 + (int)param_1[0xf1]; } while ((ulonglong)uVar6 < param_4 / (ulonglong)(longlong)(int)param_1[0xf1]); } return; } } FUN_14006ba50(local_98,L"block size is not 16byte or 24byte or 32byte",param_3,param_4); /* WARNING: Subroutine does not return */ _CxxThrowException(local_98,(ThrowInfo *)&DAT_1401a93e8); }