/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400a1130 FUN_1400a1130 * Pseudocode, not original source. */ void FUN_1400a1130(longlong param_1,longlong param_2,longlong param_3) { uint uVar1; undefined8 *puVar2; ulonglong uVar3; undefined *puVar4; undefined *puVar5; undefined *puVar6; char *pcVar7; longlong lVar8; ulonglong uVar9; char *pcVar10; undefined8 *puVar11; uint *puVar12; bool bVar13; uint local_res18 [2]; undefined8 *local_res20; exception local_80 [72]; puVar2 = operator_new(0x48); *puVar2 = 0; puVar2[1] = 0; puVar2[2] = 0; puVar2[3] = 0; puVar2[4] = 0; puVar2[5] = 0; puVar2[6] = 0; puVar2[7] = 0; puVar2[8] = 0; pcVar10 = (char *)0x0; pcVar7 = pcVar10; if (*(uint *)(param_3 + 0x18) != 0) { pcVar7 = *(char **)(param_3 + 0x10); } puVar11 = puVar2; local_res20 = puVar2; uVar3 = FUN_1400beed0(pcVar7,*(uint *)(param_3 + 0x18),(undefined4 *)puVar2); bVar13 = (int)uVar3 != 0; uVar3 = (ulonglong)bVar13; if (bVar13) { FUN_14002f1e0(local_80,L"%s fail: %d",L"Proud::CRsaKey::FromBlob",1); /* WARNING: Subroutine does not return */ _CxxThrowException(local_80,(ThrowInfo *)&DAT_140151b88); } uVar1 = *(uint *)(param_2 + 0x18); local_res18[0] = uVar1; local_res18[0] = (*DAT_140163330)(puVar2[3]); uVar9 = (ulonglong)local_res18[0]; lVar8 = param_1; FUN_14001bc70(param_1,local_res18[0],(SIZE_T)puVar11); pcVar7 = pcVar10; if (*(int *)(param_1 + 0x18) != 0) { pcVar7 = *(char **)(param_1 + 0x10); } if (*(int *)(param_2 + 0x18) != 0) { pcVar10 = *(char **)(param_2 + 0x10); } puVar4 = FUN_1400a0eb0(lVar8,uVar9,puVar11,uVar3); puVar5 = FUN_1400a0eb0(lVar8,uVar9,puVar11,uVar3); puVar6 = FUN_1400a0eb0(lVar8,uVar9,puVar11,uVar3); puVar12 = local_res18; uVar3 = FUN_1400bf940(pcVar10,uVar1,pcVar7,puVar12,(byte *)0x0,0,(ulonglong)puVar6, *(uint *)(puVar5 + 0x1058),*(uint *)(puVar4 + 0x105c),2,(longlong)puVar2); if ((int)uVar3 != 0) { FUN_14002f1e0(local_80,L"%s fail: %d",L"Proud::CRsa::EncryptSessionKeyByPublicKey",1); /* WARNING: Subroutine does not return */ _CxxThrowException(local_80,(ThrowInfo *)&DAT_140151b88); } if (*(uint *)(param_1 + 0x18) < local_res18[0]) { FUN_14002f1e0(local_80,L"Encryption result is larger! Memory corruption may occur!",pcVar7, puVar12); /* WARNING: Subroutine does not return */ _CxxThrowException(local_80,(ThrowInfo *)&DAT_140151b88); } FUN_14001bc70(param_1,local_res18[0],(SIZE_T)pcVar7); FUN_1400bee80((longlong)puVar2); operator_delete(puVar2); return; }