/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400c8900 FUN_1400c8900 * Pseudocode, not original source. */ undefined8 FUN_1400c8900(undefined1 *param_1,int param_2,int param_3,uint *param_4) { byte bVar1; byte bVar2; uint3 uVar3; uint uVar4; uint *puVar5; uint *puVar6; uint *puVar7; int iVar8; uint uVar9; uint *puVar10; if ((param_1 == (undefined1 *)0x0) || (param_4 == (uint *)0x0)) { return 0x10; } if (((param_2 != 0x10) && (param_2 != 0x18)) && (param_2 != 0x20)) { return 3; } if ((param_3 != 0) && (param_3 != ((int)(param_2 + (param_2 >> 0x1f & 7U)) >> 3) * 2 + 6)) { return 4; } puVar5 = param_4 + 1; param_4[0x78] = ((int)(param_2 + (param_2 >> 0x1f & 7U)) >> 3) * 2 + 6; uVar4 = CONCAT31(CONCAT21(CONCAT11(*param_1,param_1[1]),param_1[2]),param_1[3]); *param_4 = uVar4; *puVar5 = CONCAT31(CONCAT21(CONCAT11(param_1[4],param_1[5]),param_1[6]),param_1[7]); param_4[2] = CONCAT31(CONCAT21(CONCAT11(param_1[8],param_1[9]),param_1[10]),param_1[0xb]); bVar1 = param_1[0xc]; uVar3 = CONCAT21(CONCAT11(bVar1,param_1[0xd]),param_1[0xe]); bVar2 = param_1[0xf]; uVar9 = CONCAT31(uVar3,bVar2); param_4[3] = uVar9; if (param_2 == 0x10) { uVar4 = *(uint *)(&DAT_1401141c0 + (ulonglong)bVar1 * 4) ^ *(uint *)(&DAT_140114dc0 + (ulonglong)((uVar3 & 0xff00) >> 8) * 4) ^ *(uint *)(&DAT_1401149c0 + (ulonglong)(uVar3 & 0xff) * 4) ^ *(uint *)(&DAT_1401145c0 + (ulonglong)bVar2 * 4) ^ uVar4 ^ 0x1000000; param_4[4] = uVar4; uVar4 = uVar4 ^ *puVar5; param_4[5] = uVar4; uVar4 = uVar4 ^ param_4[2]; param_4[6] = uVar4; param_4[7] = uVar4 ^ uVar9; puVar7 = &DAT_140116dc4; do { uVar4 = puVar5[6]; puVar6 = puVar7 + 1; uVar4 = *(uint *)(&DAT_1401141c0 + (ulonglong)(uVar4 >> 0x18) * 4) ^ *(uint *)(&DAT_140114dc0 + (ulonglong)(uVar4 >> 0x10 & 0xff) * 4) ^ *(uint *)(&DAT_1401149c0 + (ulonglong)(uVar4 >> 8 & 0xff) * 4) ^ *(uint *)(&DAT_1401145c0 + (ulonglong)(uVar4 & 0xff) * 4) ^ puVar5[3] ^ *puVar7; puVar5[7] = uVar4; uVar4 = uVar4 ^ puVar5[4]; puVar5[8] = uVar4; uVar4 = puVar5[5] ^ uVar4; puVar5[9] = uVar4; puVar5[10] = uVar4 ^ puVar5[6]; puVar7 = puVar6; puVar5 = puVar5 + 4; } while (puVar6 != (uint *)"sha256"); } else if (param_2 == 0x18) { param_4[4] = CONCAT31(CONCAT21(CONCAT11(param_1[0x10],param_1[0x11]),param_1[0x12]), param_1[0x13]); bVar1 = param_1[0x14]; uVar3 = CONCAT21(CONCAT11(bVar1,param_1[0x15]),param_1[0x16]); bVar2 = param_1[0x17]; param_4[5] = CONCAT31(uVar3,bVar2); uVar4 = *(uint *)(&DAT_1401141c0 + (ulonglong)bVar1 * 4) ^ *(uint *)(&DAT_140114dc0 + (ulonglong)((uVar3 & 0xff00) >> 8) * 4) ^ *(uint *)(&DAT_1401149c0 + (ulonglong)(uVar3 & 0xff) * 4) ^ *(uint *)(&DAT_1401145c0 + (ulonglong)bVar2 * 4) ^ uVar4 ^ 0x1000000; param_4[6] = uVar4; uVar4 = uVar4 ^ *puVar5; param_4[7] = uVar4; uVar4 = uVar4 ^ param_4[2]; param_4[8] = uVar4; param_4[9] = uVar4 ^ param_4[3]; puVar5 = &DAT_140116dc4; puVar7 = param_4 + 10; do { puVar6 = puVar5 + 1; *puVar7 = puVar7[-6] ^ puVar7[-1]; puVar7[1] = puVar7[-5] ^ puVar7[-6] ^ puVar7[-1]; uVar4 = param_4[((-0x28 - (longlong)param_4) + (longlong)(puVar7 + 6) >> 2) + 5]; uVar4 = *(uint *)(&DAT_1401141c0 + (ulonglong)(uVar4 >> 0x18) * 4) ^ *(uint *)(&DAT_140114dc0 + (ulonglong)(uVar4 >> 0x10 & 0xff) * 4) ^ *(uint *)(&DAT_1401149c0 + (ulonglong)(uVar4 >> 8 & 0xff) * 4) ^ *(uint *)(&DAT_1401145c0 + (ulonglong)(uVar4 & 0xff) * 4) ^ puVar7[-4] ^ *puVar5; puVar7[2] = uVar4; uVar4 = puVar7[-3] ^ uVar4; puVar7[3] = uVar4; uVar4 = puVar7[-2] ^ uVar4; puVar7[4] = uVar4; puVar7[5] = puVar7[-1] ^ uVar4; puVar5 = puVar6; puVar7 = puVar7 + 6; } while (puVar6 != (uint *)&DAT_140116de0); } else { if (param_2 != 0x20) { return 1; } param_4[4] = CONCAT31(CONCAT21(CONCAT11(param_1[0x10],param_1[0x11]),param_1[0x12]), param_1[0x13]); param_4[5] = CONCAT31(CONCAT21(CONCAT11(param_1[0x14],param_1[0x15]),param_1[0x16]), param_1[0x17]); param_4[6] = CONCAT31(CONCAT21(CONCAT11(param_1[0x18],param_1[0x19]),param_1[0x1a]), param_1[0x1b]); bVar1 = param_1[0x1c]; uVar3 = CONCAT21(CONCAT11(bVar1,param_1[0x1d]),param_1[0x1e]); bVar2 = param_1[0x1f]; param_4[7] = CONCAT31(uVar3,bVar2); uVar4 = *(uint *)(&DAT_1401141c0 + (ulonglong)bVar1 * 4) ^ *(uint *)(&DAT_140114dc0 + (ulonglong)((uVar3 & 0xff00) >> 8) * 4) ^ *(uint *)(&DAT_1401149c0 + (ulonglong)(uVar3 & 0xff) * 4) ^ *(uint *)(&DAT_1401145c0 + (ulonglong)bVar2 * 4) ^ uVar4 ^ 0x1000000; param_4[8] = uVar4; uVar4 = uVar4 ^ *puVar5; param_4[9] = uVar4; uVar4 = uVar4 ^ param_4[2]; param_4[10] = uVar4; param_4[0xb] = uVar4 ^ param_4[3]; puVar5 = &DAT_140116dc4; puVar7 = param_4 + 0xc; do { uVar4 = puVar7[-1]; puVar6 = puVar5 + 1; uVar9 = *(uint *)(&DAT_1401141c0 + (ulonglong)(uVar4 & 0xff) * 4) ^ *(uint *)(&DAT_140114dc0 + (ulonglong)(uVar4 >> 0x18) * 4) ^ *(uint *)(&DAT_1401149c0 + (ulonglong)((uVar4 >> 8 & 0xff00) >> 8) * 4) ^ *(uint *)(&DAT_1401145c0 + (ulonglong)(uVar4 >> 8 & 0xff) * 4) ^ puVar7[-8]; uVar4 = puVar7[-7] ^ uVar9; *puVar7 = uVar9; puVar7[1] = uVar4; uVar4 = puVar7[-6] ^ uVar4; puVar7[2] = uVar4; puVar7[3] = puVar7[-5] ^ uVar4; uVar4 = param_4[((-0x30 - (longlong)param_4) + (longlong)(puVar7 + 8) >> 2) + 7]; uVar4 = *(uint *)(&DAT_1401141c0 + (ulonglong)(uVar4 >> 0x18) * 4) ^ *(uint *)(&DAT_140114dc0 + (ulonglong)(uVar4 >> 0x10 & 0xff) * 4) ^ *(uint *)(&DAT_1401149c0 + (ulonglong)(uVar4 >> 8 & 0xff) * 4) ^ *(uint *)(&DAT_1401145c0 + (ulonglong)(uVar4 & 0xff) * 4) ^ puVar7[-4] ^ *puVar5; puVar7[4] = uVar4; uVar4 = puVar7[-3] ^ uVar4; puVar7[5] = uVar4; uVar4 = puVar7[-2] ^ uVar4; puVar7[6] = uVar4; puVar7[7] = puVar7[-1] ^ uVar4; puVar5 = puVar6; puVar7 = puVar7 + 8; } while (puVar6 != (uint *)&DAT_140116ddc); } iVar8 = 1; puVar5 = param_4 + 0x3c; puVar7 = param_4 + (longlong)(param_2 + 0x1c) + -4; param_4[0x3c] = param_4[(longlong)(param_2 + 0x1c) + -4]; param_4[0x3d] = puVar7[1]; param_4[0x3e] = puVar7[2]; param_4[0x3f] = puVar7[3]; puVar6 = puVar7; puVar10 = puVar5; if (1 < (int)param_4[0x78]) { do { uVar4 = puVar6[-4]; puVar7 = puVar6 + -4; puVar5 = puVar10 + 4; iVar8 = iVar8 + 1; *puVar5 = *(uint *)(&DAT_140115dc0 + (ulonglong)(uVar4 >> 0x18) * 4) ^ *(uint *)(&DAT_1401161c0 + (ulonglong)(uVar4 >> 0x10 & 0xff) * 4) ^ *(uint *)(&DAT_1401165c0 + (ulonglong)(uVar4 >> 8 & 0xff) * 4) ^ *(uint *)(&DAT_1401169c0 + (ulonglong)(uVar4 & 0xff) * 4); uVar4 = puVar6[-3]; puVar10[5] = *(uint *)(&DAT_140115dc0 + (ulonglong)(uVar4 >> 0x18) * 4) ^ *(uint *)(&DAT_1401161c0 + (ulonglong)(uVar4 >> 0x10 & 0xff) * 4) ^ *(uint *)(&DAT_1401165c0 + (ulonglong)(uVar4 >> 8 & 0xff) * 4) ^ *(uint *)(&DAT_1401169c0 + (ulonglong)(uVar4 & 0xff) * 4); uVar4 = puVar6[-2]; puVar10[6] = *(uint *)(&DAT_140115dc0 + (ulonglong)(uVar4 >> 0x18) * 4) ^ *(uint *)(&DAT_1401161c0 + (ulonglong)(uVar4 >> 0x10 & 0xff) * 4) ^ *(uint *)(&DAT_1401165c0 + (ulonglong)(uVar4 >> 8 & 0xff) * 4) ^ *(uint *)(&DAT_1401169c0 + (ulonglong)(uVar4 & 0xff) * 4); uVar4 = puVar6[-1]; puVar10[7] = *(uint *)(&DAT_140115dc0 + (ulonglong)(uVar4 >> 0x18) * 4) ^ *(uint *)(&DAT_1401161c0 + (ulonglong)(uVar4 >> 0x10 & 0xff) * 4) ^ *(uint *)(&DAT_1401165c0 + (ulonglong)(uVar4 >> 8 & 0xff) * 4) ^ *(uint *)(&DAT_1401169c0 + (ulonglong)(uVar4 & 0xff) * 4); puVar6 = puVar7; puVar10 = puVar5; } while (iVar8 < (int)param_4[0x78]); } puVar5[4] = puVar7[-4]; puVar5[5] = puVar7[-3]; puVar5[6] = puVar7[-2]; puVar5[7] = puVar7[-1]; return 0; }