//----- (004CBBC0) -------------------------------------------------------- int __cdecl sub_4CBBC0(int a1) { int v1; // esi@1 int result; // eax@2 char (**v3)[18]; // eax@3 int v4; // ebx@5 int (__cdecl *v5)(_DWORD); // eax@13 int v6; // eax@1 int v7; // eax@11 int v8; // ecx@13 v6 = sub_4CC080(0x4Cu, (int)".\\crypto\\dh\\dh_lib.c", 111); v1 = v6; if ( !v6 ) { sub_4CEC20(5u, 105, 65, (int)".\\crypto\\dh\\dh_lib.c", 114); return 0; } v3 = (char (**)[18])dword_542C1C; if ( !dword_542C1C ) { v3 = sub_4CC8C0(); dword_542C1C = (int)v3; } v4 = a1; *(_DWORD *)(v1 + 68) = v3; if ( v4 ) { if ( !sub_4CD7D0(v4) ) { sub_4CEC20(5u, 105, 38, (int)".\\crypto\\dh\\dh_lib.c", 124); sub_4CC300((void *)v1); return 0; } *(_DWORD *)(v1 + 72) = v4; } else { *(_DWORD *)(v1 + 72) = sub_4CE580(); } if ( !*(_DWORD *)(v1 + 72) || (v7 = _fileno(*(FILE **)(v1 + 72)), *(_DWORD *)(v1 + 68) = v7, v7) ) { v8 = *(_DWORD *)(v1 + 68); *(_DWORD *)v1 = 0; *(_DWORD *)(v1 + 4) = 0; *(_DWORD *)(v1 + 8) = 0; *(_DWORD *)(v1 + 12) = 0; *(_DWORD *)(v1 + 16) = 0; *(_DWORD *)(v1 + 20) = 0; *(_DWORD *)(v1 + 24) = 0; *(_DWORD *)(v1 + 36) = 0; *(_DWORD *)(v1 + 40) = 0; *(_DWORD *)(v1 + 44) = 0; *(_DWORD *)(v1 + 48) = 0; *(_DWORD *)(v1 + 52) = 0; *(_DWORD *)(v1 + 32) = 0; *(_DWORD *)(v1 + 56) = 1; *(_DWORD *)(v1 + 28) = *(_DWORD *)(v8 + 24); sub_4CE4A0(8, v1, v1 + 60); v5 = *(int (__cdecl **)(_DWORD))(*(_DWORD *)(v1 + 68) + 16); if ( v5 ) { if ( !v5(v1) ) { if ( *(_DWORD *)(v1 + 72) ) sub_4CD860(*(void **)(v1 + 72)); sub_4CE510(8, v1, v1 + 60); sub_4CC300((void *)v1); v1 = 0; } } result = v1; } else { sub_4CEC20(5u, 105, 38, (int)".\\crypto\\dh\\dh_lib.c", 137); sub_4CD860(*(void **)(v1 + 72)); sub_4CC300((void *)v1); result = 0; } return result; } //----- (004CBD20) -------------------------------------------------------- void __cdecl sub_4CBD20(void *Memory) { int v1; // esi@1 int (__cdecl *v2)(_DWORD); // eax@3 int v3; // eax@2 v1 = (int)Memory; if ( Memory ) { sub_4CF410((int)((char *)Memory + 56), -1, 26, (int)".\\crypto\\dh\\dh_lib.c", 178); if ( v3 <= 0 ) { v2 = *(int (__cdecl **)(_DWORD))(*(_DWORD *)(v1 + 68) + 20); if ( v2 ) v2(v1); if ( *(_DWORD *)(v1 + 72) ) sub_4CD860(*(void **)(v1 + 72)); sub_4CE510(8, v1, v1 + 60); if ( *(_DWORD *)(v1 + 8) ) sub_4CCD30(*(void **)(v1 + 8)); if ( *(_DWORD *)(v1 + 12) ) sub_4CCD30(*(void **)(v1 + 12)); if ( *(_DWORD *)(v1 + 36) ) sub_4CCD30(*(void **)(v1 + 36)); if ( *(_DWORD *)(v1 + 40) ) sub_4CCD30(*(void **)(v1 + 40)); if ( *(_DWORD *)(v1 + 44) ) sub_4CC300(*(void **)(v1 + 44)); if ( *(_DWORD *)(v1 + 52) ) sub_4CCD30(*(void **)(v1 + 52)); if ( *(_DWORD *)(v1 + 20) ) sub_4CCD30(*(void **)(v1 + 20)); if ( *(_DWORD *)(v1 + 24) ) sub_4CCD30(*(void **)(v1 + 24)); sub_4CC300((void *)v1); } } }