//----- (004CCA60) -------------------------------------------------------- signed int __cdecl sub_4CCA60(int a1, int a2, int a3) { int v3; // ebx@1 int v4; // esi@1 int v6; // eax@4 unsigned int v7; // edi@4 __int16 v8; // ST10_2@6 int v9; // ST14_4@6 int v10; // ST18_4@6 int v11; // ebp@11 int v12; // ST18_4@1 int v13; // [sp+10h] [bp-8h]@1 int v14; // [sp+14h] [bp-4h]@5 v4 = a3; v3 = 0; v12 = *(_DWORD *)(a3 + 8); v13 = -1; if ( sub_4CCCB0(v12) > 10000 ) { sub_4CEC20(5u, 102, 103, (int)".\\crypto\\dh\\dh_key.c", 184); return -1; } v6 = sub_4D0D10(); v7 = v6; if ( !v6 ) return -1; sub_4D0DE0(v6); v14 = sub_4D0F30(v7); if ( !*(_DWORD *)(v4 + 24) ) { v10 = 195; v9 = (int)".\\crypto\\dh\\dh_key.c"; v8 = 100; LABEL_17: sub_4CEC20(5u, 102, v8, v9, v10); goto LABEL_18; } if ( *(_BYTE *)(v4 + 28) & 1 ) { v3 = sub_4D1A50(v4 + 32, 26, *(_DWORD *)(v4 + 8), v7); if ( !(*(_BYTE *)(v4 + 28) & 2) ) *(_DWORD *)(*(_DWORD *)(v4 + 24) + 16) |= 4u; if ( !v3 ) goto LABEL_18; } v11 = a2; if ( !sub_4D1BB0(v4, a2, (int)&a3) || a3 ) { v10 = 214; v9 = (int)".\\crypto\\dh\\dh_key.c"; v8 = 102; goto LABEL_17; } if ( !(*(int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)(v4 + 68) + 12))( v4, v14, v11, *(_DWORD *)(v4 + 24), *(_DWORD *)(v4 + 8), v7, v3) ) { v10 = 220; v9 = (int)".\\crypto\\dh\\dh_key.c"; v8 = 3; goto LABEL_17; } v13 = sub_4CD330(v14, a1); LABEL_18: sub_4D0EC0(v7); sub_4D0D70((void *)v7); return v13; }