Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* This file has been generated by the Hex-Rays decompiler.
- Copyright (c) 2007-2011 Hex-Rays <info@hex-rays.com>
- Detected compiler: Visual C++
- */
- #include <windows.h>
- #include <defs.h>
- //-------------------------------------------------------------------------
- // Data declarations
- extern char aLtc_mp_nameNul[20]; // weak
- extern char aKeyNull[12]; // weak
- extern char aInNull[11]; // weak
- extern char aCCrDocLibsLibt[51]; // weak
- extern int dword_430060[]; // weak
- extern int dword_430064[]; // weak
- extern char *off_430078; // weak
- extern char aANull[10]; // weak
- extern char aCCrDocLibsLi_0[64]; // weak
- extern char aAVoid0[17]; // weak
- extern char aBNull[10]; // weak
- extern char aCNull[10]; // weak
- extern char aDNull[10]; // weak
- extern char aCipherNull[15]; // weak
- extern char aCCrDocLibsLi_1[68]; // weak
- extern char aCtrNull[12]; // weak
- extern char aCtNull[11]; // weak
- extern char aPtNull[11]; // weak
- extern char aCCrDocLibsLi_2[55]; // weak
- extern char aCCrDocLibsLi_3[55]; // weak
- extern char aIvNull[11]; // weak
- extern char aCCrDocLibsLi_4[53]; // weak
- extern char aNameNull[13]; // weak
- extern char aCCrDocLibsLi_5[62]; // weak
- extern char aCCrDocLibsLi_6[66]; // weak
- extern char *cipherDescriptor; // weak
- extern int dword_430450[]; // weak
- extern int dword_430C50[]; // weak
- extern int dword_431050[]; // weak
- extern int dword_431450[]; // weak
- extern int dword_431850[]; // weak
- extern int dword_431C50[]; // weak
- extern int dword_432050[]; // weak
- extern int dword_432450[]; // weak
- extern int dword_432850[]; // weak
- extern int dword_432C50[]; // weak
- extern int dword_433050[]; // weak
- extern int dword_433450[]; // weak
- extern int dword_433850[]; // weak
- extern int dword_433C50[]; // weak
- extern int dword_434050[]; // weak
- extern int dword_434450[]; // weak
- extern int dword_434850[]; // weak
- extern int dword_434C50[]; // weak
- extern int dword_434C78[]; // weak
- extern _UNKNOWN unk_434C7C; // weak
- extern _UNKNOWN unk_434C9C; // weak
- extern _UNKNOWN unk_434CAC; // weak
- extern char aSkeyNull[13]; // weak
- extern char aCCrDocLibsLi_7[49]; // weak
- extern char aKeysizeNull[16]; // weak
- extern char aHashNull[13]; // weak
- extern char aCCrDocLibsLi_8[66]; // weak
- extern char aOutlenNull[15]; // weak
- extern char aOutNull[12]; // weak
- extern char aCCrDocLibsLi_9[56]; // weak
- extern char aCCrDocLibsL_10[60]; // weak
- extern char aCCrDocLibsL_11[64]; // weak
- extern char *hashDescriptor; // weak
- extern char *off_4351A8; // weak
- extern _UNKNOWN unk_4351AC; // weak
- extern char *off_435298; // weak
- extern _UNKNOWN unk_43529C; // weak
- extern char aMdNull[11]; // weak
- extern char aCCrDocLibsL_12[52]; // weak
- extern char aCCrDocLibsL_13[52]; // weak
- extern int dword_4353F8[]; // weak
- extern char aCCrDocLibsL_14[80]; // weak
- extern char aLtc_argchkSFai[]; // idb
- extern char aCCrDocLibsL_15[52]; // weak
- extern char aCCrDocLibsL_16[53]; // weak
- extern char aModulusNull[16]; // weak
- extern char aKbNull[11]; // weak
- extern char aKaNull[11]; // weak
- extern char aCNull_0[10]; // weak
- extern char aBNull_0[10]; // weak
- extern char aANull_0[10]; // weak
- extern char aCCrDocLibsL_17[56]; // weak
- extern char aMpNull[11]; // weak
- extern char aPNull[10]; // weak
- extern char aCCrDocLibsL_18[52]; // weak
- extern char aRNull[10]; // weak
- extern char aCCrDocLibsL_19[69]; // weak
- extern char aQNull[10]; // weak
- extern char aCCrDocLibsL_20[69]; // weak
- extern char aGNull[10]; // weak
- extern char aKNull[10]; // weak
- extern char aCCrDocLibsL_21[55]; // weak
- extern char aOutVoid0[19]; // weak
- extern char aCCrDocLibsL_22[46]; // weak
- extern char aCCrDocLibsL_23[59]; // weak
- extern char aKeyVoid0[19]; // weak
- extern char aCCrDocLibsL_24[49]; // weak
- extern char aPublic_keyNull[19]; // weak
- extern char aPrivate_keyNul[20]; // weak
- extern char aCCrDocLibsL_25[58]; // weak
- extern char aIdNull[11]; // weak
- extern char aCCrDocLibsL_26[64]; // weak
- extern char aListNull[13]; // weak
- extern char aCCrDocLibsL_27[77]; // weak
- extern char aNNull[10]; // weak
- extern char aCCrDocLibsL_28[49]; // weak
- extern char aInlenNull[14]; // weak
- extern char aCCrDocLibsL_29[70]; // weak
- extern char aCCrDocLibsL_30[74]; // weak
- extern char aCCrDocLibsL_31[72]; // weak
- extern char aCCrDocLibsL_32[73]; // weak
- extern char aCCrDocLibsL_33[73]; // weak
- extern int dword_4365C8[]; // weak
- extern int dword_4365CC[]; // weak
- extern char aOctetsNull[15]; // weak
- extern char aCCrDocLibsL_34[90]; // weak
- extern char aCCrDocLibsL_35[90]; // weak
- extern int dword_4368E0[]; // weak
- extern int dword_4368E4[]; // weak
- extern char aCCrDocLibsL_36[71]; // weak
- extern char aCCrDocLibsL_37[71]; // weak
- extern char aWordsNull[14]; // weak
- extern char aCCrDocLibsL_38[92]; // weak
- extern char aCCrDocLibsL_39[92]; // weak
- extern char aCCrDocLibsL_40[75]; // weak
- extern char aCCrDocLibsL_41[75]; // weak
- extern char aCCrDocLibsL_42[71]; // weak
- extern char aCCrDocLibsL_43[71]; // weak
- extern char aCCrDocLibsL_44[84]; // weak
- extern char aNumNull[12]; // weak
- extern char aCCrDocLibsL_45[84]; // weak
- extern char aCCrDocLibsL_46[72]; // weak
- extern char aCCrDocLibsL_47[72]; // weak
- extern char aCCrDocLibsL_48[72]; // weak
- extern char aCCrDocLibsL_49[72]; // weak
- extern char aUtctimeNull[16]; // weak
- extern char aCCrDocLibsL_50[72]; // weak
- extern char aS[]; // idb
- extern char aDbgheap_c[10]; // weak
- extern char a_crtcheckmemor[]; // idb
- extern char a_crtisvalidhea[]; // idb
- extern char a_pfirstblockPh[]; // idb
- extern char a_plastblockPhe[]; // idb
- extern char aPheadNblockuse[]; // idb
- extern char aPheadNlineIgno[]; // idb
- extern char aDamageAfterHsB[]; // idb
- extern char aDamageBeforeHs[]; // idb
- extern char a_block_type_is[]; // idb
- extern char aClientHookFree[27]; // weak
- extern char aHsLocatedAt0x0[]; // idb
- extern char aHsAllocatedAtF[]; // idb
- extern char aDamageOnTopOfF[]; // idb
- extern char aDamaged[8]; // weak
- extern char a_heapchkFail_3[43]; // weak
- extern char a_heapchkFail_2[34]; // weak
- extern char a_heapchkFail_1[34]; // weak
- extern char a_heapchkFail_0[35]; // weak
- extern char a_heapchkFailsW[36]; // weak
- extern char aI386Chkesp_c[14]; // weak
- extern char aTheValueOfEspW[]; // idb
- extern char Str1[]; // idb
- extern char Name[]; // idb
- extern int dword_4381A4[]; // weak
- extern _UNKNOWN unk_4381E4; // weak
- extern _UNKNOWN unk_4385E4; // weak
- extern _UNKNOWN serverKeyPtr; // weak
- extern char aAcceptFailedCo[]; // idb
- extern char aCanTListenCode[24]; // weak
- extern char aCanTBindSocket[29]; // weak
- extern char aCanTBuildSocke[30]; // weak
- extern char aErrorNetworkin[31]; // weak
- extern char aOhNoesCouldNot[]; // idb
- extern char aPDefineListeni[]; // idb
- extern char aSSilentModeNoL[]; // idb
- extern char aFFileDefineLog[]; // idb
- extern char a_HelpPrintThis[]; // idb
- extern char aCMesmerize2011[]; // idb
- extern char aTeamspeak3Acco[]; // idb
- extern char Format[]; // idb
- extern char aP[3]; // weak
- extern char aS_0[3]; // weak
- extern char asc_43BD04[3]; // weak
- extern char a_[3]; // weak
- extern char aHelp[7]; // weak
- extern char a_Ts3accservere[]; // idb
- extern char aEndClientHandl[25]; // weak
- extern char aThisMustBeTheL[75]; // weak
- extern char aItSAVserverChe[22]; // weak
- extern char aSendingServerR[34]; // weak
- extern char aThisMustBeTh_1[50]; // weak
- extern char aThisMustBeTh_0[57]; // weak
- extern char aSettingUpLocal[33]; // weak
- extern char asc_43BE98[]; // idb
- extern char aRijndael[]; // idb
- extern int dword_43BEA8; // weak
- extern char aKeyFromClientS[42]; // weak
- extern char aOhNoesCouldN_0[]; // idb
- extern char aSha512[]; // idb
- extern char aThisMustBeTheE[50]; // weak
- extern char aNotATs3ServerR[28]; // weak
- extern char aTs3c[5]; // weak
- extern char aThisMustBeTheH[49]; // weak
- extern char aReceivedClient[26]; // weak
- extern char aAwaitingPacket[31]; // weak
- extern char aMemoryAllocati[57]; // weak
- extern char aAllocatingMemo[38]; // weak
- extern char aServerKeyDataS[44]; // weak
- extern char aBeginClientHan[27]; // weak
- extern char Mode[2]; // idb
- extern char aSS[]; // idb
- extern __int16 word_43C0F8; // weak
- extern __int16 word_43C0FC; // weak
- extern __int16 word_43C100; // weak
- extern __int16 word_43C104; // weak
- extern __int16 word_43C108; // weak
- extern __int16 word_43C10C; // weak
- extern __int16 word_43C110; // weak
- extern __int16 word_43C114; // weak
- extern __int16 word_43C118; // weak
- extern __int16 word_43C11C; // weak
- extern __int16 word_43C120; // weak
- extern __int16 word_43C124; // weak
- extern __int16 word_43C128; // weak
- extern __int16 word_43C12C; // weak
- extern __int16 word_43C130; // weak
- extern __int16 word_43C134; // weak
- extern __int16 word_43C138; // weak
- extern __int16 word_43C13C; // weak
- extern __int16 word_43C140; // weak
- extern __int16 word_43C144; // weak
- extern __int16 word_43C148; // weak
- extern __int16 word_43C14C; // weak
- extern __int16 word_43C150; // weak
- extern __int16 word_43C154; // weak
- extern __int16 word_43C158; // weak
- extern __int16 word_43C15C; // weak
- extern __int16 word_43C160; // weak
- extern __int16 word_43C164; // weak
- extern __int16 word_43C168; // weak
- extern __int16 word_43C16C; // weak
- extern __int16 word_43C170; // weak
- extern __int16 word_43C174; // weak
- extern __int16 word_43C178; // weak
- extern __int16 word_43C17C; // weak
- extern __int16 word_43C180; // weak
- extern __int16 word_43C184; // weak
- extern __int16 word_43C188; // weak
- extern __int16 word_43C18C; // weak
- extern __int16 word_43C190; // weak
- extern __int16 word_43C194; // weak
- extern __int16 word_43C198; // weak
- extern __int16 word_43C19C; // weak
- extern __int16 word_43C1A0; // weak
- extern __int16 word_43C1A4; // weak
- extern __int16 word_43C1A8; // weak
- extern __int16 word_43C1AC; // weak
- extern __int16 word_43C1B0; // weak
- extern __int16 word_43C1B4; // weak
- extern __int16 word_43C1B8; // weak
- extern __int16 word_43C1BC; // weak
- extern __int16 word_43C1C0; // weak
- extern __int16 word_43C1C4; // weak
- extern __int16 word_43C1C8; // weak
- extern __int16 word_43C1CC; // weak
- extern __int16 word_43C1D0; // weak
- extern __int16 word_43C1D4; // weak
- extern __int16 word_43C1D8; // weak
- extern __int16 word_43C1DC; // weak
- extern __int16 word_43C1E0; // weak
- extern __int16 word_43C1E4; // weak
- extern __int16 word_43C1E8; // weak
- extern __int16 word_43C1EC; // weak
- extern __int16 word_43C1F0; // weak
- extern __int16 word_43C1F4; // weak
- extern __int16 word_43C1F8; // weak
- extern __int16 word_43C1FC; // weak
- extern __int16 word_43C200; // weak
- extern __int16 word_43C204; // weak
- extern __int16 word_43C208; // weak
- extern __int16 word_43C20C; // weak
- extern __int16 word_43C210; // weak
- extern __int16 word_43C214; // weak
- extern __int16 word_43C218; // weak
- extern __int16 word_43C21C; // weak
- extern __int16 word_43C220; // weak
- extern __int16 word_43C224; // weak
- extern __int16 word_43C228; // weak
- extern __int16 word_43C22C; // weak
- extern __int16 word_43C230; // weak
- extern __int16 word_43C234; // weak
- extern __int16 word_43C238; // weak
- extern __int16 word_43C23C; // weak
- extern __int16 word_43C240; // weak
- extern __int16 word_43C244; // weak
- extern __int16 word_43C248; // weak
- extern __int16 word_43C24C; // weak
- extern __int16 word_43C250; // weak
- extern __int16 word_43C254; // weak
- extern __int16 word_43C258; // weak
- extern __int16 word_43C25C; // weak
- extern __int16 word_43C260; // weak
- extern __int16 word_43C264; // weak
- extern int dword_43C268; // weak
- extern char byte_43C274; // weak
- extern char byte_43C275; // weak
- extern char off_43C278[]; // idb
- extern FILE stru_43C2E0; // idb
- extern int (__cdecl *off_43C520)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // weak
- extern int dword_43E574; // weak
- extern int dword_43E7A0; // weak
- extern int dword_43E830; // weak
- extern int dword_43E834; // weak
- extern int dword_43E838; // weak
- extern int dword_43E840; // weak
- extern int dword_43E844; // weak
- extern int dword_43E848; // weak
- extern char *off_43EC68; // weak
- extern int dword_43ECB0; // weak
- extern int dword_43ECB4; // weak
- extern int dword_43ECB8; // weak
- extern int dword_43ECBC; // weak
- extern FILE *logFilePtr; // idb
- extern int listeningPort; // weak
- extern struct sockaddr name; // idb
- extern int logFilePathPtr; // weak
- extern SOCKET wsaSocket; // idb
- extern int dword_43F6C8[]; // weak
- extern char byte_43F6CC[]; // weak
- extern int dword_43F6D8[]; // weak
- extern int dword_43F6E0[]; // weak
- extern int dword_43F6E4[]; // weak
- extern int dword_43F708[]; // weak
- extern int dword_4402C8[]; // weak
- extern int dword_4402D0[]; // weak
- extern _UNKNOWN unk_4402D8; // weak
- extern int dword_440318[]; // weak
- extern int dword_44031C[]; // weak
- extern int dword_440320[]; // weak
- extern int dword_440324[]; // weak
- extern int dword_440FC8[]; // weak
- extern int dword_440FDC[]; // weak
- extern int dword_4414C8; // weak
- extern int dword_4414D0; // weak
- extern int dword_4414D4; // weak
- extern int dword_441534; // idb
- extern int dword_441544; // weak
- extern int dword_441548; // weak
- extern int dword_441550; // weak
- extern int dword_4415A0; // weak
- extern struct _TIME_ZONE_INFORMATION TimeZoneInformation; // idb
- extern int dword_4417E0; // weak
- extern int dword_4417E4; // weak
- extern int (__cdecl *dword_4417E8)(_DWORD); // weak
- extern int (__cdecl *dword_4417F0)(_DWORD); // weak
- extern int (__cdecl *dword_4417F8)(_DWORD, _DWORD); // weak
- extern int (__cdecl *dword_4417FC)(_DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441804)(_DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441808)(_DWORD); // weak
- extern int (__cdecl *dword_44180C)(_DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441810)(_DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441814)(_DWORD); // weak
- extern int (__cdecl *dword_441818)(_DWORD); // weak
- extern int (__cdecl *dword_44181C)(_DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441820)(_DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441828)(_DWORD); // weak
- extern int (__cdecl *dword_44182C)(_DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441830)(_DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441834)(_DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_44183C)(_DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441840)(_DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441844)(_DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_44184C)(_DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441850)(_DWORD, _DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441854)(_DWORD, _DWORD); // weak
- extern int (__cdecl *dword_44185C)(_DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441860)(_DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441864)(_DWORD, _DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_44186C)(_DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441870)(_DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441874)(_DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441878)(_DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_44187C)(_DWORD); // weak
- extern int (__cdecl *dword_441880)(_DWORD, _DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441884)(_DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441888)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_44188C)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // weak
- extern int (__cdecl *dword_441890)(_DWORD, _DWORD, _DWORD, _DWORD); // weak
- extern HANDLE hHeap; // idb
- extern int dword_441CF0; // weak
- extern int dword_441D08; // weak
- extern int dword_441D0C; // weak
- extern void *Dst; // idb
- extern int dword_441D18; // weak
- extern LPVOID lpMem; // idb
- extern int dword_441D20; // weak
- //-------------------------------------------------------------------------
- // Function declarations
- #define __thiscall __cdecl // Test compile in C mode
- int __cdecl WSAStartupWrapperWrapper();
- int __cdecl networkLoopWrapper(SOCKET s); // idb
- FILE *__cdecl fopenWrapperWrapper(const char *Filename);
- int __cdecl main(int argc, const char **argv, const char **envp);
- _DWORD __cdecl logToFile(_DWORD); // weak
- signed int __cdecl mainLoop(int argc, const char **argv);
- int __cdecl WSAStartupWrapper();
- signed int __cdecl networkLoop(SOCKET networkSocket); // idb
- FILE *__cdecl fopenWrapper(const char *Filename);
- int __cdecl sub_401D50(int a1);
- int __cdecl tomcrypt_ecc_import(int in, int inLength, int key); // idb
- int __cdecl tomcrypt_ecc_import_ex(int a1, int a2, int a3, int a4);
- int __cdecl sub_4020D0(int a1);
- int __cdecl sub_402400(int *a1);
- int __cdecl sub_4024A0(int a1);
- int __cdecl sub_402500(int a1);
- int __cdecl sub_402570(int a1, int a2);
- int __cdecl sub_402600(int a1, int a2);
- int __cdecl sub_402690(int *a1, int a2);
- int __cdecl sub_4026F0(unsigned int a1, unsigned int a2);
- int __cdecl sub_402760(int a1);
- int __cdecl sub_4027C0(int a1, int a2);
- int __cdecl sub_402840(int a1);
- int __cdecl sub_4028A0(int a1, int a2);
- int __cdecl sub_402950(int a1, unsigned int a2);
- int __cdecl sub_4029E0(int a1);
- int __cdecl sub_402A40(int a1);
- int __cdecl sub_402AA0(unsigned int a1, signed int a2);
- int __cdecl sub_402B10(unsigned int a1, int a2, int a3);
- int __cdecl sub_402BA0(int a1, int a2, signed int a3);
- int __cdecl sub_402C30(int a1);
- int __cdecl sub_402C90(int a1, int a2);
- int __cdecl sub_402D20(unsigned int a1, int a2, int a3);
- int __cdecl sub_402DB0(int a1, int a2, int a3);
- int __cdecl sub_402E60(int a1, int a2, int a3);
- int __cdecl sub_402EF0(int a1, int a2, int a3);
- int __cdecl sub_402FA0(int a1, int a2, int a3);
- int __cdecl sub_403030(int a1, int a2, int a3);
- int __cdecl sub_4030E0(int a1, int a2, int a3);
- int __cdecl sub_403170(int a1, int a2);
- int __cdecl sub_403200(int a1, int a2, unsigned int a3, int a4);
- int __cdecl sub_403290(int a1, int a2);
- int __cdecl sub_403320(int a1, int a2, int a3);
- int __cdecl sub_4033D0(int a1, int a2, int a3);
- int __cdecl sub_403480(int a1, int a2, int a3);
- int __cdecl sub_403530(int a1, int a2, int a3, int a4);
- int __cdecl sub_403610(int a1, int a2, int a3);
- int __cdecl sub_4036C0(int a1, int a2, int a3);
- int __cdecl sub_403770(int a1, int *a2);
- int __cdecl sub_403840(unsigned int a1, signed int *a2);
- int __cdecl sub_4038D0(int a1, int a2, int *a3);
- int __cdecl sub_403990(int a1);
- int __cdecl sub_4039D0(int a1, int a2, int a3, int a4);
- int __cdecl sub_403AB0(int a1, int a2);
- int __cdecl tomcrypt_unregister_cipher(const void *Buf2);
- _DWORD __cdecl tomcrypt_ctr_decrypt(_DWORD, _DWORD, _DWORD, _DWORD); // weak
- _DWORD __cdecl tomcrypt_ctr_encrypt(_DWORD, _DWORD, _DWORD, _DWORD); // weak
- int __cdecl tomcrypt_ctr_start(signed int a1, int a2, int a3, int a4, int a5, __int16 a6, int a7);
- int __cdecl tomcrypt_find_cypher(const char *Str2);
- int __cdecl tomcrypt_register_cipher(void *Src); // idb
- int __cdecl sub_404470(int a1, signed int a2, int a3, int a4);
- int __cdecl sub_404D20(unsigned int a1);
- int __cdecl sub_404D90(int a1, int a2, int a3);
- int __cdecl sub_405480(int a1, int a2, int a3);
- int __cdecl sub_405BF0();
- signed int __cdecl sub_405E50();
- int __cdecl sub_405E70(int a1);
- int __cdecl tomcrypt_unregister_hash(const void *Buf2);
- _DWORD __cdecl tomcrypt_ecc_decrypt_key(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // weak
- int __cdecl tomcrypt_find_hash(const char *Str2);
- int __cdecl tomcrypt_register_hash(const void *Src);
- int __cdecl sub_4065F0(int a1);
- int __cdecl sub_4066E0(int a1, char *Src, unsigned int a3);
- _DWORD __cdecl sub_406890(_DWORD, _DWORD); // weak
- int __cdecl sub_407D90(int a1, int a2);
- int __cdecl sub_408160();
- int __cdecl sub_408230(int a1);
- int __cdecl sub_408320(int, void *Dst); // idb
- int __cdecl sub_4083C0();
- int __cdecl sub_408490(int a1, char a2);
- int __cdecl sub_408570(int a1, char a2);
- int __cdecl sub_4085E0(int a1, int a2, char a3);
- int __cdecl errorFunctionMaybe(int a1, int a2, int a3);
- int __cdecl sub_408830(int a1, int a2, int a3, int a4, int a5, int a6);
- int __cdecl sub_408C00(int a1, signed int a2, signed int a3, signed int a4, int a5);
- int __cdecl sub_409140(int a1, int a2, int a3, int a4, int a5, int a6);
- int __cdecl sub_409960(int a1, int a2, int a3);
- int __cdecl sub_409C20(int a1, int a2, int a3, int a4);
- int __cdecl sub_40A630(int a1, int a2, int a3, int a4, int a5);
- int __cdecl sub_40B430(int a1, int a2, int a3, int a4, int a5);
- signed int __cdecl sub_40BD00(signed int a1);
- int __cdecl sub_40BD50(int a1, int a2);
- int __cdecl tomcrypt_hash_memory(signed int a1, int a2, int a3, int a4, int a5);
- int __cdecl tomcrypt_ecc_free(int a1);
- int __cdecl tomcrypt_ecc_shared_secret(int a1, int a2, int a3, int a4);
- signed int __cdecl tomcrypt_hash_is_valid(signed int a1);
- int __cdecl tomcrypt_find_hash_oid(const void *Buf2, int a2);
- _DWORD __cdecl tomcrypt_der_decode_sequence(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // weak
- int __cdecl sub_40CC20(int, size_t SizeOfElements, int, int); // idb
- signed int __cdecl sub_40CDE0(signed int a1);
- int __cdecl sub_40CE30();
- int __cdecl sub_40CEB0(int a1);
- bool __cdecl sub_40CF10(signed int a1);
- int __cdecl sub_40CF70(int a1, unsigned int *a2, int a3, unsigned int a4);
- _DWORD __cdecl sub_40D500(_DWORD, _DWORD, _DWORD); // weak
- int __cdecl sub_40D8B0(int a1, int a2, int a3);
- signed int __cdecl sub_40DDB0(unsigned __int8 a1);
- signed int __cdecl sub_40DE70(unsigned __int16 a1);
- int __cdecl sub_40DEE0(int a1, unsigned int a2, int a3);
- int __cdecl sub_40E020(int a1, unsigned int a2, int a3, int a4);
- int __cdecl sub_40E2E0(int a1);
- int __cdecl sub_40E340(int a1);
- int __cdecl sub_40E3A0(int a1, unsigned int a2, int a3);
- int __cdecl sub_40E4B0(int a1, unsigned int a2, int a3, int a4);
- int __cdecl sub_40E6A0(int a1);
- int __cdecl sub_40E700(int a1);
- int __cdecl sub_40E760(int a1, unsigned int a2, int a3);
- int __cdecl sub_40E870(int a1, unsigned int a2, int a3, int a4);
- int __cdecl sub_40EA60(unsigned int a1);
- int __cdecl sub_40EAB0(int a1, unsigned int a2, int a3);
- int __cdecl sub_40EC30(int a1, unsigned int a2, int a3, int a4);
- int __cdecl sub_40EEA0(unsigned int a1, int a2);
- int __cdecl sub_40EF50(int a1, unsigned int a2, int a3, int a4);
- int __cdecl sub_40F120(unsigned int a1, int a2);
- int __cdecl sub_40F1D0(int a1, unsigned int a2, int a3, int a4);
- int __cdecl sub_40F3F0(unsigned int a1, int a2);
- int __cdecl sub_40F4C0(int a1, unsigned int a2, int a3);
- int __cdecl sub_40F5E0(int a1, int a2);
- int __cdecl sub_40F7D0(int a1, unsigned int a2, int a3);
- int __cdecl sub_40FA60(int a1);
- int __cdecl sub_40FAC0(int a1, int a2, int a3);
- int __cdecl sub_40FB90(int a1, int a2);
- // int __stdcall WSAGetLastError();
- // int __stdcall closesocket(SOCKET s);
- // SOCKET __stdcall accept(SOCKET s, struct sockaddr *addr, int *addrlen);
- // int __stdcall listen(SOCKET s, int backlog);
- // int __stdcall bind(SOCKET s, const struct sockaddr *name, int namelen);
- // u_short __stdcall htons(u_short hostshort);
- // SOCKET __stdcall socket(int af, int type, int protocol);
- // int __stdcall WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
- // int __stdcall send(SOCKET s, const char *buf, int len, int flags);
- // int __stdcall recvWrapper(SOCKET s, char *buf, int len, int flags);
- // void *__cdecl malloc(size_t Size);
- // void *__cdecl calloc(size_t NumOfElements, size_t SizeOfElements);
- // void *__cdecl realloc(void *Memory, size_t NewSize);
- void __cdecl CrtCheckMemoryWrapperWrapper(int a1);
- void __cdecl CrtCheckMemoryWrapper(int a1, signed int a2);
- // _DWORD __cdecl CheckBytes(_DWORD, _DWORD, _DWORD); weak
- signed int __cdecl sub_410DD0();
- // int __cdecl _CrtIsValidPointer(void *lp, UINT_PTR ucb, int); idb
- BOOL __cdecl sub_411210(int a1);
- // int printf(const char *Format, ...);
- // int __cdecl atoi(const char *Str);
- // int __cdecl rand();
- // int sprintf(char *Dest, const char *Format, ...);
- // FILE *__cdecl fopen(const char *Filename, const char *Mode);
- // int __cdecl fflush(FILE *File);
- // int __cdecl fputs(const char *Str, FILE *File);
- // char *__cdecl asctime(const struct tm *Tm);
- // struct tm *__cdecl localtime(const time_t *Time);
- // time_t __cdecl time(time_t *Time);
- // int __usercall sub_412AB8<eax>(int a1<ebp>);
- // void __usercall sub_412AD3(int a1<ebp>);
- // int __usercall _chkesp<eax>(char a1<zf>, int result<eax>, char a3<dil>);
- // int __cdecl memcmp(const void *Buf1, const void *Buf2, size_t Size);
- // int __cdecl strcmp(const char *Str1, const char *Str2);
- // void *__cdecl memcpy(void *Dst, const void *Src, size_t Size);
- // int __thiscall unknown_libname_1(_DWORD); weak
- // size_t __cdecl strlen(const char *Str);
- // _DWORD __cdecl raise(_DWORD); weak
- // int fprintf(FILE *File, const char *Format, ...);
- // _DWORD __cdecl _callnewh(_DWORD); weak
- // void *__cdecl memset(void *Dst, int Val, size_t Size);
- // int __cdecl _malloc_base(SIZE_T dwBytes); idb
- LPVOID __cdecl sub_413880(signed int dwBytes);
- // int __cdecl _CrtDbgReport(int, int, int Value, int, char *Format, char); idb
- LPVOID __cdecl sub_414110(LPVOID lpMem, signed int dwBytes);
- void *__cdecl sub_414290(LPVOID lpMem, signed int dwBytes);
- void __cdecl sub_4146B0(LPVOID lpMem);
- signed int __cdecl sub_414780();
- // _DWORD __cdecl __sbh_heap_init(_DWORD); weak
- // _DWORD __cdecl __sbh_find_block(_DWORD); weak
- // _DWORD __cdecl __sbh_verify_block(_DWORD, _DWORD); weak
- int __cdecl sub_414A90(unsigned int a1, int a2);
- // _DWORD __cdecl __sbh_alloc_block(_DWORD); weak
- // _DWORD __cdecl __sbh_resize_block(_DWORD, _DWORD, _DWORD); weak
- // int __cdecl __sbh_heap_check(_DWORD); weak
- // int __sbh_new_region(void); weak
- // _DWORD __cdecl __sbh_find_block_0(_DWORD, _DWORD, _DWORD); weak
- // _DWORD __cdecl __sbh_free_block(_DWORD, _DWORD, _DWORD); weak
- // _DWORD __cdecl __sbh_alloc_block_0(_DWORD); weak
- // _DWORD __cdecl __sbh_resize_block_0(_DWORD, _DWORD, _DWORD, _DWORD); weak
- // int __sbh_heap_check_0(void); weak
- HMODULE __cdecl sub_417510(HMODULE a1);
- signed int __cdecl sub_417570();
- signed int __cdecl sub_4177A0(int a1);
- // void __cdecl _exit(int Code);
- signed int __cdecl sub_419CA0(int a1);
- // _DWORD __cdecl cvtdate(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
- // int __cdecl _XcptFilter(int, struct _EXCEPTION_POINTERS *ExceptionInfo); idb
- // void *__cdecl memcpy_0(void *Dst, const void *Src, size_t Size);
- // __int32 __cdecl strtol(const char *Str, char **EndPtr, int Radix);
- // char *__cdecl strchr(const char *Str, int Val);
- // char *__cdecl strstr(const char *Str, const char *SubStr);
- // int __cdecl strncmp(const char *Str1, const char *Str2, size_t MaxCount);
- // int __cdecl toupper(int C);
- signed int __cdecl sub_41F810(int a1);
- void __cdecl sub_41F860(int a1);
- signed int __cdecl sub_41F8B0(int a1, int a2);
- signed int __cdecl sub_41F8F0(int a1, int a2);
- signed int __cdecl sub_41F960(unsigned int a1, unsigned int a2);
- int __cdecl sub_41F9C0(int a1);
- signed int __cdecl sub_41FA00(int a1, int a2);
- int __cdecl sub_41FA40(int a1, unsigned int a2);
- int __cdecl sub_41FA70(int a1);
- int __cdecl sub_41FAA0(int a1);
- signed int __cdecl sub_41FB00(unsigned int a1, signed int a2);
- signed int __cdecl sub_41FB60(unsigned int a1, int a2, int a3);
- signed int __cdecl sub_41FC20(int a1, int a2, signed int a3);
- int __cdecl sub_41FD10(int a1);
- signed int __cdecl sub_41FD40(int a1, int a2);
- signed int __cdecl sub_41FDD0(unsigned int a1, int a2, int a3);
- signed int __cdecl sub_41FE40(int a1, int a2, int a3);
- _DWORD __cdecl sub_41FEB0(_DWORD, _DWORD, _DWORD); // weak
- signed int __cdecl sub_41FFD0(int a1, int a2, int a3);
- signed int __cdecl sub_420040(int a1, int a2, int a3);
- _DWORD __cdecl sub_420150(_DWORD, _DWORD, _DWORD); // weak
- signed int __cdecl sub_420220(int a1, int a2, int a3);
- _DWORD __cdecl sub_4202E0(_DWORD, _DWORD); // weak
- signed int __cdecl sub_420370(int a1, int a2, unsigned int a3, int a4);
- signed int __cdecl sub_420890(int a1, int a2);
- signed int __cdecl sub_420930(int a1, int a2, int a3);
- signed int __cdecl sub_420950(int a1, int a2, int a3);
- signed int __cdecl sub_420B40(int a1, int a2, int a3);
- signed int __cdecl sub_420C00(int a1, int a2, int a3, int a4);
- signed int __cdecl sub_420C70(int a1, int a2, int a3);
- signed int __cdecl sub_420CE0(int a1, int a2, int a3);
- signed int __cdecl sub_420D30(int a1, int a2);
- signed int __cdecl sub_420D90(unsigned int a1, signed int *a2);
- signed int __cdecl sub_420E30(int a1, int a2, int a3);
- _DWORD __cdecl sub_420FA0(_DWORD, _DWORD, _DWORD, _DWORD); // weak
- signed int __cdecl sub_421130(int a1, signed int a2, int a3);
- signed int __cdecl sub_421250(int a1, signed int a2);
- int __cdecl sub_4212C0(int a1);
- signed int __cdecl sub_4212F0(int a1, signed int a2, int a3);
- int __cdecl sub_4213F0(unsigned int a1);
- signed int __cdecl sub_421430(int a1, int a2);
- int __cdecl sub_421490(int a1, int a2);
- signed int __cdecl sub_4214C0(int a1, int a2, unsigned int a3, int a4);
- signed int __cdecl sub_421680(int a1, int a2);
- signed int __cdecl sub_4216B0(int a1, int a2);
- signed int __cdecl sub_4216E0(int a1, int a2, unsigned int a3, unsigned int a4);
- signed int __cdecl sub_421850(signed int *a1, signed int *a2, int a3);
- signed int __cdecl sub_421920(int a1, int a2, int a3);
- signed int __cdecl sub_421A30(int a1, int a2, int a3, signed int a4);
- signed int __cdecl sub_421B90(int a1, int a2, int a3, signed int a4);
- signed int __cdecl sub_421CF0(int a1, int a2, int a3);
- signed int __cdecl sub_422020(int a1, int a2, int a3);
- signed int __cdecl sub_4228C0(int a1, int a2);
- signed int __cdecl sub_422A50(int a1, int a2);
- signed int __cdecl sub_422C10(int a1, int a2);
- signed int __cdecl sub_422E70(int a1, int a2);
- int __cdecl sub_4234B0(int a1, int a2);
- void __cdecl sub_423500(unsigned int a1, int a2);
- signed int __cdecl sub_423560(int a1, int a2);
- signed int __cdecl sub_4235D0(int a1, signed int a2);
- signed int __cdecl sub_423640(int a1, int a2);
- int __cdecl sub_423670(int a1);
- signed int __cdecl sub_4236A0(int a1);
- signed int __cdecl sub_423700(int a1, int a2, int a3);
- signed int __cdecl sub_423780(int a1, int a2, int a3);
- signed int __cdecl sub_423C50(int a1, int a2, int a3);
- signed int __cdecl sub_423F60(int a1, int a2);
- int __cdecl sub_424010(unsigned int a1, int a2);
- signed int __cdecl sub_424040(int a1, int a2, int a3);
- signed int __cdecl sub_424250(int a1, int a2, int a3, int a4, int a5);
- signed int __cdecl sub_424810(int a1);
- signed int __cdecl sub_424870(int a1);
- signed int __cdecl sub_4248B0(int a1, int a2, int a3, int a4, int a5);
- signed int __cdecl sub_424E00(int a1);
- signed int __cdecl sub_424E40(int a1, int a2, int a3);
- signed int __cdecl sub_424FF0(int a1, int a2);
- signed int __cdecl sub_425040(int a1, int a2, int a3);
- signed int __cdecl sub_425160(int a1, int a2, unsigned int a3);
- signed int __cdecl sub_425230(unsigned int a1, int a2, int a3);
- signed int __cdecl sub_4252F0(int a1, int a2);
- signed int __cdecl sub_425380(int a1, signed int *a2, int a3);
- int __cdecl sub_425470(int a1, int a2);
- signed int __cdecl sub_425490(unsigned int a1, int a2, int a3);
- signed int __cdecl sub_425550(int a1, int a2);
- signed int __cdecl sub_4255B0(unsigned int a1, signed int *a2, int a3);
- signed int __cdecl sub_425720(unsigned int a1, int a2);
- signed int __cdecl sub_425760(int a1, int a2, int a3, int a4);
- signed int __cdecl sub_4258D0(int a1, int a2, int a3, int a4);
- // BOOL __stdcall VirtualFree(LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType);
- // void __stdcall Sleep(DWORD dwMilliseconds);
- // BOOL __stdcall HeapValidate(HANDLE hHeap, DWORD dwFlags, LPCVOID lpMem);
- // DWORD __stdcall GetLastError();
- // LPVOID __stdcall HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes);
- // DWORD __stdcall GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize);
- // LPVOID __stdcall HeapReAlloc(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes);
- // BOOL __stdcall HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem);
- // HMODULE __stdcall GetModuleHandleA(LPCSTR lpModuleName);
- // DWORD __stdcall GetEnvironmentVariableA(LPCSTR lpName, LPSTR lpBuffer, DWORD nSize);
- // BOOL __stdcall GetVersionExA(LPOSVERSIONINFOA lpVersionInformation);
- // BOOL __stdcall HeapDestroy(HANDLE hHeap);
- // HANDLE __stdcall HeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize);
- // int __stdcall recv(SOCKET s, char *buf, int len, int flags);
- //----- (00401050) --------------------------------------------------------
- signed int __cdecl mainLoop(int argc, const char **argv)
- {
- const char *logFilePath; // eax@1
- const char **curParam; // ebp@2
- signed int result; // eax@20
- int wsaSuccess; // eax@24
- SOCKET socketDescriptor; // eax@29
- SOCKET socketDescriptor2; // esi@29
- const char *wsaErrorMessage; // [sp-8h] [bp-38h]@25
- int wsaErrorCode; // [sp-4h] [bp-34h]@25
- int argumentCtr; // [sp+10h] [bp-20h]@2
- char key; // [sp+14h] [bp-1Ch]@22
- logFilePath = "./ts3accserveremu.log";
- listeningPort = 2008;
- logFilePathPtr = (int)"./ts3accserveremu.log";
- logFilePtr = 0;
- if ( argc <= 0 )
- {
- retryNetworkLoop:
- if ( !logFilePath || (logFilePtr = fopenWrapperWrapper(logFilePath)) != 0 )
- {
- malloc(0x1000000u);
- memcpy(&dword_4417E0, &off_430078, 0xC4u);
- if ( tomcrypt_ecc_import((int)&serverKeyPtr, 161, (int)&key) )
- {
- printf("Oh noes, could not read server key data...");
- result = -1;
- }
- else
- {
- wsaSuccess = WSAStartupWrapperWrapper();
- if ( wsaSuccess )
- {
- wsaErrorCode = wsaSuccess;
- wsaErrorMessage = "Error: Networking problem: %d\n";
- }
- else
- {
- while ( 1 )
- {
- wsaSocket = socket(2, 1, 0);
- if ( wsaSocket == -1 )
- {
- wsaErrorCode = WSAGetLastError();
- wsaErrorMessage = "Can't build socket, code: %d\n";
- goto crashLabel;
- }
- *(_DWORD *)&name.sa_family = 0;
- name.sa_family = 2;
- *(_DWORD *)&name.sa_data[2] = 0;
- *(_DWORD *)&name.sa_data[6] = 0;
- *(_DWORD *)&name.sa_data[10] = 0;
- *(_WORD *)&name.sa_data[0] = htons(0x7D8u);
- *(_DWORD *)&name.sa_data[2] = 0;
- if ( bind(wsaSocket, &name, 16) == -1 )
- {
- wsaErrorCode = WSAGetLastError();
- wsaErrorMessage = "Can't bind socket, code: %d\n";
- goto crashLabel;
- }
- if ( listen(wsaSocket, 10) == -1 )
- {
- wsaErrorCode = WSAGetLastError();
- wsaErrorMessage = "Can't listen, code: %d\n";
- goto crashLabel;
- }
- socketDescriptor = accept(wsaSocket, 0, 0);
- socketDescriptor2 = socketDescriptor;
- if ( socketDescriptor == -1 )
- break;
- networkLoopWrapper(socketDescriptor);
- closesocket(socketDescriptor2);
- closesocket(wsaSocket);
- }
- wsaErrorCode = WSAGetLastError();
- wsaErrorMessage = "Accept failed, code: %d\n";
- }
- crashLabel:
- printf(wsaErrorMessage, wsaErrorCode);
- result = 1;
- }
- }
- else
- {
- printf("Could not create log file...\n");
- result = -1;
- }
- }
- else
- {
- curParam = argv;
- argumentCtr = 1;
- while ( strcmp(*curParam, "--help") && strcmp(*curParam, "-?") )
- {
- if ( strcmp(*curParam, "-f") )
- {
- if ( strcmp(*curParam, "-s") )
- {
- if ( !strcmp(*curParam, "-p") )
- {
- if ( argumentCtr < argc )
- listeningPort = atoi(curParam[1]);
- if ( !listeningPort || listeningPort == -1 )
- listeningPort = 2008;
- }
- }
- else
- {
- logFilePathPtr = 0;
- }
- }
- else
- {
- if ( argumentCtr < argc )
- logFilePathPtr = (int)curParam[1];
- }
- ++curParam;
- ++argumentCtr;
- if ( argumentCtr - 1 >= argc )
- {
- logFilePath = (const char *)logFilePathPtr;
- goto retryNetworkLoop;
- }
- }
- printf("TeamSpeak 3 Accounting Server Emulator v0.1 - Windows");
- printf("\n(c) MESMERiZE 2011\n\n");
- printf("-? / --help\t\t- Print this\n");
- printf("-f <file>\t- define logfile\n");
- printf("-s\t\t- silent mode, no logging\n");
- printf("-p\t\t- define listening port (don't use this yet)\n");
- result = 0;
- }
- return result;
- }
- // 430078: using guessed type char *off_430078;
- // 43F6A4: using guessed type int listeningPort;
- // 43F6B8: using guessed type int logFilePathPtr;
- // 4417E0: using guessed type int dword_4417E0;
- //----- (004014F0) --------------------------------------------------------
- int __cdecl WSAStartupWrapper()
- {
- struct WSAData WSAData; // [sp+0h] [bp-190h]@1
- return WSAStartup(2u, &WSAData);
- }
- //----- (00401520) --------------------------------------------------------
- signed int __cdecl networkLoop(SOCKET networkSocket)
- {
- signed int result; // eax@2
- void *packetDataBuffer; // ebp@3
- SOCKET v3; // ebx@5
- int packetDataLength; // edi@7
- int decryptResult; // eax@7
- signed int index; // esi@9
- int cipherIndex1; // eax@11
- int cipherIndex2; // eax@11
- int ctrLength1; // esi@11
- int ctrLength2; // esi@11
- unsigned int v11; // ebx@13
- int v12; // esi@13
- unsigned int v13; // ecx@13
- int v14; // edi@13
- int i; // ecx@13
- int v16; // eax@16
- int v17; // edi@17
- int j; // ecx@17
- int v19; // esi@21
- int temp1; // [sp+10h] [bp-284Ch]@12
- int temp2; // [sp+14h] [bp-2848h]@12
- int v22; // [sp+18h] [bp-2844h]@12
- int v23; // [sp+1Ch] [bp-2840h]@12
- int v24; // [sp+20h] [bp-283Ch]@13
- int len; // [sp+24h] [bp-2838h]@13
- int outputLength; // [sp+28h] [bp-2834h]@7
- char buf; // [sp+2Ch] [bp-2830h]@9
- int v28; // [sp+30h] [bp-282Ch]@9
- char v29; // [sp+34h] [bp-2828h]@9
- char randomDataArr[88]; // [sp+38h] [bp-2824h]@9
- char key; // [sp+90h] [bp-27CCh]@1
- char outputPtr2; // [sp+ACh] [bp-27B0h]@11
- char tomcrypt_iv2; // [sp+CCh] [bp-2790h]@11
- char outputPtr; // [sp+ECh] [bp-2770h]@7
- char tomcrypt_iv1; // [sp+10Ch] [bp-2750h]@11
- char symmetricCTR1; // [sp+4ECh] [bp-2370h]@11
- char symmetricCTR2; // [sp+16A4h] [bp-11B8h]@11
- logToFile("---begin client handler---");
- if ( tomcrypt_ecc_import((int)&serverKeyPtr, 161, (int)&key) )
- {
- logToFile("Oh noes, could not read server key data...");
- result = -1;
- }
- else
- {
- logToFile("Server key data successfully initialized...");
- logToFile("allocating memory for input buffer...");
- packetDataBuffer = malloc(0x100000u);
- if ( packetDataBuffer )
- {
- memset(packetDataBuffer, 0, 0x100000u);
- logToFile("Awaiting packet from client...");
- v3 = networkSocket;
- recvWrapper(networkSocket, (char *)packetDataBuffer, 4, 0);// Read 4 Bytes (Header Length)
- logToFile("Received client packet...");
- logToFile("This must be the Hello-Packet from the client...");
- if ( strcmp((const char *)packetDataBuffer, "TS3C") )// Check if it is a Client Packet
- {
- logToFile("Not a TS3-Server-Request...");
- result = -1;
- }
- else
- { // It's a client packet.
- Sleep(0xFAu);
- packetDataLength = recvWrapper(networkSocket, (char *)packetDataBuffer, 1024, 0);// Recieve the remaining data
- logToFile("Received client packet...");
- logToFile("This must be the encrypted key from the client...");
- Sleep(0xFAu);
- outputLength = 1024;
- tomcrypt_register_hash(&hashDescriptor);
- tomcrypt_find_hash("sha512");
- decryptResult = tomcrypt_ecc_decrypt_key(
- (char *)packetDataBuffer + 7,
- packetDataLength - 7,
- &outputPtr,
- &outputLength,
- &key);
- if ( decryptResult )
- {
- sprintf(&outputPtr, "Oh noes, could not decrypt the client key, error %X...", decryptResult);
- logToFile(&outputPtr);
- result = -1;
- }
- else
- {
- logToFile("Key from client successfully decrypted...");
- tomcrypt_unregister_hash(&hashDescriptor);
- tomcrypt_register_cipher(&cipherDescriptor);
- memset(&buf, 0, 0x4Cu);
- index = 0;
- randomDataArr[64] = 0;
- buf = 73;
- v28 = dword_43BEA8;
- v29 = 4;
- do
- randomDataArr[index++] = rand();
- while ( index < 64 );
- memcpy(&outputPtr2, randomDataArr, 0x40u);
- cipherIndex1 = tomcrypt_find_cypher("rijndael");
- tomcrypt_ctr_start(cipherIndex1, (int)&tomcrypt_iv1, (int)&outputPtr, 32, 0, 0, (int)&symmetricCTR1);
- tomcrypt_ctr_encrypt(&buf, &buf, 4, &symmetricCTR1);
- tomcrypt_ctr_encrypt(&v28, &v28, 73, &symmetricCTR1);
- send(networkSocket, &buf, 77, 0);
- printf("\n");
- Sleep(0xFAu);
- logToFile("Setting up local key material...");
- tomcrypt_register_cipher(&cipherDescriptor);
- cipherIndex2 = tomcrypt_find_cypher("rijndael");
- tomcrypt_ctr_start(cipherIndex2, (int)&tomcrypt_iv2, (int)&outputPtr2, 32, 0, 0, (int)&symmetricCTR2);
- ctrLength1 = recvWrapper(networkSocket, (char *)packetDataBuffer, 4, 0);
- logToFile("Received client packet...");
- logToFile("This must be the encrypted client license data header...");
- tomcrypt_ctr_decrypt(packetDataBuffer, packetDataBuffer, ctrLength1, &symmetricCTR2);
- Sleep(0xFAu);
- ctrLength2 = recvWrapper(networkSocket, (char *)packetDataBuffer, 16777216, 0);
- logToFile("Received client packet...");
- logToFile("This must be the encrypted client license data...");
- tomcrypt_ctr_decrypt(packetDataBuffer, packetDataBuffer, ctrLength2, &symmetricCTR2);
- if ( (unsigned int)ctrLength2 > 0x19 )
- {
- logToFile("It's a vserver check!");
- v11 = (ctrLength2 - 49) / 0x1Cu + 1;
- v12 = (int)malloc((ctrLength2 - 49) / 0x1Cu + 8);
- v24 = v11 + 3;
- len = v11 + 7;
- v13 = (v11 + 7) >> 2;
- memset((void *)v12, 0, 4 * v13);
- v14 = v12 + 4 * v13;
- for ( i = ((_BYTE)v11 + 7) & 3; i; --i )
- *(_BYTE *)v14++ = 0;
- v16 = v24;
- *(_BYTE *)(v12 + 4) = 0;
- *(_DWORD *)v12 = v16;
- *(_BYTE *)(v12 + 5) = 2;
- *(_BYTE *)(v12 + 6) = 2;
- if ( v11 )
- {
- memset((void *)(v12 + 7), 0, 4 * (v11 >> 2));
- v17 = v12 + 7 + 4 * (v11 >> 2);
- for ( j = v11 & 3; j; --j )
- *(_BYTE *)v17++ = 0;
- }
- tomcrypt_ctr_encrypt(v12, v12, 4, &symmetricCTR1);
- tomcrypt_ctr_encrypt(v12 + 4, v12 + 4, v24, &symmetricCTR1);
- tomcrypt_unregister_cipher(&cipherDescriptor);
- logToFile("Sending server response to client");
- send(networkSocket, (const char *)v12, len, 0);
- CrtCheckMemoryWrapperWrapper(v12);
- v3 = networkSocket;
- }
- else
- {
- temp1 = 0;
- LOBYTE(temp2) = 1;
- BYTE3(temp2) = 1;
- v22 = 0;
- v23 = 0;
- *(_WORD *)((char *)&temp2 + 1) = 256;
- LOBYTE(temp1) = 4;
- tomcrypt_ctr_encrypt(&temp1, &temp1, 4, &symmetricCTR1);
- tomcrypt_ctr_encrypt(&temp2, &temp2, 4, &symmetricCTR1);
- tomcrypt_unregister_cipher(&cipherDescriptor);
- logToFile("Sending server response to client");
- send(networkSocket, (const char *)&temp1, 8, 0);
- }
- v19 = recvWrapper(v3, (char *)packetDataBuffer, 1024, 0);
- logToFile("Received client packet...");
- logToFile("This must be the last message the client sends to the accounting server...");
- tomcrypt_ctr_decrypt(packetDataBuffer, packetDataBuffer, v19, &symmetricCTR2);
- tomcrypt_unregister_cipher(&cipherDescriptor);
- CrtCheckMemoryWrapperWrapper((int)packetDataBuffer);
- logToFile("---end client handler---");
- result = 0;
- }
- }
- }
- else
- {
- logToFile("Memory allocation error, free some memory and try again!");
- result = -1;
- }
- }
- return result;
- }
- // 40101E: using guessed type _DWORD __cdecl logToFile(_DWORD);
- // 403C00: using guessed type _DWORD __cdecl tomcrypt_ctr_decrypt(_DWORD, _DWORD, _DWORD, _DWORD);
- // 403CB0: using guessed type _DWORD __cdecl tomcrypt_ctr_encrypt(_DWORD, _DWORD, _DWORD, _DWORD);
- // 405FA0: using guessed type _DWORD __cdecl tomcrypt_ecc_decrypt_key(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
- // 430390: using guessed type char *cipherDescriptor;
- // 434EC0: using guessed type char *hashDescriptor;
- // 43BEA8: using guessed type int dword_43BEA8;
- // 401520: using guessed type char randomDataArr[88];
- //----- (00401D20) --------------------------------------------------------
- FILE *__cdecl fopenWrapper(const char *Filename)
- {
- return fopen(Filename, "w");
- }
- //----- (00401D50) --------------------------------------------------------
- int __cdecl sub_401D50(int a1)
- {
- struct tm *v1; // eax@1
- char *v2; // eax@1
- int result; // eax@1
- const char Time[1028]; // [sp+0h] [bp-404h]@1
- time((time_t *)Time);
- v1 = localtime((const time_t *)Time);
- v2 = asctime(v1);
- sprintf((char *)&Time[4], "%s%s\n", v2, a1);
- result = (int)logFilePtr;
- if ( logFilePtr )
- {
- fputs(&Time[4], logFilePtr);
- result = fflush(logFilePtr);
- }
- return result;
- }
- //----- (00401DE0) --------------------------------------------------------
- int __cdecl tomcrypt_ecc_import(int in, int inLength, int key)
- {
- int ecc_import_ex_result; // eax@1
- char v5; // [sp+0h] [bp-4Ch]@0
- char temp; // [sp+Ch] [bp-40h]@1
- memset(&temp, -858993460, 0x40u);
- ecc_import_ex_result = tomcrypt_ecc_import_ex(in, inLength, key, 0);
- return _chkesp(1, ecc_import_ex_result, v5);
- }
- //----- (00401E20) --------------------------------------------------------
- int __cdecl tomcrypt_ecc_import_ex(int a1, int a2, int a3, int a4)
- {
- int v4; // eax@8
- int v5; // eax@23
- char v7; // [sp+0h] [bp-58h]@23
- char v8; // [sp+Ch] [bp-4Ch]@1
- int v9; // [sp+4Ch] [bp-Ch]@9
- int v10; // [sp+50h] [bp-8h]@10
- int v11; // [sp+54h] [bp-4h]@18
- int v12; // [sp+58h] [bp+0h]@23
- memset(&v8, -858993460, 0x4Cu);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ecc_import.c",
- word_43C0F8 + 5);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"key != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ecc_import.c",
- word_43C0F8 + 6);
- if ( !dword_4417E0 )
- errorFunctionMaybe(
- (int)"ltc_mp.name != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ecc_import.c",
- word_43C0F8 + 7);
- if ( !sub_408490(a3 + 12, a3 + 16) )
- {
- v9 = sub_4085E0(a1, a2, 4);
- if ( !v9 )
- {
- if ( (unsigned __int8)v10 == 1 )
- {
- *(_DWORD *)a3 = 1;
- v9 = sub_4085E0(a1, a2, 4);
- if ( v9 )
- goto LABEL_26;
- }
- else
- {
- *(_DWORD *)a3 = 0;
- v9 = sub_4085E0(a1, a2, 4);
- if ( v9 )
- goto LABEL_26;
- }
- if ( a4 )
- {
- *(_DWORD *)(a3 + 4) = -1;
- *(_DWORD *)(a3 + 8) = a4;
- }
- else
- {
- for ( *(_DWORD *)(a3 + 4) = 0;
- dword_4353F8[7 * *(_DWORD *)(a3 + 4)] && dword_4353F8[7 * *(_DWORD *)(a3 + 4)] != v11;
- ++*(_DWORD *)(a3 + 4) )
- ;
- if ( !dword_4353F8[7 * *(_DWORD *)(a3 + 4)] )
- {
- v9 = 7;
- goto LABEL_26;
- }
- *(_DWORD *)(a3 + 8) = &dword_4353F8[7 * *(_DWORD *)(a3 + 4)];
- }
- v5 = dword_4417FC(*(_DWORD *)(a3 + 20), 1);
- v9 = _chkesp(&v7 == &v7, v5, (unsigned int)&v12);
- if ( !v9 )
- {
- v9 = sub_4020D0(a3);
- if ( !v9 )
- {
- v4 = 0;
- return _chkesp(1, v4, v7);
- }
- }
- }
- LABEL_26:
- sub_408570(*(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16));
- v4 = v9;
- return _chkesp(1, v4, v7);
- }
- v4 = 13;
- return _chkesp(1, v4, v7);
- }
- // 4353F8: using guessed type int dword_4353F8[];
- // 43C0F8: using guessed type __int16 word_43C0F8;
- // 4417E0: using guessed type int dword_4417E0;
- // 4417FC: using guessed type int (__cdecl *dword_4417FC)(_DWORD, _DWORD);
- //----- (004020D0) --------------------------------------------------------
- int __cdecl sub_4020D0(int a1)
- {
- int v1; // eax@2
- int v2; // eax@3
- int v3; // eax@4
- int v4; // eax@5
- int v5; // eax@6
- int v6; // eax@7
- int v7; // eax@8
- int v8; // eax@9
- int v9; // eax@10
- int v10; // eax@11
- int v11; // eax@12
- int v12; // eax@13
- int v13; // eax@14
- int v14; // eax@15
- int v15; // eax@17
- int v16; // eax@18
- int v17; // eax@20
- char v19; // [sp+0h] [bp-60h]@3
- char v20; // [sp+Ch] [bp-54h]@1
- int v21; // [sp+4Ch] [bp-14h]@1
- int v22; // [sp+50h] [bp-10h]@6
- int v23; // [sp+54h] [bp-Ch]@5
- int v24; // [sp+58h] [bp-8h]@1
- int v25; // [sp+5Ch] [bp-4h]@1
- int v26; // [sp+60h] [bp+0h]@3
- memset(&v20, -858993460, 0x54u);
- v21 = sub_408490((int)&v25, (unsigned int)&v24);
- if ( v21 )
- {
- v1 = v21;
- }
- else
- {
- v2 = dword_441820(v25, *(_DWORD *)(*(_DWORD *)(a1 + 8) + 8), 16);
- v21 = _chkesp(&v19 == &v19, v2, (unsigned int)&v26);
- if ( !v21 )
- {
- v3 = dword_441820(v24, *(_DWORD *)(*(_DWORD *)(a1 + 8) + 12), 16);
- v21 = _chkesp(&v19 == &v19, v3, (unsigned int)&v26);
- if ( !v21 )
- {
- v4 = dword_44184C(*(_DWORD *)(a1 + 16), v23);
- v21 = _chkesp(&v19 == &v19, v4, (unsigned int)&v26);
- if ( !v21 )
- {
- v5 = dword_44184C(*(_DWORD *)(a1 + 12), v22);
- v21 = _chkesp(&v19 == &v19, v5, (unsigned int)&v26);
- if ( !v21 )
- {
- v6 = dword_441850(v22, v25, 0, v22);
- v21 = _chkesp(&v19 == &v19, v6, (unsigned int)&v26);
- if ( !v21 )
- {
- v7 = dword_441844(*(_DWORD *)(a1 + 12), v22, v22);
- v21 = _chkesp(&v19 == &v19, v7, (unsigned int)&v26);
- if ( !v21 )
- {
- v8 = dword_44183C(v23, v22, v23);
- v21 = _chkesp(&v19 == &v19, v8, (unsigned int)&v26);
- if ( !v21 )
- {
- v9 = dword_441834(v23, *(_DWORD *)(a1 + 12), v23);
- v21 = _chkesp(&v19 == &v19, v9, (unsigned int)&v26);
- if ( !v21 )
- {
- v10 = dword_441834(v23, *(_DWORD *)(a1 + 12), v23);
- v21 = _chkesp(&v19 == &v19, v10, (unsigned int)&v26);
- if ( !v21 )
- {
- v11 = dword_441834(v23, *(_DWORD *)(a1 + 12), v23);
- v21 = _chkesp(&v19 == &v19, v11, (unsigned int)&v26);
- if ( !v21 )
- {
- v12 = dword_441850(v23, v25, 0, v23);
- v21 = _chkesp(&v19 == &v19, v12, (unsigned int)&v26);
- if ( !v21 )
- {
- while ( 1 )
- {
- v13 = dword_441810(v23, 0);
- if ( _chkesp(&v19 == &v19, v13, (unsigned int)&v26) != -1 )
- break;
- v14 = dword_441834(v23, v25, v23);
- v21 = _chkesp(&v19 == &v19, v14, (unsigned int)&v26);
- if ( v21 )
- goto LABEL_23;
- }
- while ( 1 )
- {
- v15 = dword_44180C(v23, v25);
- if ( _chkesp(&v19 == &v19, v15, (unsigned int)&v26) == -1 )
- break;
- v16 = dword_44183C(v23, v25, v23);
- v21 = _chkesp(&v19 == &v19, v16, (unsigned int)&v26);
- if ( v21 )
- goto LABEL_23;
- }
- v17 = dword_44180C(v23, v24);
- if ( _chkesp(&v19 == &v19, v17, (unsigned int)&v26) )
- v21 = 7;
- else
- v21 = 0;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- LABEL_23:
- sub_408570(v25, v24);
- v1 = v21;
- }
- return _chkesp(1, v1, v19);
- }
- // 44180C: using guessed type int (__cdecl *dword_44180C)(_DWORD, _DWORD);
- // 441810: using guessed type int (__cdecl *dword_441810)(_DWORD, _DWORD);
- // 441820: using guessed type int (__cdecl *dword_441820)(_DWORD, _DWORD, _DWORD);
- // 441834: using guessed type int (__cdecl *dword_441834)(_DWORD, _DWORD, _DWORD);
- // 44183C: using guessed type int (__cdecl *dword_44183C)(_DWORD, _DWORD, _DWORD);
- // 441844: using guessed type int (__cdecl *dword_441844)(_DWORD, _DWORD, _DWORD);
- // 44184C: using guessed type int (__cdecl *dword_44184C)(_DWORD, _DWORD);
- // 441850: using guessed type int (__cdecl *dword_441850)(_DWORD, _DWORD, _DWORD, _DWORD);
- //----- (00402400) --------------------------------------------------------
- int __cdecl sub_402400(int *a1)
- {
- int v1; // eax@4
- int v2; // eax@5
- char v4; // [sp+0h] [bp-50h]@0
- char v5; // [sp+Ch] [bp-44h]@1
- int v6; // [sp+4Ch] [bp-4h]@5
- memset(&v5, -858993460, 0x44u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C0FC + 3);
- *a1 = (int)calloc(1u, 0x10u);
- if ( *a1 )
- {
- v2 = sub_41F810(*a1);
- v6 = sub_4024A0(v2);
- if ( v6 )
- CrtCheckMemoryWrapperWrapper(*a1);
- v1 = v6;
- }
- else
- {
- v1 = 13;
- }
- return _chkesp(1, v1, v4);
- }
- // 43C0FC: using guessed type __int16 word_43C0FC;
- //----- (004024A0) --------------------------------------------------------
- int __cdecl sub_4024A0(int a1)
- {
- char v2; // [sp+Ch] [bp-44h]@1
- int i; // [sp+4Ch] [bp-4h]@1
- memset(&v2, -858993460, 0x44u);
- for ( i = 0; i < 3; ++i )
- {
- if ( a1 == dword_430060[2 * i] )
- return dword_430064[2 * i];
- }
- return 1;
- }
- // 430060: using guessed type int dword_430060[];
- // 430064: using guessed type int dword_430064[];
- //----- (00402500) --------------------------------------------------------
- int __cdecl sub_402500(int a1)
- {
- int v1; // eax@3
- char v3; // [sp+0h] [bp-4Ch]@0
- char v4; // [sp+Ch] [bp-40h]@1
- memset(&v4, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != ((void *)0)",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C100 + 1);
- sub_41F860(a1);
- CrtCheckMemoryWrapperWrapper(a1);
- return _chkesp(1, v1, v3);
- }
- // 43C100: using guessed type __int16 word_43C100;
- //----- (00402570) --------------------------------------------------------
- int __cdecl sub_402570(int a1, int a2)
- {
- int v2; // eax@5
- int v3; // eax@5
- char v5; // [sp+0h] [bp-4Ch]@0
- char v6; // [sp+Ch] [bp-40h]@1
- memset(&v6, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C104 + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C104 + 2);
- v2 = sub_41F8B0(a1, a2);
- v3 = sub_4024A0(v2);
- return _chkesp(1, v3, v5);
- }
- // 43C104: using guessed type __int16 word_43C104;
- //----- (00402600) --------------------------------------------------------
- int __cdecl sub_402600(int a1, int a2)
- {
- int v2; // eax@5
- int v3; // eax@5
- char v5; // [sp+0h] [bp-4Ch]@0
- char v6; // [sp+Ch] [bp-40h]@1
- memset(&v6, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C108 + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C108 + 2);
- v2 = sub_41F8F0(a1, a2);
- v3 = sub_4024A0(v2);
- return _chkesp(1, v3, v5);
- }
- // 43C108: using guessed type __int16 word_43C108;
- //----- (00402690) --------------------------------------------------------
- int __cdecl sub_402690(int *a1, int a2)
- {
- signed int v2; // eax@2
- char v4; // [sp+0h] [bp-4Ch]@0
- char v5; // [sp+Ch] [bp-40h]@1
- memset(&v5, -858993460, 0x40u);
- if ( sub_402400(a1) )
- v2 = 13;
- else
- v2 = sub_402600(a2, *a1);
- return _chkesp(1, v2, v4);
- }
- //----- (004026F0) --------------------------------------------------------
- int __cdecl sub_4026F0(unsigned int a1, unsigned int a2)
- {
- int v2; // eax@3
- int v3; // eax@3
- char v5; // [sp+0h] [bp-4Ch]@0
- char v6; // [sp+Ch] [bp-40h]@1
- memset(&v6, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C10C + 1);
- v2 = sub_41F960(a1, a2);
- v3 = sub_4024A0(v2);
- return _chkesp(1, v3, v5);
- }
- // 43C10C: using guessed type __int16 word_43C10C;
- //----- (00402760) --------------------------------------------------------
- int __cdecl sub_402760(int a1)
- {
- int v1; // eax@3
- char v3; // [sp+0h] [bp-4Ch]@0
- char v4; // [sp+Ch] [bp-40h]@1
- memset(&v4, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C110 + 1);
- v1 = sub_41F9C0(a1);
- return _chkesp(1, v1, v3);
- }
- // 43C110: using guessed type __int16 word_43C110;
- //----- (004027C0) --------------------------------------------------------
- int __cdecl sub_4027C0(int a1, int a2)
- {
- char v3; // [sp+0h] [bp-54h]@0
- char v4; // [sp+Ch] [bp-48h]@1
- int v5; // [sp+4Ch] [bp-8h]@5
- int v6; // [sp+50h] [bp-4h]@3
- memset(&v4, -858993460, 0x48u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C114 + 2);
- v6 = a1;
- if ( a2 >= *(_DWORD *)a1 || a2 < 0 )
- v5 = 0;
- else
- v5 = *(_DWORD *)(*(_DWORD *)(v6 + 12) + 4 * a2);
- return _chkesp(1, v5, v3);
- }
- // 43C114: using guessed type __int16 word_43C114;
- //----- (00402840) --------------------------------------------------------
- int __cdecl sub_402840(int a1)
- {
- char v2; // [sp+0h] [bp-50h]@0
- char v3; // [sp+Ch] [bp-44h]@1
- int v4; // [sp+4Ch] [bp-4h]@3
- memset(&v3, -858993460, 0x44u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C118 + 2);
- v4 = a1;
- return _chkesp(1, *(_DWORD *)a1, v2);
- }
- // 43C118: using guessed type __int16 word_43C118;
- //----- (004028A0) --------------------------------------------------------
- int __cdecl sub_4028A0(int a1, int a2)
- {
- int v2; // eax@8
- char v4; // [sp+0h] [bp-54h]@0
- char v5; // [sp+Ch] [bp-48h]@1
- int v6; // [sp+4Ch] [bp-8h]@5
- int v7; // [sp+50h] [bp-4h]@5
- memset(&v5, -858993460, 0x48u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C11C + 2);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C11C + 3);
- v7 = sub_41FA00(a1, a2);
- v6 = v7;
- if ( v7 == -1 )
- {
- v2 = -1;
- }
- else
- {
- if ( v6 )
- v2 = v6 == 1;
- else
- v2 = 0;
- }
- return _chkesp(1, v2, v4);
- }
- // 43C11C: using guessed type __int16 word_43C11C;
- //----- (00402950) --------------------------------------------------------
- int __cdecl sub_402950(int a1, unsigned int a2)
- {
- int v2; // eax@6
- char v4; // [sp+0h] [bp-54h]@0
- char v5; // [sp+Ch] [bp-48h]@1
- int v6; // [sp+4Ch] [bp-8h]@3
- int v7; // [sp+50h] [bp-4h]@3
- memset(&v5, -858993460, 0x48u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C120 + 2);
- v7 = sub_41FA40(a1, a2);
- v6 = v7;
- if ( v7 == -1 )
- {
- v2 = -1;
- }
- else
- {
- if ( v6 )
- v2 = v6 == 1;
- else
- v2 = 0;
- }
- return _chkesp(1, v2, v4);
- }
- // 43C120: using guessed type __int16 word_43C120;
- //----- (004029E0) --------------------------------------------------------
- int __cdecl sub_4029E0(int a1)
- {
- int v1; // eax@3
- char v3; // [sp+0h] [bp-4Ch]@0
- char v4; // [sp+Ch] [bp-40h]@1
- memset(&v4, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C124 + 1);
- v1 = sub_41FA70(a1);
- return _chkesp(1, v1, v3);
- }
- // 43C124: using guessed type __int16 word_43C124;
- //----- (00402A40) --------------------------------------------------------
- int __cdecl sub_402A40(int a1)
- {
- int v1; // eax@3
- char v3; // [sp+0h] [bp-4Ch]@0
- char v4; // [sp+Ch] [bp-40h]@1
- memset(&v4, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C128 + 1);
- v1 = sub_41FAA0(a1);
- return _chkesp(1, v1, v3);
- }
- // 43C128: using guessed type __int16 word_43C128;
- //----- (00402AA0) --------------------------------------------------------
- int __cdecl sub_402AA0(unsigned int a1, signed int a2)
- {
- int v2; // eax@3
- int v3; // eax@3
- char v5; // [sp+0h] [bp-4Ch]@0
- char v6; // [sp+Ch] [bp-40h]@1
- memset(&v6, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C12C + 1);
- v2 = sub_41FB00(a1, a2);
- v3 = sub_4024A0(v2);
- return _chkesp(1, v3, v5);
- }
- // 43C12C: using guessed type __int16 word_43C12C;
- //----- (00402B10) --------------------------------------------------------
- int __cdecl sub_402B10(unsigned int a1, int a2, int a3)
- {
- int v3; // eax@5
- int v4; // eax@5
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C130 + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C130 + 2);
- v3 = sub_41FB60(a1, a2, a3);
- v4 = sub_4024A0(v3);
- return _chkesp(1, v4, v6);
- }
- // 43C130: using guessed type __int16 word_43C130;
- //----- (00402BA0) --------------------------------------------------------
- int __cdecl sub_402BA0(int a1, int a2, signed int a3)
- {
- int v3; // eax@5
- int v4; // eax@5
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C134 + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C134 + 2);
- v3 = sub_41FC20(a1, a2, a3);
- v4 = sub_4024A0(v3);
- return _chkesp(1, v4, v6);
- }
- // 43C134: using guessed type __int16 word_43C134;
- //----- (00402C30) --------------------------------------------------------
- int __cdecl sub_402C30(int a1)
- {
- int v1; // eax@3
- char v3; // [sp+0h] [bp-4Ch]@0
- char v4; // [sp+Ch] [bp-40h]@1
- memset(&v4, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C138 + 1);
- v1 = sub_41FD10(a1);
- return _chkesp(1, v1, v3);
- }
- // 43C138: using guessed type __int16 word_43C138;
- //----- (00402C90) --------------------------------------------------------
- int __cdecl sub_402C90(int a1, int a2)
- {
- int v2; // eax@5
- int v3; // eax@5
- char v5; // [sp+0h] [bp-4Ch]@0
- char v6; // [sp+Ch] [bp-40h]@1
- memset(&v6, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C13C + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C13C + 2);
- v2 = sub_41FD40(a1, a2);
- v3 = sub_4024A0(v2);
- return _chkesp(1, v3, v5);
- }
- // 43C13C: using guessed type __int16 word_43C13C;
- //----- (00402D20) --------------------------------------------------------
- int __cdecl sub_402D20(unsigned int a1, int a2, int a3)
- {
- int v3; // eax@5
- int v4; // eax@5
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C140 + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C140 + 2);
- v3 = sub_41FDD0(a1, a2, a3);
- v4 = sub_4024A0(v3);
- return _chkesp(1, v4, v6);
- }
- // 43C140: using guessed type __int16 word_43C140;
- //----- (00402DB0) --------------------------------------------------------
- int __cdecl sub_402DB0(int a1, int a2, int a3)
- {
- int v3; // eax@7
- int v4; // eax@7
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C144 + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C144 + 2);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"c != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C144 + 3);
- v3 = sub_41FE40(a1, a2, a3);
- v4 = sub_4024A0(v3);
- return _chkesp(1, v4, v6);
- }
- // 43C144: using guessed type __int16 word_43C144;
- //----- (00402E60) --------------------------------------------------------
- int __cdecl sub_402E60(int a1, int a2, int a3)
- {
- int v3; // eax@5
- int v4; // eax@5
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C148 + 1);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"c != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C148 + 2);
- v3 = sub_41FEB0(a1, a2, a3);
- v4 = sub_4024A0(v3);
- return _chkesp(1, v4, v6);
- }
- // 41FEB0: using guessed type _DWORD __cdecl sub_41FEB0(_DWORD, _DWORD, _DWORD);
- // 43C148: using guessed type __int16 word_43C148;
- //----- (00402EF0) --------------------------------------------------------
- int __cdecl sub_402EF0(int a1, int a2, int a3)
- {
- int v3; // eax@7
- int v4; // eax@7
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C14C + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C14C + 2);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"c != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C14C + 3);
- v3 = sub_41FFD0(a1, a2, a3);
- v4 = sub_4024A0(v3);
- return _chkesp(1, v4, v6);
- }
- // 43C14C: using guessed type __int16 word_43C14C;
- //----- (00402FA0) --------------------------------------------------------
- int __cdecl sub_402FA0(int a1, int a2, int a3)
- {
- int v3; // eax@5
- int v4; // eax@5
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C150 + 1);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"c != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C150 + 2);
- v3 = sub_420040(a1, a2, a3);
- v4 = sub_4024A0(v3);
- return _chkesp(1, v4, v6);
- }
- // 43C150: using guessed type __int16 word_43C150;
- //----- (00403030) --------------------------------------------------------
- int __cdecl sub_403030(int a1, int a2, int a3)
- {
- int v3; // eax@7
- int v4; // eax@7
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C154 + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C154 + 2);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"c != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C154 + 3);
- v3 = sub_420150(a1, a2, a3);
- v4 = sub_4024A0(v3);
- return _chkesp(1, v4, v6);
- }
- // 420150: using guessed type _DWORD __cdecl sub_420150(_DWORD, _DWORD, _DWORD);
- // 43C154: using guessed type __int16 word_43C154;
- //----- (004030E0) --------------------------------------------------------
- int __cdecl sub_4030E0(int a1, int a2, int a3)
- {
- int v3; // eax@5
- int v4; // eax@5
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C158 + 1);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"c != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C158 + 2);
- v3 = sub_420220(a1, a2, a3);
- v4 = sub_4024A0(v3);
- return _chkesp(1, v4, v6);
- }
- // 43C158: using guessed type __int16 word_43C158;
- //----- (00403170) --------------------------------------------------------
- int __cdecl sub_403170(int a1, int a2)
- {
- int v2; // eax@5
- int v3; // eax@5
- char v5; // [sp+0h] [bp-4Ch]@0
- char v6; // [sp+Ch] [bp-40h]@1
- memset(&v6, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C15C + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C15C + 2);
- v2 = sub_4202E0(a1, a2);
- v3 = sub_4024A0(v2);
- return _chkesp(1, v3, v5);
- }
- // 4202E0: using guessed type _DWORD __cdecl sub_4202E0(_DWORD, _DWORD);
- // 43C15C: using guessed type __int16 word_43C15C;
- //----- (00403200) --------------------------------------------------------
- int __cdecl sub_403200(int a1, int a2, unsigned int a3, int a4)
- {
- int v4; // eax@5
- int v5; // eax@5
- char v7; // [sp+0h] [bp-4Ch]@0
- char v8; // [sp+Ch] [bp-40h]@1
- memset(&v8, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C160 + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C160 + 2);
- v4 = sub_420370(a1, a2, a3, a4);
- v5 = sub_4024A0(v4);
- return _chkesp(1, v5, v7);
- }
- // 43C160: using guessed type __int16 word_43C160;
- //----- (00403290) --------------------------------------------------------
- int __cdecl sub_403290(int a1, int a2)
- {
- int v2; // eax@5
- int v3; // eax@5
- char v5; // [sp+0h] [bp-4Ch]@0
- char v6; // [sp+Ch] [bp-40h]@1
- memset(&v6, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C164 + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C164 + 2);
- v2 = sub_420890(a1, a2);
- v3 = sub_4024A0(v2);
- return _chkesp(1, v3, v5);
- }
- // 43C164: using guessed type __int16 word_43C164;
- //----- (00403320) --------------------------------------------------------
- int __cdecl sub_403320(int a1, int a2, int a3)
- {
- int v3; // eax@5
- int v4; // eax@6
- char v6; // [sp+0h] [bp-54h]@0
- char v7; // [sp+Ch] [bp-48h]@1
- int v8; // [sp+4Ch] [bp-8h]@5
- int v9; // [sp+50h] [bp-4h]@5
- memset(&v7, -858993460, 0x48u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C168 + 4);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"c != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C168 + 5);
- v3 = sub_420930(a1, a2, (int)&v9);
- v8 = sub_4024A0(v3);
- if ( v8 )
- {
- v4 = v8;
- }
- else
- {
- *(_DWORD *)a3 = v9;
- v4 = 0;
- }
- return _chkesp(1, v4, v6);
- }
- // 43C168: using guessed type __int16 word_43C168;
- //----- (004033D0) --------------------------------------------------------
- int __cdecl sub_4033D0(int a1, int a2, int a3)
- {
- int v3; // eax@7
- int v4; // eax@7
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C16C + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C16C + 2);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"c != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C16C + 3);
- v3 = sub_420950(a1, a2, a3);
- v4 = sub_4024A0(v3);
- return _chkesp(1, v4, v6);
- }
- // 43C16C: using guessed type __int16 word_43C16C;
- //----- (00403480) --------------------------------------------------------
- int __cdecl sub_403480(int a1, int a2, int a3)
- {
- int v3; // eax@7
- int v4; // eax@7
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C170 + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C170 + 2);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"c != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C170 + 3);
- v3 = sub_420B40(a1, a2, a3);
- v4 = sub_4024A0(v3);
- return _chkesp(1, v4, v6);
- }
- // 43C170: using guessed type __int16 word_43C170;
- //----- (00403530) --------------------------------------------------------
- int __cdecl sub_403530(int a1, int a2, int a3, int a4)
- {
- int v4; // eax@9
- int v5; // eax@9
- char v7; // [sp+0h] [bp-4Ch]@0
- char v8; // [sp+Ch] [bp-40h]@1
- memset(&v8, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C174 + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C174 + 2);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"c != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C174 + 3);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"d != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C174 + 4);
- v4 = sub_420C00(a1, a2, a3, a4);
- v5 = sub_4024A0(v4);
- return _chkesp(1, v5, v7);
- }
- // 43C174: using guessed type __int16 word_43C174;
- //----- (00403610) --------------------------------------------------------
- int __cdecl sub_403610(int a1, int a2, int a3)
- {
- int v3; // eax@7
- int v4; // eax@7
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C178 + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C178 + 2);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"c != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C178 + 3);
- v3 = sub_420C70(a1, a2, a3);
- v4 = sub_4024A0(v3);
- return _chkesp(1, v4, v6);
- }
- // 43C178: using guessed type __int16 word_43C178;
- //----- (004036C0) --------------------------------------------------------
- int __cdecl sub_4036C0(int a1, int a2, int a3)
- {
- int v3; // eax@7
- int v4; // eax@7
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C17C + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C17C + 2);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"c != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C17C + 3);
- v3 = sub_420CE0(a1, a2, a3);
- v4 = sub_4024A0(v3);
- return _chkesp(1, v4, v6);
- }
- // 43C17C: using guessed type __int16 word_43C17C;
- //----- (00403770) --------------------------------------------------------
- int __cdecl sub_403770(int a1, int *a2)
- {
- int v2; // eax@6
- int v3; // eax@7
- char v5; // [sp+0h] [bp-50h]@0
- char v6; // [sp+Ch] [bp-44h]@1
- int v7; // [sp+4Ch] [bp-4h]@7
- memset(&v6, -858993460, 0x44u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C180 + 2);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C180 + 3);
- *a2 = (int)calloc(1u, 4u);
- if ( *a2 )
- {
- v3 = sub_420D30(a1, *a2);
- v7 = sub_4024A0(v3);
- if ( v7 )
- CrtCheckMemoryWrapperWrapper(*a2);
- v2 = v7;
- }
- else
- {
- v2 = 13;
- }
- return _chkesp(1, v2, v5);
- }
- // 43C180: using guessed type __int16 word_43C180;
- //----- (00403840) --------------------------------------------------------
- int __cdecl sub_403840(unsigned int a1, signed int *a2)
- {
- int v2; // eax@5
- int v3; // eax@5
- char v5; // [sp+0h] [bp-4Ch]@0
- char v6; // [sp+Ch] [bp-40h]@1
- memset(&v6, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C184 + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C184 + 2);
- v2 = sub_420D90(a1, a2);
- v3 = sub_4024A0(v2);
- return _chkesp(1, v3, v5);
- }
- // 43C184: using guessed type __int16 word_43C184;
- //----- (004038D0) --------------------------------------------------------
- int __cdecl sub_4038D0(int a1, int a2, int *a3)
- {
- int v3; // eax@7
- int v4; // eax@7
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C188 + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C188 + 2);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"c != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C188 + 3);
- v3 = sub_420E30(a1, a2, *a3);
- v4 = sub_4024A0(v3);
- return _chkesp(1, v4, v6);
- }
- // 43C188: using guessed type __int16 word_43C188;
- //----- (00403990) --------------------------------------------------------
- int __cdecl sub_403990(int a1)
- {
- int v1; // eax@1
- char v3; // [sp+0h] [bp-4Ch]@0
- char v4; // [sp+Ch] [bp-40h]@1
- memset(&v4, -858993460, 0x40u);
- CrtCheckMemoryWrapperWrapper(a1);
- return _chkesp(1, v1, v3);
- }
- //----- (004039D0) --------------------------------------------------------
- int __cdecl sub_4039D0(int a1, int a2, int a3, int a4)
- {
- int v4; // eax@9
- int v5; // eax@9
- char v7; // [sp+0h] [bp-4Ch]@0
- char v8; // [sp+Ch] [bp-40h]@1
- memset(&v8, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C18C + 1);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C18C + 2);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"c != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C18C + 3);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"d != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C18C + 4);
- v4 = sub_420FA0(a1, a2, a3, a4);
- v5 = sub_4024A0(v4);
- return _chkesp(1, v5, v7);
- }
- // 420FA0: using guessed type _DWORD __cdecl sub_420FA0(_DWORD, _DWORD, _DWORD, _DWORD);
- // 43C18C: using guessed type __int16 word_43C18C;
- //----- (00403AB0) --------------------------------------------------------
- int __cdecl sub_403AB0(int a1, int a2)
- {
- int v2; // eax@5
- char v4; // [sp+0h] [bp-50h]@0
- char v5; // [sp+Ch] [bp-44h]@1
- int v6; // [sp+4Ch] [bp-4h]@5
- memset(&v5, -858993460, 0x44u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"a != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C190 + 2);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"b != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\libtomcrypt-1.17\\src\\math\\ltm_desc.c",
- word_43C190 + 3);
- v2 = sub_421130(a1, 8, a2);
- v6 = sub_4024A0(v2);
- *(_DWORD *)a2 = *(_DWORD *)a2 == 1;
- return _chkesp(1, v6, v4);
- }
- // 43C190: using guessed type __int16 word_43C190;
- //----- (00403B50) --------------------------------------------------------
- int __cdecl tomcrypt_unregister_cipher(const void *Buf2)
- {
- int v1; // eax@6
- char v3; // [sp+0h] [bp-50h]@0
- char v4; // [sp+Ch] [bp-44h]@1
- int i; // [sp+4Ch] [bp-4h]@3
- memset(&v4, -858993460, 0x44u);
- if ( !Buf2 )
- errorFunctionMaybe(
- (int)"cipher != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\misc\\crypt\\crypt_unregister_cipher.c",
- word_43C194 + 3);
- for ( i = 0; i < 32; ++i )
- {
- if ( !memcmp(&dword_43F6C8[24 * i], Buf2, 0x60u) )
- {
- dword_43F6C8[24 * i] = 0;
- byte_43F6CC[96 * i] = -1;
- v1 = 0;
- return _chkesp(1, v1, v3);
- }
- }
- v1 = 1;
- return _chkesp(1, v1, v3);
- }
- // 43C194: using guessed type __int16 word_43C194;
- // 43F6C8: using guessed type int dword_43F6C8[];
- //----- (00403C00) --------------------------------------------------------
- int __cdecl tomcrypt_ctr_decrypt(int a1, int a2, int a3, int a4)
- {
- int v4; // eax@7
- char v6; // [sp+0h] [bp-4Ch]@0
- char v7; // [sp+Ch] [bp-40h]@1
- memset(&v7, -858993460, 0x40u);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"pt != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\modes\\ctr\\ctr_decrypt.c",
- word_43C198 + 1);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"ct != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\modes\\ctr\\ctr_decrypt.c",
- word_43C198 + 2);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"ctr != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\modes\\ctr\\ctr_decrypt.c",
- word_43C198 + 3);
- v4 = tomcrypt_ctr_encrypt(a1, a2, a3, a4);
- return _chkesp(1, v4, v6);
- }
- // 403C00: using guessed type _DWORD __cdecl tomcrypt_ctr_decrypt(_DWORD, _DWORD, _DWORD, _DWORD);
- // 403CB0: using guessed type _DWORD __cdecl tomcrypt_ctr_encrypt(_DWORD, _DWORD, _DWORD, _DWORD);
- // 43C198: using guessed type __int16 word_43C198;
- //----- (00403CB0) --------------------------------------------------------
- int __cdecl tomcrypt_ctr_encrypt(int a1, int a2, unsigned int a3, int a4)
- {
- int v4; // eax@8
- int v5; // eax@19
- int v6; // eax@34
- char v8; // [sp+0h] [bp-54h]@19
- char v9; // [sp+Ch] [bp-48h]@1
- int v10; // [sp+4Ch] [bp-8h]@7
- int i; // [sp+50h] [bp-4h]@25
- int v12; // [sp+54h] [bp+0h]@19
- memset(&v9, -858993460, 0x48u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"pt != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\modes\\ctr\\ctr_encrypt.c",
- word_43C19C + 3);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"ct != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\modes\\ctr\\ctr_encrypt.c",
- word_43C19C + 4);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"ctr != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\modes\\ctr\\ctr_encrypt.c",
- word_43C19C + 5);
- v10 = sub_40BD00(*(_DWORD *)a4);
- if ( v10 )
- {
- v4 = v10;
- }
- else
- {
- if ( *(_DWORD *)(a4 + 4) >= 1
- && *(_DWORD *)(a4 + 4) <= 128
- && *(_DWORD *)(a4 + 8) >= 0
- && *(_DWORD *)(a4 + 8) <= 128 )
- {
- if ( *(_DWORD *)(a4 + 4) % 4u )
- {
- v4 = 16;
- }
- else
- {
- if ( *(_DWORD *)(a4 + 8) == *(_DWORD *)(a4 + 4) && dword_43F708[24 * *(_DWORD *)a4] && a3 >= *(_DWORD *)(a4 + 4) )
- {
- v5 = ((int (__cdecl *)(int, int, unsigned int, int, _DWORD, int))dword_43F708[24 * *(_DWORD *)a4])(
- a1,
- a2,
- a3 / *(_DWORD *)(a4 + 4),
- a4 + 20,
- *(_DWORD *)(a4 + 12),
- a4 + 280);
- v10 = _chkesp(&v8 == &v8, v5, (unsigned int)&v12);
- if ( !v10 )
- {
- a3 %= *(_DWORD *)(a4 + 4);
- goto LABEL_22;
- }
- v4 = v10;
- }
- else
- {
- LABEL_22:
- while ( a3 )
- {
- if ( *(_DWORD *)(a4 + 8) == *(_DWORD *)(a4 + 4) )
- {
- if ( *(_DWORD *)(a4 + 12) )
- {
- for ( i = *(_DWORD *)(a4 + 4) - 1; ; --i )
- {
- if ( i >= *(_DWORD *)(a4 + 16) )
- {
- ++*(_BYTE *)(i + a4 + 20);
- if ( !*(_BYTE *)(i + a4 + 20) )
- continue;
- }
- break;
- }
- }
- else
- {
- for ( i = 0; ; ++i )
- {
- if ( i < *(_DWORD *)(a4 + 16) )
- {
- ++*(_BYTE *)(i + a4 + 20);
- if ( !*(_BYTE *)(i + a4 + 20) )
- continue;
- }
- break;
- }
- }
- v6 = ((int (__cdecl *)(int, int, int))dword_43F6E4[24 * *(_DWORD *)a4])(a4 + 20, a4 + 148, a4 + 280);
- v10 = _chkesp(&v8 == &v8, v6, (unsigned int)&v12);
- if ( v10 )
- {
- v4 = v10;
- return _chkesp(1, v4, v8);
- }
- *(_DWORD *)(a4 + 8) = 0;
- }
- if ( (unsigned __int64)a3 < *(_QWORD *)(a4 + 4) )
- {
- *(_BYTE *)a2++ = *(_BYTE *)(a4 + (*(_DWORD *)(a4 + 8))++ + 148) ^ *(_BYTE *)a1++;
- --a3;
- }
- else
- {
- for ( i = 0; i < *(_DWORD *)(a4 + 4); i += 4 )
- *(_DWORD *)(i + a2) = *(_DWORD *)(i + a4 + 148) ^ *(_DWORD *)(i + a1);
- a1 += *(_DWORD *)(a4 + 4);
- a2 += *(_DWORD *)(a4 + 4);
- a3 -= *(_DWORD *)(a4 + 4);
- *(_DWORD *)(a4 + 8) = *(_DWORD *)(a4 + 4);
- }
- }
- v4 = 0;
- }
- }
- }
- else
- {
- v4 = 16;
- }
- }
- return _chkesp(1, v4, v8);
- }
- // 403CB0: using guessed type _DWORD __cdecl tomcrypt_ctr_encrypt(_DWORD, _DWORD, _DWORD, _DWORD);
- // 43C19C: using guessed type __int16 word_43C19C;
- // 43F6E4: using guessed type int dword_43F6E4[];
- // 43F708: using guessed type int dword_43F708[];
- //----- (00404030) --------------------------------------------------------
- int __cdecl tomcrypt_ctr_start(signed int a1, int a2, int a3, int a4, int a5, __int16 a6, int a7)
- {
- signed int v7; // eax@8
- int v8; // eax@16
- int v9; // eax@32
- char v11; // [sp+0h] [bp-58h]@16
- char v12; // [sp+Ch] [bp-4Ch]@1
- int v13; // [sp+4Ch] [bp-Ch]@10
- int v14; // [sp+50h] [bp-8h]@7
- int i; // [sp+54h] [bp-4h]@18
- int v16; // [sp+58h] [bp+0h]@16
- memset(&v12, -858993460, 0x4Cu);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"IV != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\modes\\ctr\\ctr_start.c",
- word_43C1A0 + 3);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"key != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\modes\\ctr\\ctr_start.c",
- word_43C1A0 + 4);
- if ( !a7 )
- errorFunctionMaybe(
- (int)"ctr != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\modes\\ctr\\ctr_start.c",
- word_43C1A0 + 5);
- v14 = sub_40BD00(a1);
- if ( v14 )
- {
- v7 = v14;
- }
- else
- {
- if ( (_BYTE)a6 )
- v13 = (unsigned __int8)a6;
- else
- v13 = dword_43F6D8[24 * a1];
- *(_DWORD *)(a7 + 16) = v13;
- if ( *(_DWORD *)(a7 + 16) <= dword_43F6D8[24 * a1] )
- {
- if ( (a6 & 0x1000) == 4096 )
- *(_DWORD *)(a7 + 16) = dword_43F6D8[24 * a1] - *(_DWORD *)(a7 + 16);
- v8 = ((int (__cdecl *)(int, int, int, int))dword_43F6E0[24 * a1])(a3, a4, a5, a7 + 280);
- v14 = _chkesp(&v11 == &v11, v8, (unsigned int)&v16);
- if ( v14 )
- {
- v7 = v14;
- }
- else
- {
- *(_DWORD *)(a7 + 4) = dword_43F6D8[24 * a1];
- *(_DWORD *)a7 = a1;
- *(_DWORD *)(a7 + 8) = 0;
- *(_DWORD *)(a7 + 12) = a6 & 0x1000;
- for ( i = 0; i < *(_DWORD *)(a7 + 4); ++i )
- *(_BYTE *)(i + a7 + 20) = *(_BYTE *)(i + a2);
- if ( a6 & 0x2000 )
- {
- if ( *(_DWORD *)(a7 + 12) )
- {
- for ( i = *(_DWORD *)(a7 + 4) - 1; ; --i )
- {
- if ( i >= *(_DWORD *)(a7 + 16) )
- {
- ++*(_BYTE *)(i + a7 + 20);
- if ( !*(_BYTE *)(i + a7 + 20) )
- continue;
- }
- break;
- }
- }
- else
- {
- for ( i = 0; ; ++i )
- {
- if ( i < *(_DWORD *)(a7 + 16) )
- {
- ++*(_BYTE *)(i + a7 + 20);
- if ( !*(_BYTE *)(i + a7 + 20) )
- continue;
- }
- break;
- }
- }
- }
- v9 = ((int (__cdecl *)(int, int, int))dword_43F6E4[24 * *(_DWORD *)a7])(a7 + 20, a7 + 148, a7 + 280);
- v7 = _chkesp(&v11 == &v11, v9, (unsigned int)&v16);
- }
- }
- else
- {
- v7 = 16;
- }
- }
- return _chkesp(1, v7, v11);
- }
- // 43C1A0: using guessed type __int16 word_43C1A0;
- // 43F6D8: using guessed type int dword_43F6D8[];
- // 43F6E0: using guessed type int dword_43F6E0[];
- // 43F6E4: using guessed type int dword_43F6E4[];
- //----- (004042F0) --------------------------------------------------------
- int __cdecl tomcrypt_find_cypher(const char *Str2)
- {
- int v1; // eax@7
- char v3; // [sp+0h] [bp-50h]@0
- char v4; // [sp+Ch] [bp-44h]@1
- int i; // [sp+4Ch] [bp-4h]@3
- memset(&v4, -858993460, 0x44u);
- if ( !Str2 )
- errorFunctionMaybe(
- (int)"name != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\misc\\crypt\\crypt_find_cipher.c",
- word_43C1A4 + 2);
- for ( i = 0; i < 32; ++i )
- {
- if ( dword_43F6C8[24 * i] && !strcmp((const char *)dword_43F6C8[24 * i], Str2) )
- {
- v1 = i;
- return _chkesp(1, v1, v3);
- }
- }
- v1 = -1;
- return _chkesp(1, v1, v3);
- }
- // 43C1A4: using guessed type __int16 word_43C1A4;
- // 43F6C8: using guessed type int dword_43F6C8[];
- //----- (00404390) --------------------------------------------------------
- int __cdecl tomcrypt_register_cipher(void *Src)
- {
- int v1; // eax@7
- char v3; // [sp+0h] [bp-50h]@0
- char v4; // [sp+Ch] [bp-44h]@1
- int i; // [sp+4Ch] [bp-4h]@3
- memset(&v4, -858993460, 0x44u);
- if ( !Src )
- errorFunctionMaybe(
- (int)"cipher != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\misc\\crypt\\crypt_register_cipher.c",
- word_43C1A8 + 3);
- for ( i = 0; i < 32; ++i )
- {
- if ( dword_43F6C8[24 * i] && byte_43F6CC[96 * i] == *((_BYTE *)Src + 4) )
- {
- v1 = i;
- return _chkesp(1, v1, v3);
- }
- }
- for ( i = 0; i < 32; ++i )
- {
- if ( !dword_43F6C8[24 * i] )
- {
- memcpy(&dword_43F6C8[24 * i], Src, 0x60u);
- v1 = i;
- return _chkesp(1, v1, v3);
- }
- }
- v1 = -1;
- return _chkesp(1, v1, v3);
- }
- // 43C1A8: using guessed type __int16 word_43C1A8;
- // 43F6C8: using guessed type int dword_43F6C8[];
- //----- (00404470) --------------------------------------------------------
- int __cdecl sub_404470(int a1, signed int a2, int a3, int a4)
- {
- int v4; // eax@8
- int v5; // eax@14
- int v6; // eax@19
- int v7; // eax@24
- unsigned int v8; // edx@25
- int v9; // eax@25
- char v11; // [sp+0h] [bp-60h]@0
- char v12; // [sp+Ch] [bp-54h]@1
- int v13; // [sp+4Ch] [bp-14h]@28
- int v14; // [sp+50h] [bp-10h]@12
- unsigned int v15; // [sp+54h] [bp-Ch]@14
- int v16; // [sp+58h] [bp-8h]@13
- int i; // [sp+5Ch] [bp-4h]@12
- memset(&v12, -858993460, 0x54u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"key != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\src\\ciphers\\aes\\aes.c",
- word_43C1AC + 6);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"skey != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\src\\ciphers\\aes\\aes.c",
- word_43C1AC + 7);
- if ( a2 == 16 || a2 == 24 || a2 == 32 )
- {
- if ( a3 && a3 != 2 * a2 / 8 + 6 )
- {
- v4 = 4;
- }
- else
- {
- *(_DWORD *)(a4 + 480) = 2 * a2 / 8 + 6;
- i = 0;
- v14 = a4;
- *(_DWORD *)a4 = *(_BYTE *)(a1 + 3) | (*(_BYTE *)(a1 + 2) << 8) | (*(_BYTE *)(a1 + 1) << 16) | (*(_BYTE *)a1 << 24);
- *(_DWORD *)(v14 + 4) = *(_BYTE *)(a1 + 7) | (*(_BYTE *)(a1 + 6) << 8) | (*(_BYTE *)(a1 + 5) << 16) | (*(_BYTE *)(a1 + 4) << 24);
- *(_DWORD *)(v14 + 8) = *(_BYTE *)(a1 + 11) | (*(_BYTE *)(a1 + 10) << 8) | (*(_BYTE *)(a1 + 9) << 16) | (*(_BYTE *)(a1 + 8) << 24);
- *(_DWORD *)(v14 + 12) = *(_BYTE *)(a1 + 15) | (*(_BYTE *)(a1 + 14) << 8) | (*(_BYTE *)(a1 + 13) << 16) | (*(_BYTE *)(a1 + 12) << 24);
- if ( a2 == 16 )
- {
- v16 = 44;
- while ( 1 )
- {
- v15 = *(_DWORD *)(v14 + 12);
- v5 = sub_404D20(v15);
- *(_DWORD *)(v14 + 16) = dword_434C50[i] ^ v5 ^ *(_DWORD *)v14;
- *(_DWORD *)(v14 + 20) = *(_DWORD *)(v14 + 16) ^ *(_DWORD *)(v14 + 4);
- *(_DWORD *)(v14 + 24) = *(_DWORD *)(v14 + 20) ^ *(_DWORD *)(v14 + 8);
- *(_DWORD *)(v14 + 28) = *(_DWORD *)(v14 + 24) ^ *(_DWORD *)(v14 + 12);
- ++i;
- if ( i == 10 )
- break;
- v14 += 16;
- }
- }
- else
- {
- if ( a2 == 24 )
- {
- v16 = 52;
- *(_DWORD *)(v14 + 16) = *(_BYTE *)(a1 + 19) | (*(_BYTE *)(a1 + 18) << 8) | (*(_BYTE *)(a1 + 17) << 16) | (*(_BYTE *)(a1 + 16) << 24);
- *(_DWORD *)(v14 + 20) = *(_BYTE *)(a1 + 23) | (*(_BYTE *)(a1 + 22) << 8) | (*(_BYTE *)(a1 + 21) << 16) | (*(_BYTE *)(a1 + 20) << 24);
- while ( 1 )
- {
- v15 = *(_DWORD *)(a4 + 4 * ((v14 - a4) >> 2) + 20);
- v6 = sub_404D20(v15);
- *(_DWORD *)(v14 + 24) = dword_434C50[i] ^ v6 ^ *(_DWORD *)v14;
- *(_DWORD *)(v14 + 28) = *(_DWORD *)(v14 + 24) ^ *(_DWORD *)(v14 + 4);
- *(_DWORD *)(v14 + 32) = *(_DWORD *)(v14 + 28) ^ *(_DWORD *)(v14 + 8);
- *(_DWORD *)(v14 + 36) = *(_DWORD *)(v14 + 32) ^ *(_DWORD *)(v14 + 12);
- ++i;
- if ( i == 8 )
- break;
- *(_DWORD *)(v14 + 40) = *(_DWORD *)(v14 + 36) ^ *(_DWORD *)(v14 + 16);
- *(_DWORD *)(v14 + 44) = *(_DWORD *)(v14 + 40) ^ *(_DWORD *)(v14 + 20);
- v14 += 24;
- }
- }
- else
- {
- if ( a2 != 32 )
- {
- v4 = 1;
- return _chkesp(1, v4, v11);
- }
- v16 = 60;
- *(_DWORD *)(v14 + 16) = *(_BYTE *)(a1 + 19) | (*(_BYTE *)(a1 + 18) << 8) | (*(_BYTE *)(a1 + 17) << 16) | (*(_BYTE *)(a1 + 16) << 24);
- *(_DWORD *)(v14 + 20) = *(_BYTE *)(a1 + 23) | (*(_BYTE *)(a1 + 22) << 8) | (*(_BYTE *)(a1 + 21) << 16) | (*(_BYTE *)(a1 + 20) << 24);
- *(_DWORD *)(v14 + 24) = *(_BYTE *)(a1 + 27) | (*(_BYTE *)(a1 + 26) << 8) | (*(_BYTE *)(a1 + 25) << 16) | (*(_BYTE *)(a1 + 24) << 24);
- *(_DWORD *)(v14 + 28) = *(_BYTE *)(a1 + 31) | (*(_BYTE *)(a1 + 30) << 8) | (*(_BYTE *)(a1 + 29) << 16) | (*(_BYTE *)(a1 + 28) << 24);
- while ( 1 )
- {
- v15 = *(_DWORD *)(a4 + 4 * ((v14 - a4) >> 2) + 28);
- v7 = sub_404D20(v15);
- *(_DWORD *)(v14 + 32) = dword_434C50[i] ^ v7 ^ *(_DWORD *)v14;
- *(_DWORD *)(v14 + 36) = *(_DWORD *)(v14 + 32) ^ *(_DWORD *)(v14 + 4);
- *(_DWORD *)(v14 + 40) = *(_DWORD *)(v14 + 36) ^ *(_DWORD *)(v14 + 8);
- *(_DWORD *)(v14 + 44) = *(_DWORD *)(v14 + 40) ^ *(_DWORD *)(v14 + 12);
- ++i;
- if ( i == 7 )
- break;
- v15 = *(_DWORD *)(v14 + 44);
- v8 = __ROR__(v15, 8);
- v9 = sub_404D20(v8);
- *(_DWORD *)(v14 + 48) = v9 ^ *(_DWORD *)(v14 + 16);
- *(_DWORD *)(v14 + 52) = *(_DWORD *)(v14 + 48) ^ *(_DWORD *)(v14 + 20);
- *(_DWORD *)(v14 + 56) = *(_DWORD *)(v14 + 52) ^ *(_DWORD *)(v14 + 24);
- *(_DWORD *)(v14 + 60) = *(_DWORD *)(v14 + 56) ^ *(_DWORD *)(v14 + 28);
- v14 += 32;
- }
- }
- }
- v14 = a4 + 240;
- v13 = a4 + 4 * v16 - 16;
- *(_DWORD *)(a4 + 240) = *(_DWORD *)(a4 + 4 * v16 - 16);
- v14 += 4;
- v13 += 4;
- *(_DWORD *)v14 = *(_DWORD *)v13;
- v14 += 4;
- v13 += 4;
- *(_DWORD *)v14 = *(_DWORD *)v13;
- v14 += 4;
- v13 += 4;
- *(_DWORD *)v14 = *(_DWORD *)v13;
- v14 -= 12;
- v13 -= 12;
- for ( i = 1; i < *(_DWORD *)(a4 + 480); ++i )
- {
- v13 -= 16;
- v14 += 16;
- v15 = *(_DWORD *)v13;
- *(_DWORD *)v14 = dword_434850[(unsigned __int8)v15] ^ dword_434450[(unsigned __int16)v15 >> 8] ^ dword_434050[(v15 >> 16) & 0xFF] ^ dword_433C50[v15 >> 24];
- v15 = *(_DWORD *)(v13 + 4);
- *(_DWORD *)(v14 + 4) = dword_434850[(unsigned __int8)v15] ^ dword_434450[(unsigned __int16)v15 >> 8] ^ dword_434050[(v15 >> 16) & 0xFF] ^ dword_433C50[v15 >> 24];
- v15 = *(_DWORD *)(v13 + 8);
- *(_DWORD *)(v14 + 8) = dword_434850[(unsigned __int8)v15] ^ dword_434450[(unsigned __int16)v15 >> 8] ^ dword_434050[(v15 >> 16) & 0xFF] ^ dword_433C50[v15 >> 24];
- v15 = *(_DWORD *)(v13 + 12);
- *(_DWORD *)(v14 + 12) = dword_434850[(unsigned __int8)v15] ^ dword_434450[(unsigned __int16)v15 >> 8] ^ dword_434050[(v15 >> 16) & 0xFF] ^ dword_433C50[v15 >> 24];
- }
- v13 -= 16;
- v14 += 16;
- *(_DWORD *)v14 = *(_DWORD *)v13;
- v14 += 4;
- v13 += 4;
- *(_DWORD *)v14 = *(_DWORD *)v13;
- v14 += 4;
- v13 += 4;
- *(_DWORD *)v14 = *(_DWORD *)v13;
- v14 += 4;
- v13 += 4;
- *(_DWORD *)v14 = *(_DWORD *)v13;
- v4 = 0;
- }
- }
- else
- {
- v4 = 3;
- }
- return _chkesp(1, v4, v11);
- }
- // 433C50: using guessed type int dword_433C50[];
- // 434050: using guessed type int dword_434050[];
- // 434450: using guessed type int dword_434450[];
- // 434850: using guessed type int dword_434850[];
- // 434C50: using guessed type int dword_434C50[];
- // 43C1AC: using guessed type __int16 word_43C1AC;
- //----- (00404D20) --------------------------------------------------------
- int __cdecl sub_404D20(unsigned int a1)
- {
- char v2; // [sp+Ch] [bp-40h]@1
- memset(&v2, -858993460, 0x40u);
- return dword_432050[a1 >> 24] ^ dword_432450[(unsigned __int8)a1] ^ dword_432850[(unsigned __int16)a1 >> 8] ^ dword_432C50[(a1 >> 16) & 0xFF];
- }
- // 432050: using guessed type int dword_432050[];
- // 432450: using guessed type int dword_432450[];
- // 432850: using guessed type int dword_432850[];
- // 432C50: using guessed type int dword_432C50[];
- //----- (00404D90) --------------------------------------------------------
- int __cdecl sub_404D90(int a1, int a2, int a3)
- {
- char v4; // [sp+0h] [bp-78h]@0
- char v5; // [sp+Ch] [bp-6Ch]@1
- int v6; // [sp+4Ch] [bp-2Ch]@7
- int v7; // [sp+50h] [bp-28h]@7
- int v8; // [sp+54h] [bp-24h]@7
- int v9; // [sp+58h] [bp-20h]@8
- int v10; // [sp+5Ch] [bp-1Ch]@8
- int v11; // [sp+60h] [bp-18h]@8
- int v12; // [sp+64h] [bp-14h]@8
- int v13; // [sp+68h] [bp-10h]@7
- int v14; // [sp+6Ch] [bp-Ch]@7
- int v15; // [sp+70h] [bp-8h]@7
- int v16; // [sp+74h] [bp-4h]@7
- memset(&v5, -858993460, 0x6Cu);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"pt != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\src\\ciphers\\aes\\aes.c",
- word_43C1B0 + 4);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"ct != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\src\\ciphers\\aes\\aes.c",
- word_43C1B0 + 5);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"skey != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\src\\ciphers\\aes\\aes.c",
- word_43C1B0 + 6);
- v7 = *(_DWORD *)(a3 + 480);
- v8 = a3;
- v16 = *(_BYTE *)(a1 + 3) | (*(_BYTE *)(a1 + 2) << 8) | (*(_BYTE *)(a1 + 1) << 16) | (*(_BYTE *)a1 << 24);
- v16 ^= *(_DWORD *)a3;
- v15 = *(_BYTE *)(a1 + 7) | (*(_BYTE *)(a1 + 6) << 8) | (*(_BYTE *)(a1 + 5) << 16) | (*(_BYTE *)(a1 + 4) << 24);
- v15 ^= *(_DWORD *)(a3 + 4);
- v14 = *(_BYTE *)(a1 + 11) | (*(_BYTE *)(a1 + 10) << 8) | (*(_BYTE *)(a1 + 9) << 16) | (*(_BYTE *)(a1 + 8) << 24);
- v14 ^= *(_DWORD *)(a3 + 8);
- v13 = *(_BYTE *)(a1 + 15) | (*(_BYTE *)(a1 + 14) << 8) | (*(_BYTE *)(a1 + 13) << 16) | (*(_BYTE *)(a1 + 12) << 24);
- v13 ^= *(_DWORD *)(a3 + 12);
- v6 = v7 >> 1;
- while ( 1 )
- {
- v12 = *(_DWORD *)(v8 + 16) ^ dword_431C50[(unsigned __int8)v13] ^ dword_431850[(unsigned __int16)v14 >> 8] ^ dword_431450[((unsigned int)v15 >> 16) & 0xFF] ^ dword_430450[(unsigned int)v16 >> 24];
- v11 = *(_DWORD *)(v8 + 20) ^ dword_431C50[(unsigned __int8)v16] ^ dword_431850[(unsigned __int16)v13 >> 8] ^ dword_431450[((unsigned int)v14 >> 16) & 0xFF] ^ dword_430450[(unsigned int)v15 >> 24];
- v10 = *(_DWORD *)(v8 + 24) ^ dword_431C50[(unsigned __int8)v15] ^ dword_431850[(unsigned __int16)v16 >> 8] ^ dword_431450[((unsigned int)v13 >> 16) & 0xFF] ^ dword_430450[(unsigned int)v14 >> 24];
- v9 = *(_DWORD *)(v8 + 28) ^ dword_431C50[(unsigned __int8)v14] ^ dword_431850[(unsigned __int16)v15 >> 8] ^ dword_431450[((unsigned int)v16 >> 16) & 0xFF] ^ dword_430450[(unsigned int)v13 >> 24];
- v8 += 32;
- --v6;
- if ( !v6 )
- break;
- v16 = *(_DWORD *)v8 ^ dword_431C50[(unsigned __int8)v9] ^ dword_431850[(unsigned __int16)v10 >> 8] ^ dword_431450[((unsigned int)v11 >> 16) & 0xFF] ^ dword_430450[(unsigned int)v12 >> 24];
- v15 = *(_DWORD *)(v8 + 4) ^ dword_431C50[(unsigned __int8)v12] ^ dword_431850[(unsigned __int16)v9 >> 8] ^ dword_431450[((unsigned int)v10 >> 16) & 0xFF] ^ dword_430450[(unsigned int)v11 >> 24];
- v14 = *(_DWORD *)(v8 + 8) ^ dword_431C50[(unsigned __int8)v11] ^ dword_431850[(unsigned __int16)v12 >> 8] ^ dword_431450[((unsigned int)v9 >> 16) & 0xFF] ^ dword_430450[(unsigned int)v10 >> 24];
- v13 = *(_DWORD *)(v8 + 12) ^ dword_431C50[(unsigned __int8)v10] ^ dword_431850[(unsigned __int16)v11 >> 8] ^ dword_431450[((unsigned int)v12 >> 16) & 0xFF] ^ dword_430450[(unsigned int)v9 >> 24];
- }
- v16 = *(_DWORD *)v8 ^ dword_432050[(unsigned __int8)v9] ^ dword_432450[(unsigned __int16)v10 >> 8] ^ dword_432850[((unsigned int)v11 >> 16) & 0xFF] ^ dword_432C50[(unsigned int)v12 >> 24];
- *(_BYTE *)a2 = BYTE3(v16);
- *(_BYTE *)(a2 + 1) = (unsigned int)v16 >> 16;
- *(_BYTE *)(a2 + 2) = BYTE1(v16);
- *(_BYTE *)(a2 + 3) = v16;
- v15 = *(_DWORD *)(v8 + 4) ^ dword_432050[(unsigned __int8)v12] ^ dword_432450[(unsigned __int16)v9 >> 8] ^ dword_432850[((unsigned int)v10 >> 16) & 0xFF] ^ dword_432C50[(unsigned int)v11 >> 24];
- *(_BYTE *)(a2 + 4) = BYTE3(v15);
- *(_BYTE *)(a2 + 5) = (unsigned int)v15 >> 16;
- *(_BYTE *)(a2 + 6) = BYTE1(v15);
- *(_BYTE *)(a2 + 7) = v15;
- v14 = *(_DWORD *)(v8 + 8) ^ dword_432050[(unsigned __int8)v11] ^ dword_432450[(unsigned __int16)v12 >> 8] ^ dword_432850[((unsigned int)v9 >> 16) & 0xFF] ^ dword_432C50[(unsigned int)v10 >> 24];
- *(_BYTE *)(a2 + 8) = BYTE3(v14);
- *(_BYTE *)(a2 + 9) = (unsigned int)v14 >> 16;
- *(_BYTE *)(a2 + 10) = BYTE1(v14);
- *(_BYTE *)(a2 + 11) = v14;
- v13 = *(_DWORD *)(v8 + 12) ^ dword_432050[(unsigned __int8)v10] ^ dword_432450[(unsigned __int16)v11 >> 8] ^ dword_432850[((unsigned int)v12 >> 16) & 0xFF] ^ dword_432C50[(unsigned int)v9 >> 24];
- *(_BYTE *)(a2 + 12) = BYTE3(v13);
- *(_BYTE *)(a2 + 13) = (unsigned int)v13 >> 16;
- *(_BYTE *)(a2 + 14) = BYTE1(v13);
- *(_BYTE *)(a2 + 15) = v13;
- return _chkesp(1, 0, v4);
- }
- // 430450: using guessed type int dword_430450[];
- // 431450: using guessed type int dword_431450[];
- // 431850: using guessed type int dword_431850[];
- // 431C50: using guessed type int dword_431C50[];
- // 432050: using guessed type int dword_432050[];
- // 432450: using guessed type int dword_432450[];
- // 432850: using guessed type int dword_432850[];
- // 432C50: using guessed type int dword_432C50[];
- // 43C1B0: using guessed type __int16 word_43C1B0;
- //----- (00405480) --------------------------------------------------------
- int __cdecl sub_405480(int a1, int a2, int a3)
- {
- int v3; // edx@10
- int v4; // ecx@10
- int v5; // eax@10
- int v6; // edx@10
- char v8; // [sp+0h] [bp-78h]@0
- char v9; // [sp+Ch] [bp-6Ch]@1
- int v10; // [sp+4Ch] [bp-2Ch]@7
- int v11; // [sp+50h] [bp-28h]@7
- int v12; // [sp+54h] [bp-24h]@7
- int v13; // [sp+58h] [bp-20h]@8
- int v14; // [sp+5Ch] [bp-1Ch]@8
- int v15; // [sp+60h] [bp-18h]@8
- int v16; // [sp+64h] [bp-14h]@8
- int v17; // [sp+68h] [bp-10h]@7
- int v18; // [sp+6Ch] [bp-Ch]@7
- int v19; // [sp+70h] [bp-8h]@7
- int v20; // [sp+74h] [bp-4h]@7
- memset(&v9, -858993460, 0x6Cu);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"pt != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\src\\ciphers\\aes\\aes.c",
- word_43C1B4 + 4);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"ct != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\src\\ciphers\\aes\\aes.c",
- word_43C1B4 + 5);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"skey != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\src\\ciphers\\aes\\aes.c",
- word_43C1B4 + 6);
- v11 = *(_DWORD *)(a3 + 480);
- v12 = a3 + 240;
- v20 = *(_BYTE *)(a1 + 3) | (*(_BYTE *)(a1 + 2) << 8) | (*(_BYTE *)(a1 + 1) << 16) | (*(_BYTE *)a1 << 24);
- v20 ^= *(_DWORD *)(a3 + 240);
- v19 = *(_BYTE *)(a1 + 7) | (*(_BYTE *)(a1 + 6) << 8) | (*(_BYTE *)(a1 + 5) << 16) | (*(_BYTE *)(a1 + 4) << 24);
- v19 ^= *(_DWORD *)(a3 + 244);
- v18 = *(_BYTE *)(a1 + 11) | (*(_BYTE *)(a1 + 10) << 8) | (*(_BYTE *)(a1 + 9) << 16) | (*(_BYTE *)(a1 + 8) << 24);
- v18 ^= *(_DWORD *)(a3 + 248);
- v17 = *(_BYTE *)(a1 + 15) | (*(_BYTE *)(a1 + 14) << 8) | (*(_BYTE *)(a1 + 13) << 16) | (*(_BYTE *)(a1 + 12) << 24);
- v17 ^= *(_DWORD *)(a3 + 252);
- v10 = v11 >> 1;
- while ( 1 )
- {
- v16 = *(_DWORD *)(v12 + 16) ^ dword_433850[(unsigned __int8)v19] ^ dword_433450[(unsigned __int16)v18 >> 8] ^ dword_433050[((unsigned int)v17 >> 16) & 0xFF] ^ dword_430C50[(unsigned int)v20 >> 24];
- v15 = *(_DWORD *)(v12 + 20) ^ dword_433850[(unsigned __int8)v18] ^ dword_433450[(unsigned __int16)v17 >> 8] ^ dword_433050[((unsigned int)v20 >> 16) & 0xFF] ^ dword_430C50[(unsigned int)v19 >> 24];
- v14 = *(_DWORD *)(v12 + 24) ^ dword_433850[(unsigned __int8)v17] ^ dword_433450[(unsigned __int16)v20 >> 8] ^ dword_433050[((unsigned int)v19 >> 16) & 0xFF] ^ dword_430C50[(unsigned int)v18 >> 24];
- v13 = *(_DWORD *)(v12 + 28) ^ dword_433850[(unsigned __int8)v20] ^ dword_433450[(unsigned __int16)v19 >> 8] ^ dword_433050[((unsigned int)v18 >> 16) & 0xFF] ^ dword_430C50[(unsigned int)v17 >> 24];
- v12 += 32;
- --v10;
- if ( !v10 )
- break;
- v20 = *(_DWORD *)v12 ^ dword_433850[(unsigned __int8)v15] ^ dword_433450[(unsigned __int16)v14 >> 8] ^ dword_433050[((unsigned int)v13 >> 16) & 0xFF] ^ dword_430C50[(unsigned int)v16 >> 24];
- v19 = *(_DWORD *)(v12 + 4) ^ dword_433850[(unsigned __int8)v14] ^ dword_433450[(unsigned __int16)v13 >> 8] ^ dword_433050[((unsigned int)v16 >> 16) & 0xFF] ^ dword_430C50[(unsigned int)v15 >> 24];
- v18 = *(_DWORD *)(v12 + 8) ^ dword_433850[(unsigned __int8)v13] ^ dword_433450[(unsigned __int16)v16 >> 8] ^ dword_433050[((unsigned int)v15 >> 16) & 0xFF] ^ dword_430C50[(unsigned int)v14 >> 24];
- v17 = *(_DWORD *)(v12 + 12) ^ dword_433850[(unsigned __int8)v16] ^ dword_433450[(unsigned __int16)v15 >> 8] ^ dword_433050[((unsigned int)v14 >> 16) & 0xFF] ^ dword_430C50[(unsigned int)v13 >> 24];
- }
- v3 = dword_431050[((unsigned int)v13 >> 16) & 0xFF];
- v20 = *(_DWORD *)v12 ^ dword_431050[(unsigned __int8)v15] & 0xFF ^ dword_431050[(unsigned __int16)v14 >> 8] & 0xFF00 ^ v3 & 0xFF0000 ^ dword_431050[(unsigned int)v16 >> 24] & 0xFF000000;
- *(_BYTE *)a2 = BYTE3(v20);
- *(_BYTE *)(a2 + 1) = (unsigned int)v20 >> 16;
- *(_BYTE *)(a2 + 2) = BYTE1(v20);
- *(_BYTE *)(a2 + 3) = v20;
- v4 = dword_431050[((unsigned int)v16 >> 16) & 0xFF];
- v19 = *(_DWORD *)(v12 + 4) ^ dword_431050[(unsigned __int8)v14] & 0xFF ^ dword_431050[(unsigned __int16)v13 >> 8] & 0xFF00 ^ v4 & 0xFF0000 ^ dword_431050[(unsigned int)v15 >> 24] & 0xFF000000;
- *(_BYTE *)(a2 + 4) = BYTE3(v19);
- *(_BYTE *)(a2 + 5) = (unsigned int)v19 >> 16;
- *(_BYTE *)(a2 + 6) = BYTE1(v19);
- *(_BYTE *)(a2 + 7) = v19;
- v5 = dword_431050[((unsigned int)v15 >> 16) & 0xFF];
- v18 = *(_DWORD *)(v12 + 8) ^ dword_431050[(unsigned __int8)v13] & 0xFF ^ dword_431050[(unsigned __int16)v16 >> 8] & 0xFF00 ^ v5 & 0xFF0000 ^ dword_431050[(unsigned int)v14 >> 24] & 0xFF000000;
- *(_BYTE *)(a2 + 8) = BYTE3(v18);
- *(_BYTE *)(a2 + 9) = (unsigned int)v18 >> 16;
- *(_BYTE *)(a2 + 10) = BYTE1(v18);
- *(_BYTE *)(a2 + 11) = v18;
- v6 = dword_431050[((unsigned int)v14 >> 16) & 0xFF];
- v17 = *(_DWORD *)(v12 + 12) ^ dword_431050[(unsigned __int8)v16] & 0xFF ^ dword_431050[(unsigned __int16)v15 >> 8] & 0xFF00 ^ v6 & 0xFF0000 ^ dword_431050[(unsigned int)v13 >> 24] & 0xFF000000;
- *(_BYTE *)(a2 + 12) = BYTE3(v17);
- *(_BYTE *)(a2 + 13) = (unsigned int)v17 >> 16;
- *(_BYTE *)(a2 + 14) = BYTE1(v17);
- *(_BYTE *)(a2 + 15) = v17;
- return _chkesp(1, 0, v8);
- }
- // 430C50: using guessed type int dword_430C50[];
- // 431050: using guessed type int dword_431050[];
- // 433050: using guessed type int dword_433050[];
- // 433450: using guessed type int dword_433450[];
- // 433850: using guessed type int dword_433850[];
- // 43C1B4: using guessed type __int16 word_43C1B4;
- //----- (00405BF0) --------------------------------------------------------
- int __cdecl sub_405BF0()
- {
- int v0; // eax@4
- char v2; // [sp+0h] [bp-1118h]@0
- char v3; // [sp+Ch] [bp-110Ch]@1
- int j; // [sp+4Ch] [bp-10CCh]@8
- int i; // [sp+50h] [bp-10C8h]@1
- char Buf1[16]; // [sp+54h] [bp-10C4h]@5
- char v7; // [sp+64h] [bp-10B4h]@5
- char v8; // [sp+74h] [bp-10A4h]@3
- int v9; // [sp+1114h] [bp-4h]@3
- memset(&v3, -858993460, 0x110Cu);
- for ( i = 0; i < 3; ++i )
- {
- sub_40BD50((int)&v8, 4256);
- v9 = sub_404470((int)((char *)&unk_434C7C + 68 * i), dword_434C78[17 * i], 0, (int)&v8);
- if ( v9 )
- {
- v0 = v9;
- return _chkesp(1, v0, v2);
- }
- sub_404D90((int)((char *)&unk_434C9C + 68 * i), (int)Buf1, (int)&v8);
- sub_405480((int)Buf1, (int)&v7, (int)&v8);
- if ( memcmp(Buf1, (char *)&unk_434CAC + 68 * i, 0x10u) || memcmp(&v7, (char *)&unk_434C9C + 68 * i, 0x10u) )
- {
- v0 = 5;
- return _chkesp(1, v0, v2);
- }
- for ( j = 0; j < 16; ++j )
- Buf1[j] = 0;
- for ( j = 0; j < 1000; ++j )
- sub_404D90((int)Buf1, (int)Buf1, (int)&v8);
- for ( j = 0; j < 1000; ++j )
- sub_405480((int)Buf1, (int)Buf1, (int)&v8);
- for ( j = 0; j < 16; ++j )
- {
- if ( Buf1[j] )
- {
- v0 = 5;
- return _chkesp(1, v0, v2);
- }
- }
- }
- v0 = 0;
- return _chkesp(1, v0, v2);
- }
- // 434C78: using guessed type int dword_434C78[];
- // 405BF0: using guessed type char Buf1[16];
- //----- (00405E50) --------------------------------------------------------
- signed int __cdecl sub_405E50()
- {
- return -858993460;
- }
- //----- (00405E70) --------------------------------------------------------
- int __cdecl sub_405E70(int a1)
- {
- int v1; // eax@4
- char v3; // [sp+0h] [bp-4Ch]@0
- char v4; // [sp+Ch] [bp-40h]@1
- memset(&v4, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"keysize != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\src\\ciphers\\aes\\aes.c",
- word_43C1B8 + 1);
- if ( *(_DWORD *)a1 >= 16 )
- {
- if ( *(_DWORD *)a1 >= 24 )
- {
- if ( *(_DWORD *)a1 >= 32 )
- {
- *(_DWORD *)a1 = 32;
- v1 = 0;
- }
- else
- {
- *(_DWORD *)a1 = 24;
- v1 = 0;
- }
- }
- else
- {
- *(_DWORD *)a1 = 16;
- v1 = 0;
- }
- }
- else
- {
- v1 = 3;
- }
- return _chkesp(1, v1, v3);
- }
- // 43C1B8: using guessed type __int16 word_43C1B8;
- //----- (00405F00) --------------------------------------------------------
- int __cdecl tomcrypt_unregister_hash(const void *Buf2)
- {
- int v1; // eax@6
- char v3; // [sp+0h] [bp-50h]@0
- char v4; // [sp+Ch] [bp-44h]@1
- int i; // [sp+4Ch] [bp-4h]@3
- memset(&v4, -858993460, 0x44u);
- if ( !Buf2 )
- errorFunctionMaybe(
- (int)"hash != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\misc\\crypt\\crypt_unregister_hash.c",
- word_43C1BC + 3);
- for ( i = 0; i < 32; ++i )
- {
- if ( !memcmp(&dword_4402C8[26 * i], Buf2, 0x68u) )
- {
- dword_4402C8[26 * i] = 0;
- v1 = 0;
- return _chkesp(1, v1, v3);
- }
- }
- v1 = 1;
- return _chkesp(1, v1, v3);
- }
- // 43C1BC: using guessed type __int16 word_43C1BC;
- // 4402C8: using guessed type int dword_4402C8[];
- //----- (00405FA0) --------------------------------------------------------
- int __cdecl tomcrypt_ecc_decrypt_key(int a1, int a2, int a3, int a4, int a5)
- {
- int v5; // eax@10
- char v7; // [sp+0h] [bp-17Ch]@0
- char v8; // [sp+Ch] [bp-170h]@1
- char *v9; // [sp+4Ch] [bp-130h]@25
- int v10; // [sp+50h] [bp-12Ch]@25
- char *v11; // [sp+54h] [bp-128h]@25
- int v12; // [sp+58h] [bp-124h]@25
- char *v13; // [sp+5Ch] [bp-120h]@11
- int v14; // [sp+60h] [bp-11Ch]@11
- char v15; // [sp+64h] [bp-118h]@11
- char *v16; // [sp+68h] [bp-114h]@11
- int v17; // [sp+6Ch] [bp-110h]@11
- int v18; // [sp+70h] [bp-10Ch]@11
- signed int v19; // [sp+84h] [bp-F8h]@25
- int v20; // [sp+88h] [bp-F4h]@25
- int v21; // [sp+8Ch] [bp-F0h]@25
- int v22; // [sp+90h] [bp-ECh]@25
- signed int v23; // [sp+A4h] [bp-D8h]@25
- int v24; // [sp+A8h] [bp-D4h]@25
- unsigned int v25; // [sp+ACh] [bp-D0h]@25
- int v26; // [sp+B0h] [bp-CCh]@25
- char pubkey; // [sp+C4h] [bp-B8h]@26
- int err; // [sp+E0h] [bp-9Ch]@11
- int hash; // [sp+E4h] [bp-98h]@13
- char Buf2; // [sp+E8h] [bp-94h]@11
- unsigned int y; // [sp+168h] [bp-14h]@29
- int i; // [sp+16Ch] [bp-10h]@27
- int pub_expt; // [sp+170h] [bp-Ch]@15
- int skey; // [sp+174h] [bp-8h]@15
- int ecc_shared; // [sp+178h] [bp-4h]@15
- memset(&v8, -858993460, 0x170u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ecc_decrypt_key.c",
- word_43C1C0 + 7);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"out != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ecc_decrypt_key.c",
- word_43C1C0 + 8);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ecc_decrypt_key.c",
- word_43C1C0 + 9);
- if ( !a5 )
- errorFunctionMaybe(
- (int)"key != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ecc_decrypt_key.c",
- word_43C1C0 + 10);
- if ( *(_DWORD *)a5 == 1 )
- {
- v14 = 0;
- v13 = &v15;
- *(_DWORD *)&v15 = 7;
- v16 = &Buf2;
- v17 = 32;
- v18 = 0;
- err = tomcrypt_der_decode_sequence(a1, a2, &v15, 1, 1);
- if ( err )
- {
- v5 = err;
- }
- else
- {
- hash = tomcrypt_find_hash_oid(&Buf2, v17);
- if ( tomcrypt_hash_is_valid(hash) )
- {
- v5 = 7;
- }
- else
- {
- pub_expt = (int)malloc(0x100u);
- ecc_shared = (int)malloc(0x100u);
- skey = (int)malloc(0x80u);
- if ( pub_expt && ecc_shared && skey )
- {
- v12 = 1;
- v11 = &v15;
- v19 = 5;
- v20 = pub_expt;
- v21 = 256;
- v22 = 0;
- v10 = 2;
- v9 = &v15;
- v23 = 5;
- v24 = skey;
- v25 = 128;
- v26 = 0;
- err = tomcrypt_der_decode_sequence(a1, a2, &v15, 3, 1);
- if ( !err )
- {
- err = tomcrypt_ecc_import(v20, v21, (int)&pubkey);
- if ( !err )
- {
- i = 256;
- err = tomcrypt_ecc_shared_secret(a5, (int)&pubkey, ecc_shared, (int)&i);
- if ( err )
- {
- tomcrypt_ecc_free((int)&pubkey);
- }
- else
- {
- tomcrypt_ecc_free((int)&pubkey);
- y = 128;
- err = tomcrypt_hash_memory(hash, ecc_shared, i, ecc_shared, (int)&y);
- if ( !err )
- {
- if ( v25 <= y )
- {
- if ( *(_DWORD *)a4 >= v25 )
- {
- for ( i = 0; i < v25; ++i )
- *(_BYTE *)(i + a3) = *(_BYTE *)(i + ecc_shared) ^ *(_BYTE *)(i + skey);
- *(_DWORD *)a4 = i;
- err = 0;
- }
- else
- {
- *(_DWORD *)a4 = v25;
- err = 6;
- }
- }
- else
- {
- err = 7;
- }
- }
- }
- }
- }
- CrtCheckMemoryWrapperWrapper(pub_expt);
- CrtCheckMemoryWrapperWrapper(ecc_shared);
- CrtCheckMemoryWrapperWrapper(skey);
- v5 = err;
- }
- else
- {
- if ( pub_expt )
- CrtCheckMemoryWrapperWrapper(pub_expt);
- if ( ecc_shared )
- CrtCheckMemoryWrapperWrapper(ecc_shared);
- if ( skey )
- CrtCheckMemoryWrapperWrapper(skey);
- v5 = 13;
- }
- }
- }
- }
- else
- {
- v5 = 15;
- }
- return _chkesp(1, v5, v7);
- }
- // 405FA0: using guessed type _DWORD __cdecl tomcrypt_ecc_decrypt_key(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
- // 40C3A0: using guessed type _DWORD __cdecl tomcrypt_der_decode_sequence(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
- // 43C1C0: using guessed type __int16 word_43C1C0;
- //----- (00406470) --------------------------------------------------------
- int __cdecl tomcrypt_find_hash(const char *Str2)
- {
- int v1; // eax@7
- char v3; // [sp+0h] [bp-50h]@0
- char v4; // [sp+Ch] [bp-44h]@1
- int i; // [sp+4Ch] [bp-4h]@3
- memset(&v4, -858993460, 0x44u);
- if ( !Str2 )
- errorFunctionMaybe(
- (int)"name != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\misc\\crypt\\crypt_find_hash.c",
- word_43C1C4 + 2);
- for ( i = 0; i < 32; ++i )
- {
- if ( dword_4402C8[26 * i] && !strcmp((const char *)dword_4402C8[26 * i], Str2) )
- {
- v1 = i;
- return _chkesp(1, v1, v3);
- }
- }
- v1 = -1;
- return _chkesp(1, v1, v3);
- }
- // 43C1C4: using guessed type __int16 word_43C1C4;
- // 4402C8: using guessed type int dword_4402C8[];
- //----- (00406510) --------------------------------------------------------
- int __cdecl tomcrypt_register_hash(const void *Src)
- {
- int v1; // eax@6
- char v3; // [sp+0h] [bp-50h]@0
- char v4; // [sp+Ch] [bp-44h]@1
- int i; // [sp+4Ch] [bp-4h]@3
- memset(&v4, -858993460, 0x44u);
- if ( !Src )
- errorFunctionMaybe(
- (int)"hash != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\misc\\crypt\\crypt_register_hash.c",
- word_43C1C8 + 3);
- for ( i = 0; i < 32; ++i )
- {
- if ( !memcmp(&dword_4402C8[26 * i], Src, 0x68u) )
- {
- v1 = i;
- return _chkesp(1, v1, v3);
- }
- }
- for ( i = 0; i < 32; ++i )
- {
- if ( !dword_4402C8[26 * i] )
- {
- memcpy(&dword_4402C8[26 * i], Src, 0x68u);
- v1 = i;
- return _chkesp(1, v1, v3);
- }
- }
- v1 = -1;
- return _chkesp(1, v1, v3);
- }
- // 43C1C8: using guessed type __int16 word_43C1C8;
- // 4402C8: using guessed type int dword_4402C8[];
- //----- (004065F0) --------------------------------------------------------
- int __cdecl sub_4065F0(int a1)
- {
- char v2; // [sp+0h] [bp-4Ch]@0
- char v3; // [sp+Ch] [bp-40h]@1
- memset(&v3, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"md != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\hashes\\sha2\\sha512.c",
- word_43C1CC + 1);
- *(_DWORD *)(a1 + 72) = 0;
- *(_DWORD *)a1 = 0;
- *(_DWORD *)(a1 + 4) = 0;
- *(_DWORD *)(a1 + 8) = -205731576;
- *(_DWORD *)(a1 + 12) = 1779033703;
- *(_DWORD *)(a1 + 16) = -2067093701;
- *(_DWORD *)(a1 + 20) = -1150833019;
- *(_DWORD *)(a1 + 24) = -23791573;
- *(_DWORD *)(a1 + 28) = 1013904242;
- *(_DWORD *)(a1 + 32) = 1595750129;
- *(_DWORD *)(a1 + 36) = -1521486534;
- *(_DWORD *)(a1 + 40) = -1377402159;
- *(_DWORD *)(a1 + 44) = 1359893119;
- *(_DWORD *)(a1 + 48) = 725511199;
- *(_DWORD *)(a1 + 52) = -1694144372;
- *(_DWORD *)(a1 + 56) = -79577749;
- *(_DWORD *)(a1 + 60) = 528734635;
- *(_DWORD *)(a1 + 64) = 327033209;
- *(_DWORD *)(a1 + 68) = 1541459225;
- return _chkesp(1, 0, v2);
- }
- // 43C1CC: using guessed type __int16 word_43C1CC;
- //----- (004066E0) --------------------------------------------------------
- int __cdecl sub_4066E0(int a1, char *Src, unsigned int a3)
- {
- int v3; // eax@6
- char v5; // [sp+0h] [bp-58h]@0
- char v6; // [sp+Ch] [bp-4Ch]@1
- unsigned int v7; // [sp+4Ch] [bp-Ch]@14
- int v8; // [sp+50h] [bp-8h]@10
- size_t Size; // [sp+54h] [bp-4h]@16
- memset(&v6, -858993460, 0x4Cu);
- if ( !a1 )
- errorFunctionMaybe((int)"md != NULL", (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\hashes\\sha2\\sha512.c", 198);
- if ( !Src )
- errorFunctionMaybe((int)"in != NULL", (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\hashes\\sha2\\sha512.c", 198);
- if ( *(_DWORD *)(a1 + 72) <= 0x80u )
- {
- while ( a3 )
- {
- if ( *(_DWORD *)(a1 + 72) || a3 < 0x80 )
- {
- if ( a3 >= 128 - *(_DWORD *)(a1 + 72) )
- v7 = 128 - *(_DWORD *)(a1 + 72);
- else
- v7 = a3;
- Size = v7;
- memcpy((void *)(a1 + *(_DWORD *)(a1 + 72) + 76), Src, v7);
- *(_DWORD *)(a1 + 72) += Size;
- Src += Size;
- a3 -= Size;
- if ( *(_DWORD *)(a1 + 72) == 128 )
- {
- v8 = sub_406890(a1, a1 + 76);
- if ( v8 )
- {
- v3 = v8;
- return _chkesp(1, v3, v5);
- }
- *(_QWORD *)a1 += 1024i64;
- *(_DWORD *)(a1 + 72) = 0;
- }
- }
- else
- {
- v8 = sub_406890(a1, Src);
- if ( v8 )
- {
- v3 = v8;
- return _chkesp(1, v3, v5);
- }
- *(_QWORD *)a1 += 1024i64;
- Src += 128;
- a3 -= 128;
- }
- }
- v3 = 0;
- }
- else
- {
- v3 = 16;
- }
- return _chkesp(1, v3, v5);
- }
- // 406890: using guessed type _DWORD __cdecl sub_406890(_DWORD, _DWORD);
- //----- (00406890) --------------------------------------------------------
- #error "FFFFFFFF: too complex function (funcsize=1432)"
- //----- (00407D90) --------------------------------------------------------
- int __cdecl sub_407D90(int a1, int a2)
- {
- int v2; // eax@6
- char v4; // [sp+0h] [bp-50h]@0
- char v5; // [sp+Ch] [bp-44h]@1
- int i; // [sp+4Ch] [bp-4h]@13
- memset(&v5, -858993460, 0x44u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"md != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\hashes\\sha2\\sha512.c",
- word_43C1D0 + 3);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"out != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\hashes\\sha2\\sha512.c",
- word_43C1D0 + 4);
- if ( *(_DWORD *)(a1 + 72) < 0x80u )
- {
- *(_QWORD *)a1 += 8i64 * *(_DWORD *)(a1 + 72);
- *(_BYTE *)(a1 + (*(_DWORD *)(a1 + 72))++ + 76) = -128;
- if ( *(_DWORD *)(a1 + 72) > 0x70u )
- {
- while ( *(_DWORD *)(a1 + 72) < 0x80u )
- *(_BYTE *)(a1 + (*(_DWORD *)(a1 + 72))++ + 76) = 0;
- sub_406890(a1, a1 + 76);
- *(_DWORD *)(a1 + 72) = 0;
- }
- while ( *(_DWORD *)(a1 + 72) < 0x78u )
- *(_BYTE *)(a1 + (*(_DWORD *)(a1 + 72))++ + 76) = 0;
- *(_BYTE *)(a1 + 196) = unknown_libname_1(56);
- *(_BYTE *)(a1 + 197) = unknown_libname_1(48);
- *(_BYTE *)(a1 + 198) = unknown_libname_1(40);
- *(_BYTE *)(a1 + 199) = unknown_libname_1(32);
- *(_BYTE *)(a1 + 200) = unknown_libname_1(24);
- *(_BYTE *)(a1 + 201) = unknown_libname_1(16);
- *(_BYTE *)(a1 + 202) = unknown_libname_1(8);
- *(_BYTE *)(a1 + 203) = *(_DWORD *)a1;
- sub_406890(a1, a1 + 76);
- for ( i = 0; i < 8; ++i )
- {
- *(_BYTE *)(a2 + 8 * i) = unknown_libname_1(56);
- *(_BYTE *)(a2 + 8 * i + 1) = unknown_libname_1(48);
- *(_BYTE *)(a2 + 8 * i + 2) = unknown_libname_1(40);
- *(_BYTE *)(a2 + 8 * i + 3) = unknown_libname_1(32);
- *(_BYTE *)(a2 + 8 * i + 4) = unknown_libname_1(24);
- *(_BYTE *)(a2 + 8 * i + 5) = unknown_libname_1(16);
- *(_BYTE *)(a2 + 8 * i + 6) = unknown_libname_1(8);
- *(_BYTE *)(a2 + 8 * i + 7) = *(_BYTE *)(a1 + 8 * i + 8);
- }
- v2 = 0;
- }
- else
- {
- v2 = 16;
- }
- return _chkesp(1, v2, v4);
- }
- // 406890: using guessed type _DWORD __cdecl sub_406890(_DWORD, _DWORD);
- // 413010: using guessed type int __thiscall unknown_libname_1(_DWORD);
- // 43C1D0: using guessed type __int16 word_43C1D0;
- //----- (00408160) --------------------------------------------------------
- int __cdecl sub_408160()
- {
- unsigned int v0; // eax@3
- int v1; // eax@4
- char v3; // [sp+0h] [bp-1A0h]@0
- char v4; // [sp+Ch] [bp-194h]@1
- int v5; // [sp+4Ch] [bp-154h]@3
- char Buf1; // [sp+15Ch] [bp-44h]@3
- int i; // [sp+19Ch] [bp-4h]@1
- memset(&v4, -858993460, 0x194u);
- for ( i = 0; i < 2; ++i )
- {
- sub_4065F0((int)&v5);
- v0 = strlen((&off_4351A8)[68 * i]);
- sub_4066E0((int)&v5, (&off_4351A8)[68 * i], v0);
- sub_407D90((int)&v5, (int)&Buf1);
- if ( memcmp(&Buf1, (char *)&unk_4351AC + 68 * i, 0x40u) )
- {
- v1 = 5;
- return _chkesp(1, v1, v3);
- }
- }
- v1 = 0;
- return _chkesp(1, v1, v3);
- }
- // 4351A8: using guessed type char *off_4351A8;
- //----- (00408230) --------------------------------------------------------
- int __cdecl sub_408230(int a1)
- {
- char v2; // [sp+0h] [bp-4Ch]@0
- char v3; // [sp+Ch] [bp-40h]@1
- memset(&v3, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe((int)"md != NULL", (int)"c:\\cr\\doc\\libs\\libtomcrypt\\src\\hashes\\sha2\\sha384.c", 41);
- *(_DWORD *)(a1 + 72) = 0;
- *(_DWORD *)a1 = 0;
- *(_DWORD *)(a1 + 4) = 0;
- *(_DWORD *)(a1 + 8) = -1056596264;
- *(_DWORD *)(a1 + 12) = -876896931;
- *(_DWORD *)(a1 + 16) = 914150663;
- *(_DWORD *)(a1 + 20) = 1654270250;
- *(_DWORD *)(a1 + 24) = 812702999;
- *(_DWORD *)(a1 + 28) = -1856437926;
- *(_DWORD *)(a1 + 32) = -150054599;
- *(_DWORD *)(a1 + 36) = 355462360;
- *(_DWORD *)(a1 + 40) = -4191439;
- *(_DWORD *)(a1 + 44) = 1731405415;
- *(_DWORD *)(a1 + 48) = 1750603025;
- *(_DWORD *)(a1 + 52) = -1900787065;
- *(_DWORD *)(a1 + 56) = 1694076839;
- *(_DWORD *)(a1 + 60) = -619958771;
- *(_DWORD *)(a1 + 64) = -1090891868;
- *(_DWORD *)(a1 + 68) = 1203062813;
- return _chkesp(1, 0, v2);
- }
- //----- (00408320) --------------------------------------------------------
- int __cdecl sub_408320(int a1, void *Dst)
- {
- int v2; // eax@6
- char v4; // [sp+0h] [bp-8Ch]@0
- char v5; // [sp+Ch] [bp-80h]@1
- char Src; // [sp+4Ch] [bp-40h]@7
- memset(&v5, -858993460, 0x80u);
- if ( !a1 )
- errorFunctionMaybe((int)"md != NULL", (int)"c:\\cr\\doc\\libs\\libtomcrypt\\src\\hashes\\sha2\\sha384.c", 66);
- if ( !Dst )
- errorFunctionMaybe((int)"out != NULL", (int)"c:\\cr\\doc\\libs\\libtomcrypt\\src\\hashes\\sha2\\sha384.c", 67);
- if ( *(_DWORD *)(a1 + 72) < 0x80u )
- {
- sub_407D90(a1, (int)&Src);
- memcpy(Dst, &Src, 0x30u);
- v2 = 0;
- }
- else
- {
- v2 = 16;
- }
- return _chkesp(1, v2, v4);
- }
- //----- (004083C0) --------------------------------------------------------
- int __cdecl sub_4083C0()
- {
- unsigned int v0; // eax@3
- int v1; // eax@4
- char v3; // [sp+0h] [bp-190h]@0
- char v4; // [sp+Ch] [bp-184h]@1
- int v5; // [sp+4Ch] [bp-144h]@3
- char Buf1; // [sp+15Ch] [bp-34h]@3
- int i; // [sp+18Ch] [bp-4h]@1
- memset(&v4, -858993460, 0x184u);
- for ( i = 0; i < 2; ++i )
- {
- sub_408230((int)&v5);
- v0 = strlen((&off_435298)[52 * i]);
- sub_4066E0((int)&v5, (&off_435298)[52 * i], v0);
- sub_408320((int)&v5, &Buf1);
- if ( memcmp(&Buf1, (char *)&unk_43529C + 52 * i, 0x30u) )
- {
- v1 = 5;
- return _chkesp(1, v1, v3);
- }
- }
- v1 = 0;
- return _chkesp(1, v1, v3);
- }
- // 435298: using guessed type char *off_435298;
- //----- (00408490) --------------------------------------------------------
- int __cdecl sub_408490(int a1, char a2)
- {
- int v2; // eax@3
- int v3; // edx@5
- int v4; // eax@6
- int v5; // eax@7
- char v7; // [sp+0h] [bp-5Ch]@3
- char v8; // [sp+Ch] [bp-50h]@1
- char *v9; // [sp+4Ch] [bp-10h]@4
- char *i; // [sp+50h] [bp-Ch]@1
- int v11; // [sp+54h] [bp-8h]@1
- int j; // [sp+58h] [bp-4h]@1
- int v13; // [sp+5Ch] [bp+0h]@3
- memset(&v8, -858993460, 0x50u);
- j = a1;
- v11 = 0;
- for ( i = &a2; ; j = *((_DWORD *)i - 1) )
- {
- if ( !j )
- {
- i = 0;
- v5 = 0;
- return _chkesp(1, v5, v7);
- }
- v2 = dword_4417E8(j);
- if ( _chkesp(&v7 == &v7, v2, (unsigned int)&v13) )
- break;
- ++v11;
- i += 4;
- }
- v9 = &a2;
- for ( j = a1; ; j = *((_DWORD *)v9 - 1) )
- {
- v3 = v11--;
- if ( !v3 )
- break;
- v4 = dword_4417F0(*(_DWORD *)j);
- _chkesp(&v7 == &v7, v4, (unsigned int)&v13);
- v9 += 4;
- }
- v9 = 0;
- v5 = 13;
- return _chkesp(1, v5, v7);
- }
- // 4417E8: using guessed type int (__cdecl *dword_4417E8)(_DWORD);
- // 4417F0: using guessed type int (__cdecl *dword_4417F0)(_DWORD);
- //----- (00408570) --------------------------------------------------------
- int __cdecl sub_408570(int a1, char a2)
- {
- int v2; // eax@1
- int v3; // eax@3
- char v5; // [sp+0h] [bp-54h]@3
- char v6; // [sp+Ch] [bp-48h]@1
- char *v7; // [sp+4Ch] [bp-8h]@1
- int v8; // [sp+50h] [bp-4h]@1
- int v9; // [sp+54h] [bp+0h]@3
- memset(&v6, -858993460, 0x48u);
- v2 = a1;
- v8 = a1;
- v7 = &a2;
- while ( v8 )
- {
- v3 = dword_4417F0(v8);
- _chkesp(&v5 == &v5, v3, (unsigned int)&v9);
- v2 = (int)(v7 + 4);
- v7 += 4;
- v8 = *((_DWORD *)v7 - 1);
- }
- return _chkesp(1, v2, v5);
- }
- // 4417F0: using guessed type int (__cdecl *dword_4417F0)(_DWORD);
- //----- (004085E0) --------------------------------------------------------
- int __cdecl sub_4085E0(int a1, int a2, char a3)
- {
- int v3; // eax@8
- char v5; // [sp+0h] [bp-70h]@0
- char v6; // [sp+Ch] [bp-64h]@1
- int v7; // [sp+4Ch] [bp-24h]@15
- int v8; // [sp+50h] [bp-20h]@5
- int v9; // [sp+54h] [bp-1Ch]@11
- char *v10; // [sp+58h] [bp-18h]@3
- int v11; // [sp+5Ch] [bp-14h]@4
- size_t SizeOfElements; // [sp+60h] [bp-10h]@3
- int v13; // [sp+64h] [bp-Ch]@4
- int v14; // [sp+68h] [bp-8h]@4
- int v15; // [sp+6Ch] [bp-4h]@18
- memset(&v6, -858993460, 0x64u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\sequence\\der_decode_sequence_multi.c",
- word_43C1D4 + 7);
- v10 = &a3;
- for ( SizeOfElements = 0; ; ++SizeOfElements )
- {
- v10 += 4;
- v14 = *((_DWORD *)v10 - 1);
- v10 += 4;
- v13 = *((_DWORD *)v10 - 1);
- v10 += 4;
- v11 = *((_DWORD *)v10 - 1);
- if ( !v14 )
- break;
- v8 = v14;
- if ( v14 <= 0 || v8 > 15 )
- {
- v10 = 0;
- v3 = 16;
- return _chkesp(1, v3, v5);
- }
- }
- v10 = 0;
- if ( SizeOfElements )
- {
- v9 = (int)calloc(0x20u, SizeOfElements);
- if ( v9 )
- {
- v10 = &a3;
- for ( SizeOfElements = 0; ; ++SizeOfElements )
- {
- v10 += 4;
- v14 = *((_DWORD *)v10 - 1);
- v10 += 4;
- v13 = *((_DWORD *)v10 - 1);
- v10 += 4;
- v11 = *((_DWORD *)v10 - 1);
- if ( !v14 )
- break;
- v7 = v14;
- if ( v14 <= 0 || v7 > 15 )
- {
- v10 = 0;
- v15 = 16;
- goto LABEL_20;
- }
- *(_DWORD *)(v9 + 32 * SizeOfElements) = v14;
- *(_DWORD *)(v9 + 32 * SizeOfElements + 8) = v13;
- *(_DWORD *)(v9 + 32 * SizeOfElements + 4) = v11;
- }
- v10 = 0;
- v15 = tomcrypt_der_decode_sequence(a1, a2, v9, SizeOfElements, 1);
- LABEL_20:
- CrtCheckMemoryWrapperWrapper(v9);
- v3 = v15;
- }
- else
- {
- v3 = 13;
- }
- }
- else
- {
- v3 = 2;
- }
- return _chkesp(1, v3, v5);
- }
- // 40C3A0: using guessed type _DWORD __cdecl tomcrypt_der_decode_sequence(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
- // 43C1D4: using guessed type __int16 word_43C1D4;
- //----- (004087D0) --------------------------------------------------------
- int __cdecl errorFunctionMaybe(int a1, int a2, int a3)
- {
- int v3; // eax@1
- char v5; // [sp+0h] [bp-4Ch]@0
- char v6; // [sp+Ch] [bp-40h]@1
- memset(&v6, -858993460, 0x40u);
- fprintf(&stru_43C2E0, "LTC_ARGCHK '%s' failure on line %d of file %s\n", a1, a3, a2);
- v3 = raise(22);
- return _chkesp(1, v3, v5);
- }
- // 413320: using guessed type _DWORD __cdecl raise(_DWORD);
- //----- (00408830) --------------------------------------------------------
- int __cdecl sub_408830(int a1, int a2, int a3, int a4, int a5, int a6)
- {
- int v6; // eax@11
- int v7; // eax@17
- int v8; // eax@18
- int v9; // eax@21
- int v10; // eax@22
- int v11; // eax@23
- int v12; // eax@24
- int v13; // eax@25
- int v14; // eax@26
- int v15; // eax@28
- int v16; // eax@29
- int v17; // eax@31
- int v18; // esi@31
- int v19; // eax@31
- int v20; // eax@33
- int v21; // eax@33
- int v22; // eax@33
- char v24; // [sp+0h] [bp-60h]@17
- char v25; // [sp+Ch] [bp-54h]@1
- int v26; // [sp+4Ch] [bp-14h]@15
- unsigned int v27; // [sp+50h] [bp-10h]@29
- int v28; // [sp+54h] [bp-Ch]@22
- int v29; // [sp+58h] [bp-8h]@15
- int v30; // [sp+5Ch] [bp-4h]@15
- int v31; // [sp+60h] [bp+0h]@17
- memset(&v25, -858993460, 0x54u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\rsa\\rsa_exptmod.c",
- word_43C1D8 + 5);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"out != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\rsa\\rsa_exptmod.c",
- word_43C1D8 + 6);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\rsa\\rsa_exptmod.c",
- word_43C1D8 + 7);
- if ( !a6 )
- errorFunctionMaybe(
- (int)"key != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\rsa\\rsa_exptmod.c",
- word_43C1D8 + 8);
- if ( a5 != 1 || *(_DWORD *)a6 == 1 )
- {
- if ( a5 != 1 && a5 )
- {
- v6 = 18;
- return _chkesp(1, v6, v24);
- }
- v26 = sub_408490((int)&v30, (unsigned int)&v29);
- if ( v26 )
- {
- v6 = v26;
- return _chkesp(1, v6, v24);
- }
- v7 = dword_441830(v30, a1, a2);
- v26 = _chkesp(&v24 == &v24, v7, (unsigned int)&v31);
- if ( !v26 )
- {
- v8 = dword_44180C(*(_DWORD *)(a6 + 12), v30);
- if ( _chkesp(&v24 == &v24, v8, (unsigned int)&v31) != -1 )
- {
- if ( a5 == 1 )
- {
- v9 = dword_441880(v30, *(_DWORD *)(a6 + 28), *(_DWORD *)(a6 + 16), v29);
- v26 = _chkesp(&v24 == &v24, v9, (unsigned int)&v31);
- if ( v26
- || (v10 = dword_441880(v30, *(_DWORD *)(a6 + 32), *(_DWORD *)(a6 + 20), v28),
- (v26 = _chkesp(&v24 == &v24, v10, (unsigned int)&v31)) != 0)
- || (v11 = dword_44183C(v29, v28, v30), (v26 = _chkesp(&v24 == &v24, v11, (unsigned int)&v31)) != 0)
- || (v12 = dword_441864(v30, *(_DWORD *)(a6 + 24), *(_DWORD *)(a6 + 16), v30),
- (v26 = _chkesp(&v24 == &v24, v12, (unsigned int)&v31)) != 0)
- || (v13 = dword_441844(v30, *(_DWORD *)(a6 + 20), v30),
- (v26 = _chkesp(&v24 == &v24, v13, (unsigned int)&v31)) != 0)
- || (v14 = dword_441834(v30, v28, v30), (v26 = _chkesp(&v24 == &v24, v14, (unsigned int)&v31)) != 0) )
- goto LABEL_34;
- }
- else
- {
- v15 = dword_441880(v30, *(_DWORD *)(a6 + 4), *(_DWORD *)(a6 + 12), v30);
- v26 = _chkesp(&v24 == &v24, v15, (unsigned int)&v31);
- if ( v26 )
- goto LABEL_34;
- }
- v16 = dword_441828(*(_DWORD *)(a6 + 12));
- v27 = _chkesp(&v24 == &v24, v16, (unsigned int)&v31);
- if ( v27 <= *(_DWORD *)a4 )
- {
- v17 = dword_441828(v30);
- v18 = _chkesp(&v24 == &v24, v17, (unsigned int)&v31);
- v19 = dword_441828(*(_DWORD *)(a6 + 12));
- if ( v18 <= (unsigned int)_chkesp(&v24 == &v24, v19, (unsigned int)&v24) )
- {
- *(_DWORD *)a4 = v27;
- sub_40BD50(a3, v27);
- v20 = dword_441828(v30);
- v21 = _chkesp(&v24 == &v24, v20, (unsigned int)&v24);
- v22 = dword_44182C(v30, v27 - v21 + a3);
- v26 = _chkesp(&v24 == &v24, v22, (unsigned int)&v24);
- }
- else
- {
- v26 = 1;
- }
- }
- else
- {
- *(_DWORD *)a4 = v27;
- v26 = 6;
- }
- goto LABEL_34;
- }
- v26 = 22;
- }
- LABEL_34:
- sub_408570(v30, v29);
- v6 = v26;
- return _chkesp(1, v6, v24);
- }
- v6 = 15;
- return _chkesp(1, v6, v24);
- }
- // 43C1D8: using guessed type __int16 word_43C1D8;
- // 44180C: using guessed type int (__cdecl *dword_44180C)(_DWORD, _DWORD);
- // 441828: using guessed type int (__cdecl *dword_441828)(_DWORD);
- // 44182C: using guessed type int (__cdecl *dword_44182C)(_DWORD, _DWORD);
- // 441830: using guessed type int (__cdecl *dword_441830)(_DWORD, _DWORD, _DWORD);
- // 441834: using guessed type int (__cdecl *dword_441834)(_DWORD, _DWORD, _DWORD);
- // 44183C: using guessed type int (__cdecl *dword_44183C)(_DWORD, _DWORD, _DWORD);
- // 441844: using guessed type int (__cdecl *dword_441844)(_DWORD, _DWORD, _DWORD);
- // 441864: using guessed type int (__cdecl *dword_441864)(_DWORD, _DWORD, _DWORD, _DWORD);
- // 441880: using guessed type int (__cdecl *dword_441880)(_DWORD, _DWORD, _DWORD, _DWORD);
- //----- (00408C00) --------------------------------------------------------
- int __cdecl sub_408C00(int a1, signed int a2, signed int a3, signed int a4, int a5)
- {
- int v5; // eax@7
- int v6; // eax@15
- int v7; // eax@17
- int v8; // eax@18
- int v9; // eax@19
- int v10; // eax@21
- int v11; // eax@22
- int v12; // eax@23
- int v13; // eax@24
- int v14; // eax@25
- int v15; // eax@27
- int v16; // eax@28
- int v17; // eax@29
- int v18; // eax@30
- int v19; // eax@31
- int v20; // eax@32
- int v21; // eax@33
- int v22; // eax@34
- int v23; // eax@35
- int v24; // eax@36
- char v26; // [sp+0h] [bp-64h]@15
- char v27; // [sp+Ch] [bp-58h]@1
- int v28; // [sp+4Ch] [bp-18h]@11
- int v29; // [sp+50h] [bp-14h]@15
- int v30; // [sp+54h] [bp-10h]@18
- int v31; // [sp+58h] [bp-Ch]@17
- int v32; // [sp+5Ch] [bp-8h]@13
- int v33; // [sp+60h] [bp-4h]@13
- int v34; // [sp+64h] [bp+0h]@15
- memset(&v27, -858993460, 0x58u);
- if ( !dword_4417E0 )
- errorFunctionMaybe(
- (int)"ltc_mp.name != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\rsa\\rsa_make_key.c",
- word_43C1DC + 4);
- if ( !a5 )
- errorFunctionMaybe(
- (int)"key != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\rsa\\rsa_make_key.c",
- word_43C1DC + 5);
- if ( a3 >= 128 && a3 <= 512 )
- {
- if ( a4 >= 3 && a4 & 1 )
- {
- v28 = sub_40CDE0(a2);
- if ( v28 )
- {
- v5 = v28;
- }
- else
- {
- v28 = sub_408490((int)&v33, (unsigned int)&v32);
- if ( v28 )
- {
- v5 = v28;
- }
- else
- {
- v6 = dword_4417FC(v29, a4);
- v28 = _chkesp(&v26 == &v26, v6, (unsigned int)&v34);
- if ( !v28 )
- {
- while ( 1 )
- {
- v28 = sub_40CC20(v33, a3 / 2, a1, a2);
- if ( v28 )
- break;
- v7 = dword_441840(v33, 1, v31);
- v28 = _chkesp(&v26 == &v26, v7, (unsigned int)&v34);
- if ( v28 )
- break;
- v8 = dword_44185C(v31, v29, v30);
- v28 = _chkesp(&v26 == &v26, v8, (unsigned int)&v34);
- if ( v28 )
- break;
- v9 = dword_441810(v30, 1);
- if ( !_chkesp(&v26 == &v26, v9, (unsigned int)&v34) )
- {
- while ( 1 )
- {
- v28 = sub_40CC20(v32, a3 / 2, a1, a2);
- if ( v28 )
- goto LABEL_38;
- v10 = dword_441840(v32, 1, v31);
- v28 = _chkesp(&v26 == &v26, v10, (unsigned int)&v34);
- if ( v28 )
- goto LABEL_38;
- v11 = dword_44185C(v31, v29, v30);
- v28 = _chkesp(&v26 == &v26, v11, (unsigned int)&v34);
- if ( v28 )
- goto LABEL_38;
- v12 = dword_441810(v30, 1);
- if ( !_chkesp(&v26 == &v26, v12, (unsigned int)&v34) )
- {
- v13 = dword_441840(v33, 1, v30);
- v28 = _chkesp(&v26 == &v26, v13, (unsigned int)&v34);
- if ( !v28 )
- {
- v14 = dword_441860(v31, v30, v31);
- v28 = _chkesp(&v26 == &v26, v14, (unsigned int)&v34);
- if ( !v28 )
- {
- v28 = sub_408490(a5 + 4, a5 + 8);
- if ( !v28 )
- {
- v15 = dword_4417FC(*(_DWORD *)(a5 + 4), a4);
- v28 = _chkesp(&v26 == &v26, v15, (unsigned int)&v34);
- if ( !v28 )
- {
- v16 = dword_44186C(*(_DWORD *)(a5 + 4), v31, *(_DWORD *)(a5 + 8));
- v28 = _chkesp(&v26 == &v26, v16, (unsigned int)&v34);
- if ( !v28 )
- {
- v17 = dword_441844(v33, v32, *(_DWORD *)(a5 + 12));
- v28 = _chkesp(&v26 == &v26, v17, (unsigned int)&v34);
- if ( !v28 )
- {
- v18 = dword_441840(v33, 1, v31);
- v28 = _chkesp(&v26 == &v26, v18, (unsigned int)&v34);
- if ( !v28 )
- {
- v19 = dword_441840(v32, 1, v30);
- v28 = _chkesp(&v26 == &v26, v19, (unsigned int)&v34);
- if ( !v28 )
- {
- v20 = dword_441850(*(_DWORD *)(a5 + 8), v31, 0, *(_DWORD *)(a5 + 28));
- v28 = _chkesp(&v26 == &v26, v20, (unsigned int)&v34);
- if ( !v28 )
- {
- v21 = dword_441850(*(_DWORD *)(a5 + 8), v30, 0, *(_DWORD *)(a5 + 32));
- v28 = _chkesp(&v26 == &v26, v21, (unsigned int)&v34);
- if ( !v28 )
- {
- v22 = dword_44186C(v32, v33, *(_DWORD *)(a5 + 24));
- v28 = _chkesp(&v26 == &v26, v22, (unsigned int)&v34);
- if ( !v28 )
- {
- v23 = dword_4417F8(v33, *(_DWORD *)(a5 + 16));
- v28 = _chkesp(&v26 == &v26, v23, (unsigned int)&v34);
- if ( !v28 )
- {
- v24 = dword_4417F8(v32, *(_DWORD *)(a5 + 20));
- v28 = _chkesp(&v26 == &v26, v24, (unsigned int)&v34);
- if ( !v28 )
- {
- *(_DWORD *)a5 = 1;
- v28 = 0;
- goto LABEL_39;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- goto LABEL_38;
- }
- }
- }
- }
- }
- LABEL_38:
- sub_408570(*(_DWORD *)(a5 + 8), *(_DWORD *)(a5 + 4));
- LABEL_39:
- sub_408570(v29, v30);
- v5 = v28;
- }
- }
- }
- else
- {
- v5 = 16;
- }
- }
- else
- {
- v5 = 3;
- }
- return _chkesp(1, v5, v26);
- }
- // 43C1DC: using guessed type __int16 word_43C1DC;
- // 4417E0: using guessed type int dword_4417E0;
- // 4417F8: using guessed type int (__cdecl *dword_4417F8)(_DWORD, _DWORD);
- // 4417FC: using guessed type int (__cdecl *dword_4417FC)(_DWORD, _DWORD);
- // 441810: using guessed type int (__cdecl *dword_441810)(_DWORD, _DWORD);
- // 441840: using guessed type int (__cdecl *dword_441840)(_DWORD, _DWORD, _DWORD);
- // 441844: using guessed type int (__cdecl *dword_441844)(_DWORD, _DWORD, _DWORD);
- // 441850: using guessed type int (__cdecl *dword_441850)(_DWORD, _DWORD, _DWORD, _DWORD);
- // 44185C: using guessed type int (__cdecl *dword_44185C)(_DWORD, _DWORD, _DWORD);
- // 441860: using guessed type int (__cdecl *dword_441860)(_DWORD, _DWORD, _DWORD);
- // 44186C: using guessed type int (__cdecl *dword_44186C)(_DWORD, _DWORD, _DWORD);
- //----- (00409140) --------------------------------------------------------
- int __cdecl sub_409140(int a1, int a2, int a3, int a4, int a5, int a6)
- {
- int v6; // eax@14
- int v7; // eax@17
- int v8; // eax@17
- int v9; // eax@23
- int v10; // eax@23
- int v11; // eax@31
- int v12; // eax@32
- int v13; // eax@33
- int v14; // eax@34
- int v15; // eax@35
- int v16; // eax@36
- int v17; // eax@37
- int v18; // eax@38
- int v19; // eax@39
- int v20; // eax@40
- int v21; // eax@41
- int v22; // eax@42
- int v23; // eax@43
- int v24; // eax@48
- int v25; // eax@59
- int v26; // eax@60
- int v27; // eax@64
- int v28; // eax@65
- int v29; // eax@66
- int v30; // eax@68
- int v31; // eax@71
- int v32; // eax@72
- char v34; // [sp+0h] [bp-D0h]@17
- char v35; // [sp+Ch] [bp-C4h]@1
- int v36; // [sp+4Ch] [bp-84h]@18
- int v37; // [sp+50h] [bp-80h]@32
- int v38; // [sp+54h] [bp-7Ch]@31
- int v39; // [sp+58h] [bp-78h]@51
- int v40; // [sp+5Ch] [bp-74h]@22
- int v41; // [sp+60h] [bp-70h]@15
- int v42; // [sp+64h] [bp-6Ch]@13
- int v43; // [sp+68h] [bp-68h]@51
- int v44; // [sp+6Ch] [bp-64h]@55
- int v45; // [sp+70h] [bp-60h]@55
- unsigned int j; // [sp+74h] [bp-5Ch]@26
- unsigned int i; // [sp+78h] [bp-58h]@23
- int v48; // [sp+7Ch] [bp-54h]@20
- int v49; // [sp+80h] [bp-50h]@17
- int v50; // [sp+84h] [bp-4Ch]@17
- int v51; // [sp+88h] [bp-48h]@51
- int v52; // [sp+8Ch] [bp-44h]@51
- int v53; // [sp+90h] [bp-40h]@25
- int v54; // [sp+94h] [bp-3Ch]@34
- int v55; // [sp+98h] [bp-38h]@40
- int v56; // [sp+9Ch] [bp-34h]@41
- int v57; // [sp+A0h] [bp-30h]@37
- int v58; // [sp+B0h] [bp-20h]@42
- int v59; // [sp+C0h] [bp-10h]@43
- int v60; // [sp+D0h] [bp+0h]@17
- memset(&v35, -858993460, 0xC4u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"A != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_mul2add.c",
- word_43C1E0 + 8);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"B != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_mul2add.c",
- word_43C1E0 + 9);
- if ( !a5 )
- errorFunctionMaybe(
- (int)"C != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_mul2add.c",
- word_43C1E0 + 10);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"kA != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_mul2add.c",
- word_43C1E0 + 11);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"kB != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_mul2add.c",
- word_43C1E0 + 12);
- if ( !a6 )
- errorFunctionMaybe(
- (int)"modulus != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_mul2add.c",
- word_43C1E0 + 13);
- v42 = (int)calloc(1u, 0x100u);
- if ( v42 )
- {
- v41 = (int)calloc(1u, 0x100u);
- if ( v41 )
- {
- v7 = dword_441828(a2);
- v50 = _chkesp(&v34 == &v34, v7, (unsigned int)&v60);
- v8 = dword_441828(a4);
- v49 = _chkesp(&v34 == &v34, v8, (unsigned int)&v60);
- if ( v50 <= (unsigned int)v49 )
- v36 = v49;
- else
- v36 = v50;
- v48 = v36;
- if ( (unsigned int)v50 <= 0x100 && (unsigned int)v49 <= 0x100 )
- {
- v9 = dword_44182C(a2, v48 - v50 + v42);
- _chkesp(&v34 == &v34, v9, (unsigned int)&v60);
- v10 = dword_44182C(a4, v48 - v49 + v41);
- _chkesp(&v34 == &v34, v10, (unsigned int)&v60);
- for ( i = 0; i < 0x10; ++i )
- {
- *(&v53 + i) = sub_40CE30();
- if ( !*(&v53 + i) )
- {
- for ( j = 0; j < i; ++j )
- sub_40CEB0(*(&v53 + j));
- v40 = 13;
- goto LABEL_76;
- }
- }
- v11 = dword_441870(a6, &v38);
- v40 = _chkesp(&v34 == &v34, v11, (unsigned int)&v60);
- if ( !v40 )
- {
- v12 = dword_4417E8(&v37);
- v40 = _chkesp(&v34 == &v34, v12, (unsigned int)&v60);
- if ( !v40 )
- {
- v13 = dword_441874(v37, a6);
- v40 = _chkesp(&v34 == &v34, v13, (unsigned int)&v60);
- if ( !v40 )
- {
- v14 = dword_441864(*(_DWORD *)a1, v37, a6, *(_DWORD *)v54);
- v40 = _chkesp(&v34 == &v34, v14, (unsigned int)&v60);
- if ( !v40 )
- {
- v15 = dword_441864(*(_DWORD *)(a1 + 4), v37, a6, *(_DWORD *)(v54 + 4));
- v40 = _chkesp(&v34 == &v34, v15, (unsigned int)&v60);
- if ( !v40 )
- {
- v16 = dword_441864(*(_DWORD *)(a1 + 8), v37, a6, *(_DWORD *)(v54 + 8));
- v40 = _chkesp(&v34 == &v34, v16, (unsigned int)&v60);
- if ( !v40 )
- {
- v17 = dword_441864(*(_DWORD *)a3, v37, a6, *(_DWORD *)v57);
- v40 = _chkesp(&v34 == &v34, v17, (unsigned int)&v60);
- if ( !v40 )
- {
- v18 = dword_441864(*(_DWORD *)(a3 + 4), v37, a6, *(_DWORD *)(v57 + 4));
- v40 = _chkesp(&v34 == &v34, v18, (unsigned int)&v60);
- if ( !v40 )
- {
- v19 = dword_441864(*(_DWORD *)(a3 + 8), v37, a6, *(_DWORD *)(v57 + 8));
- v40 = _chkesp(&v34 == &v34, v19, (unsigned int)&v60);
- if ( !v40 )
- {
- v20 = dword_441890(v54, v55, a6, v38);
- v40 = _chkesp(&v34 == &v34, v20, (unsigned int)&v60);
- if ( !v40 )
- {
- v21 = dword_44188C(v54, v55, v56, a6, v38);
- v40 = _chkesp(&v34 == &v34, v21, (unsigned int)&v60);
- if ( !v40 )
- {
- v22 = dword_441890(v57, v58, a6, v38);
- v40 = _chkesp(&v34 == &v34, v22, (unsigned int)&v60);
- if ( !v40 )
- {
- v23 = dword_44188C(v57, v58, v59, a6, v38);
- v40 = _chkesp(&v34 == &v34, v23, (unsigned int)&v60);
- if ( !v40 )
- {
- for ( i = 1; i < 4; ++i )
- {
- for ( j = 1; j < 4; ++j )
- {
- v24 = dword_44188C(*(&v53 + i), *(&v53 + 4 * j), *(&v53 + i + 4 * j), a6, v38);
- v40 = _chkesp(&v34 == &v34, v24, (unsigned int)&v60);
- if ( v40 )
- goto LABEL_71;
- }
- }
- v43 = 3;
- v39 = 1;
- v52 = *(_BYTE *)v42;
- v51 = *(_BYTE *)v41;
- i = -1;
- while ( 1 )
- {
- ++v43;
- if ( v43 == 4 )
- {
- ++i;
- if ( i == v48 )
- {
- v40 = sub_409960(a5, a6, v38);
- break;
- }
- v52 = *(_BYTE *)(i + v42);
- v51 = *(_BYTE *)(i + v41);
- v43 = 0;
- }
- v45 = (unsigned __int8)v52 >> 6;
- v44 = (unsigned __int8)v51 >> 6;
- v52 = (unsigned __int8)(4 * v52);
- v51 = (unsigned __int8)(4 * v51);
- if ( v45 || v44 || v39 != 1 )
- {
- if ( !v39 )
- {
- v25 = dword_441890(a5, a5, a6, v38);
- v40 = _chkesp(&v34 == &v34, v25, (unsigned int)&v60);
- if ( v40
- || (v26 = dword_441890(a5, a5, a6, v38),
- (v40 = _chkesp(&v34 == &v34, v26, (unsigned int)&v60)) != 0) )
- break;
- }
- if ( v45 || v44 )
- {
- if ( v39 == 1 )
- {
- v39 = 0;
- v27 = dword_4417F8(*(_DWORD *)*(&v53 + v45 + 4 * v44), *(_DWORD *)a5);
- v40 = _chkesp(&v34 == &v34, v27, (unsigned int)&v60);
- if ( v40
- || (v28 = dword_4417F8(
- *(_DWORD *)(*(&v53 + v45 + 4 * v44) + 4),
- *(_DWORD *)(a5 + 4)),
- (v40 = _chkesp(&v34 == &v34, v28, (unsigned int)&v60)) != 0)
- || (v29 = dword_4417F8(
- *(_DWORD *)(*(&v53 + v45 + 4 * v44) + 8),
- *(_DWORD *)(a5 + 8)),
- (v40 = _chkesp(&v34 == &v34, v29, (unsigned int)&v60)) != 0) )
- break;
- }
- else
- {
- v30 = dword_44188C(a5, *(&v53 + v45 + 4 * v44), a5, a6, v38);
- v40 = _chkesp(&v34 == &v34, v30, (unsigned int)&v60);
- if ( v40 )
- break;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- LABEL_71:
- v31 = dword_4417F0(v37);
- _chkesp(&v34 == &v34, v31, (unsigned int)&v60);
- }
- v32 = dword_44187C(v38);
- _chkesp(&v34 == &v34, v32, (unsigned int)&v60);
- }
- for ( i = 0; i < 0x10; ++i )
- sub_40CEB0(*(&v53 + i));
- }
- else
- {
- v40 = 16;
- }
- LABEL_76:
- CrtCheckMemoryWrapperWrapper(v42);
- CrtCheckMemoryWrapperWrapper(v41);
- v6 = v40;
- }
- else
- {
- CrtCheckMemoryWrapperWrapper(v42);
- v6 = 13;
- }
- }
- else
- {
- v6 = 13;
- }
- return _chkesp(1, v6, v34);
- }
- // 43C1E0: using guessed type __int16 word_43C1E0;
- // 4417E8: using guessed type int (__cdecl *dword_4417E8)(_DWORD);
- // 4417F0: using guessed type int (__cdecl *dword_4417F0)(_DWORD);
- // 4417F8: using guessed type int (__cdecl *dword_4417F8)(_DWORD, _DWORD);
- // 441828: using guessed type int (__cdecl *dword_441828)(_DWORD);
- // 44182C: using guessed type int (__cdecl *dword_44182C)(_DWORD, _DWORD);
- // 441864: using guessed type int (__cdecl *dword_441864)(_DWORD, _DWORD, _DWORD, _DWORD);
- // 441870: using guessed type int (__cdecl *dword_441870)(_DWORD, _DWORD);
- // 441874: using guessed type int (__cdecl *dword_441874)(_DWORD, _DWORD);
- // 44187C: using guessed type int (__cdecl *dword_44187C)(_DWORD);
- // 44188C: using guessed type int (__cdecl *dword_44188C)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
- // 441890: using guessed type int (__cdecl *dword_441890)(_DWORD, _DWORD, _DWORD, _DWORD);
- //----- (00409960) --------------------------------------------------------
- int __cdecl sub_409960(int a1, int a2, int a3)
- {
- int v3; // eax@8
- int v4; // eax@9
- int v5; // eax@10
- int v6; // eax@11
- int v7; // eax@12
- int v8; // eax@13
- int v9; // eax@14
- int v10; // eax@15
- int v11; // eax@16
- int v12; // eax@17
- int v13; // eax@18
- int v14; // eax@19
- char v16; // [sp+0h] [bp-58h]@9
- char v17; // [sp+Ch] [bp-4Ch]@1
- int v18; // [sp+4Ch] [bp-Ch]@7
- int v19; // [sp+50h] [bp-8h]@7
- int v20; // [sp+54h] [bp-4h]@7
- int v21; // [sp+58h] [bp+0h]@9
- memset(&v17, -858993460, 0x4Cu);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"P != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_map.c",
- word_43C1E4 + 4);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"modulus != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_map.c",
- word_43C1E4 + 5);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"mp != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_map.c",
- word_43C1E4 + 6);
- v18 = sub_408490((int)&v20, (unsigned int)&v19);
- if ( v18 )
- {
- v3 = 13;
- }
- else
- {
- v4 = dword_441878(*(_DWORD *)(a1 + 8), a2, a3);
- v18 = _chkesp(&v16 == &v16, v4, (unsigned int)&v21);
- if ( !v18 )
- {
- v5 = dword_44186C(*(_DWORD *)(a1 + 8), a2, v20);
- v18 = _chkesp(&v16 == &v16, v5, (unsigned int)&v21);
- if ( !v18 )
- {
- v6 = dword_44184C(v20, v19);
- v18 = _chkesp(&v16 == &v16, v6, (unsigned int)&v21);
- if ( !v18 )
- {
- v7 = dword_441850(v19, a2, 0, v19);
- v18 = _chkesp(&v16 == &v16, v7, (unsigned int)&v21);
- if ( !v18 )
- {
- v8 = dword_441844(v20, v19, v20);
- v18 = _chkesp(&v16 == &v16, v8, (unsigned int)&v21);
- if ( !v18 )
- {
- v9 = dword_441850(v20, a2, 0, v20);
- v18 = _chkesp(&v16 == &v16, v9, (unsigned int)&v21);
- if ( !v18 )
- {
- v10 = dword_441844(*(_DWORD *)a1, v19, *(_DWORD *)a1);
- v18 = _chkesp(&v16 == &v16, v10, (unsigned int)&v21);
- if ( !v18 )
- {
- v11 = dword_441878(*(_DWORD *)a1, a2, a3);
- v18 = _chkesp(&v16 == &v16, v11, (unsigned int)&v21);
- if ( !v18 )
- {
- v12 = dword_441844(*(_DWORD *)(a1 + 4), v20, *(_DWORD *)(a1 + 4));
- v18 = _chkesp(&v16 == &v16, v12, (unsigned int)&v21);
- if ( !v18 )
- {
- v13 = dword_441878(*(_DWORD *)(a1 + 4), a2, a3);
- v18 = _chkesp(&v16 == &v16, v13, (unsigned int)&v21);
- if ( !v18 )
- {
- v14 = dword_4417FC(*(_DWORD *)(a1 + 8), 1);
- v18 = _chkesp(&v16 == &v16, v14, (unsigned int)&v21);
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- sub_408570(v20, v19);
- v3 = v18;
- }
- return _chkesp(1, v3, v16);
- }
- // 43C1E4: using guessed type __int16 word_43C1E4;
- // 4417FC: using guessed type int (__cdecl *dword_4417FC)(_DWORD, _DWORD);
- // 441844: using guessed type int (__cdecl *dword_441844)(_DWORD, _DWORD, _DWORD);
- // 44184C: using guessed type int (__cdecl *dword_44184C)(_DWORD, _DWORD);
- // 441850: using guessed type int (__cdecl *dword_441850)(_DWORD, _DWORD, _DWORD, _DWORD);
- // 44186C: using guessed type int (__cdecl *dword_44186C)(_DWORD, _DWORD, _DWORD);
- // 441878: using guessed type int (__cdecl *dword_441878)(_DWORD, _DWORD, _DWORD);
- //----- (00409C20) --------------------------------------------------------
- int __cdecl sub_409C20(int a1, int a2, int a3, int a4)
- {
- int v4; // eax@10
- int v5; // eax@12
- int v6; // eax@13
- int v7; // eax@14
- int v8; // eax@15
- int v9; // eax@16
- int v10; // eax@17
- int v11; // eax@18
- int v12; // eax@19
- int v13; // eax@20
- int v14; // eax@21
- int v15; // eax@22
- int v16; // eax@23
- int v17; // eax@24
- int v18; // eax@25
- int v19; // eax@26
- int v20; // eax@27
- int v21; // eax@28
- int v22; // eax@29
- int v23; // eax@30
- int v24; // eax@31
- int v25; // eax@32
- int v26; // eax@33
- int v27; // eax@34
- int v28; // eax@35
- int v29; // eax@36
- int v30; // eax@37
- int v31; // eax@38
- int v32; // eax@39
- int v33; // eax@40
- int v34; // eax@41
- int v35; // eax@42
- int v36; // eax@43
- int v37; // eax@44
- int v38; // eax@47
- int v39; // eax@48
- int v40; // eax@49
- int v41; // eax@50
- int v42; // eax@51
- int v43; // eax@52
- int v44; // eax@53
- int v45; // eax@54
- int v46; // eax@55
- int v47; // eax@56
- int v48; // eax@57
- int v49; // eax@58
- int v50; // eax@59
- int v51; // eax@60
- int v52; // eax@61
- int v53; // eax@62
- int v54; // eax@63
- int v55; // eax@64
- int v56; // eax@65
- int v57; // eax@66
- char v59; // [sp+0h] [bp-5Ch]@12
- char v60; // [sp+Ch] [bp-50h]@1
- int v61; // [sp+4Ch] [bp-10h]@44
- int v62; // [sp+50h] [bp-Ch]@9
- int v63; // [sp+54h] [bp-8h]@9
- int v64; // [sp+58h] [bp-4h]@9
- int v65; // [sp+5Ch] [bp+0h]@12
- memset(&v60, -858993460, 0x50u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"P != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_projective_dbl_point.c",
- word_43C1E8 + 4);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"R != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_projective_dbl_point.c",
- word_43C1E8 + 5);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"modulus != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_projective_dbl_point.c",
- word_43C1E8 + 6);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"mp != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_projective_dbl_point.c",
- word_43C1E8 + 7);
- v62 = sub_408490((int)&v64, (unsigned int)&v63);
- if ( v62 )
- {
- v4 = v62;
- }
- else
- {
- if ( a1 == a2
- || (v5 = dword_4417F8(*(_DWORD *)a1, *(_DWORD *)a2), (v62 = _chkesp(&v59 == &v59, v5, (unsigned int)&v65)) == 0)
- && (v6 = dword_4417F8(*(_DWORD *)(a1 + 4), *(_DWORD *)(a2 + 4)),
- (v62 = _chkesp(&v59 == &v59, v6, (unsigned int)&v65)) == 0)
- && (v7 = dword_4417F8(*(_DWORD *)(a1 + 8), *(_DWORD *)(a2 + 8)),
- (v62 = _chkesp(&v59 == &v59, v7, (unsigned int)&v65)) == 0) )
- {
- v8 = dword_44184C(*(_DWORD *)(a2 + 8), v64);
- v62 = _chkesp(&v59 == &v59, v8, (unsigned int)&v65);
- if ( !v62 )
- {
- v9 = dword_441878(v64, a3, a4);
- v62 = _chkesp(&v59 == &v59, v9, (unsigned int)&v65);
- if ( !v62 )
- {
- v10 = dword_441844(*(_DWORD *)(a2 + 8), *(_DWORD *)(a2 + 4), *(_DWORD *)(a2 + 8));
- v62 = _chkesp(&v59 == &v59, v10, (unsigned int)&v65);
- if ( !v62 )
- {
- v11 = dword_441878(*(_DWORD *)(a2 + 8), a3, a4);
- v62 = _chkesp(&v59 == &v59, v11, (unsigned int)&v65);
- if ( !v62 )
- {
- v12 = dword_441834(*(_DWORD *)(a2 + 8), *(_DWORD *)(a2 + 8), *(_DWORD *)(a2 + 8));
- v62 = _chkesp(&v59 == &v59, v12, (unsigned int)&v65);
- if ( !v62 )
- {
- v13 = dword_44180C(*(_DWORD *)(a2 + 8), a3);
- if ( _chkesp(&v59 == &v59, v13, (unsigned int)&v65) == -1
- || (v14 = dword_44183C(*(_DWORD *)(a2 + 8), a3, *(_DWORD *)(a2 + 8)),
- (v62 = _chkesp(&v59 == &v59, v14, (unsigned int)&v65)) == 0) )
- {
- v15 = dword_44183C(*(_DWORD *)a2, v64, v63);
- v62 = _chkesp(&v59 == &v59, v15, (unsigned int)&v65);
- if ( !v62 )
- {
- v16 = dword_441810(v63, 0);
- if ( _chkesp(&v59 == &v59, v16, (unsigned int)&v65) != -1
- || (v17 = dword_441834(v63, a3, v63), (v62 = _chkesp(&v59 == &v59, v17, (unsigned int)&v65)) == 0) )
- {
- v18 = dword_441834(v64, *(_DWORD *)a2, v64);
- v62 = _chkesp(&v59 == &v59, v18, (unsigned int)&v65);
- if ( !v62 )
- {
- v19 = dword_44180C(v64, a3);
- if ( _chkesp(&v59 == &v59, v19, (unsigned int)&v65) == -1
- || (v20 = dword_44183C(v64, a3, v64),
- (v62 = _chkesp(&v59 == &v59, v20, (unsigned int)&v65)) == 0) )
- {
- v21 = dword_441844(v64, v63, v63);
- v62 = _chkesp(&v59 == &v59, v21, (unsigned int)&v65);
- if ( !v62 )
- {
- v22 = dword_441878(v63, a3, a4);
- v62 = _chkesp(&v59 == &v59, v22, (unsigned int)&v65);
- if ( !v62 )
- {
- v23 = dword_441834(v63, v63, v64);
- v62 = _chkesp(&v59 == &v59, v23, (unsigned int)&v65);
- if ( !v62 )
- {
- v24 = dword_44180C(v64, a3);
- if ( _chkesp(&v59 == &v59, v24, (unsigned int)&v65) == -1
- || (v25 = dword_44183C(v64, a3, v64),
- (v62 = _chkesp(&v59 == &v59, v25, (unsigned int)&v65)) == 0) )
- {
- v26 = dword_441834(v64, v63, v64);
- v62 = _chkesp(&v59 == &v59, v26, (unsigned int)&v65);
- if ( !v62 )
- {
- v27 = dword_44180C(v64, a3);
- if ( _chkesp(&v59 == &v59, v27, (unsigned int)&v65) == -1
- || (v28 = dword_44183C(v64, a3, v64),
- (v62 = _chkesp(&v59 == &v59, v28, (unsigned int)&v65)) == 0) )
- {
- v29 = dword_441834(*(_DWORD *)(a2 + 4), *(_DWORD *)(a2 + 4), *(_DWORD *)(a2 + 4));
- v62 = _chkesp(&v59 == &v59, v29, (unsigned int)&v65);
- if ( !v62 )
- {
- v30 = dword_44180C(*(_DWORD *)(a2 + 4), a3);
- if ( _chkesp(&v59 == &v59, v30, (unsigned int)&v65) == -1
- || (v31 = dword_44183C(*(_DWORD *)(a2 + 4), a3, *(_DWORD *)(a2 + 4)),
- (v62 = _chkesp(&v59 == &v59, v31, (unsigned int)&v65)) == 0) )
- {
- v32 = dword_44184C(*(_DWORD *)(a2 + 4), *(_DWORD *)(a2 + 4));
- v62 = _chkesp(&v59 == &v59, v32, (unsigned int)&v65);
- if ( !v62 )
- {
- v33 = dword_441878(*(_DWORD *)(a2 + 4), a3, a4);
- v62 = _chkesp(&v59 == &v59, v33, (unsigned int)&v65);
- if ( !v62 )
- {
- v34 = dword_44184C(*(_DWORD *)(a2 + 4), v63);
- v62 = _chkesp(&v59 == &v59, v34, (unsigned int)&v65);
- if ( !v62 )
- {
- v35 = dword_441878(v63, a3, a4);
- v62 = _chkesp(&v59 == &v59, v35, (unsigned int)&v65);
- if ( !v62 )
- {
- v36 = dword_441808(v63);
- if ( _chkesp(&v59 == &v59, v36, (unsigned int)&v65) <= 0 )
- {
- v61 = 0;
- }
- else
- {
- v37 = dword_441804(v63, 0);
- v61 = (_chkesp(&v59 == &v59, v37, (unsigned int)&v65) & 1) != 0;
- }
- if ( !v61
- || (v38 = dword_441834(v63, a3, v63),
- (v62 = _chkesp(&v59 == &v59, v38, (unsigned int)&v65)) == 0) )
- {
- v39 = dword_441854(v63, v63);
- v62 = _chkesp(&v59 == &v59, v39, (unsigned int)&v65);
- if ( !v62 )
- {
- v40 = dword_441844(
- *(_DWORD *)(a2 + 4),
- *(_DWORD *)a2,
- *(_DWORD *)(a2 + 4));
- v62 = _chkesp(&v59 == &v59, v40, (unsigned int)&v65);
- if ( !v62 )
- {
- v41 = dword_441878(*(_DWORD *)(a2 + 4), a3, a4);
- v62 = _chkesp(&v59 == &v59, v41, (unsigned int)&v65);
- if ( !v62 )
- {
- v42 = dword_44184C(v64, *(_DWORD *)a2);
- v62 = _chkesp(&v59 == &v59, v42, (unsigned int)&v65);
- if ( !v62 )
- {
- v43 = dword_441878(*(_DWORD *)a2, a3, a4);
- v62 = _chkesp(&v59 == &v59, v43, (unsigned int)&v65);
- if ( !v62 )
- {
- v44 = dword_44183C(
- *(_DWORD *)a2,
- *(_DWORD *)(a2 + 4),
- *(_DWORD *)a2);
- v62 = _chkesp(&v59 == &v59, v44, (unsigned int)&v65);
- if ( !v62 )
- {
- v45 = dword_441810(*(_DWORD *)a2, 0);
- if ( _chkesp(&v59 == &v59, v45, (unsigned int)&v65) != -1
- || (v46 = dword_441834(
- *(_DWORD *)a2,
- a3,
- *(_DWORD *)a2),
- (v62 = _chkesp(
- &v59 == &v59,
- v46,
- (unsigned int)&v65)) == 0) )
- {
- v47 = dword_44183C(
- *(_DWORD *)a2,
- *(_DWORD *)(a2 + 4),
- *(_DWORD *)a2);
- v62 = _chkesp(&v59 == &v59, v47, (unsigned int)&v65);
- if ( !v62 )
- {
- v48 = dword_441810(*(_DWORD *)a2, 0);
- if ( _chkesp(&v59 == &v59, v48, (unsigned int)&v65) != -1
- || (v49 = dword_441834(
- *(_DWORD *)a2,
- a3,
- *(_DWORD *)a2),
- (v62 = _chkesp(
- &v59 == &v59,
- v49,
- (unsigned int)&v65)) == 0) )
- {
- v50 = dword_44183C(
- *(_DWORD *)(a2 + 4),
- *(_DWORD *)a2,
- *(_DWORD *)(a2 + 4));
- v62 = _chkesp(
- &v59 == &v59,
- v50,
- (unsigned int)&v65);
- if ( !v62 )
- {
- v51 = dword_441810(*(_DWORD *)(a2 + 4), 0);
- if ( _chkesp(
- &v59 == &v59,
- v51,
- (unsigned int)&v65) != -1
- || (v52 = dword_441834(
- *(_DWORD *)(a2 + 4),
- a3,
- *(_DWORD *)(a2 + 4)),
- (v62 = _chkesp(
- &v59 == &v59,
- v52,
- (unsigned int)&v65)) == 0) )
- {
- v53 = dword_441844(
- *(_DWORD *)(a2 + 4),
- v64,
- *(_DWORD *)(a2 + 4));
- v62 = _chkesp(
- &v59 == &v59,
- v53,
- (unsigned int)&v65);
- if ( !v62 )
- {
- v54 = dword_441878(
- *(_DWORD *)(a2 + 4),
- a3,
- a4);
- v62 = _chkesp(
- &v59 == &v59,
- v54,
- (unsigned int)&v65);
- if ( !v62 )
- {
- v55 = dword_44183C(
- *(_DWORD *)(a2 + 4),
- v63,
- *(_DWORD *)(a2 + 4));
- v62 = _chkesp(
- &v59 == &v59,
- v55,
- (unsigned int)&v65);
- if ( !v62 )
- {
- v56 = dword_441810(
- *(_DWORD *)(a2 + 4),
- 0);
- if ( _chkesp(
- &v59 == &v59,
- v56,
- (unsigned int)&v65) != -1
- || (v57 = dword_441834(
- *(_DWORD *)(a2 + 4),
- a3,
- *(_DWORD *)(a2 + 4)),
- (v62 = _chkesp(
- &v59 == &v59,
- v57,
- (unsigned int)&v65)) == 0) )
- v62 = 0;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- sub_408570(v64, v63);
- v4 = v62;
- }
- return _chkesp(1, v4, v59);
- }
- // 43C1E8: using guessed type __int16 word_43C1E8;
- // 4417F8: using guessed type int (__cdecl *dword_4417F8)(_DWORD, _DWORD);
- // 441804: using guessed type int (__cdecl *dword_441804)(_DWORD, _DWORD);
- // 441808: using guessed type int (__cdecl *dword_441808)(_DWORD);
- // 44180C: using guessed type int (__cdecl *dword_44180C)(_DWORD, _DWORD);
- // 441810: using guessed type int (__cdecl *dword_441810)(_DWORD, _DWORD);
- // 441834: using guessed type int (__cdecl *dword_441834)(_DWORD, _DWORD, _DWORD);
- // 44183C: using guessed type int (__cdecl *dword_44183C)(_DWORD, _DWORD, _DWORD);
- // 441844: using guessed type int (__cdecl *dword_441844)(_DWORD, _DWORD, _DWORD);
- // 44184C: using guessed type int (__cdecl *dword_44184C)(_DWORD, _DWORD);
- // 441854: using guessed type int (__cdecl *dword_441854)(_DWORD, _DWORD);
- // 441878: using guessed type int (__cdecl *dword_441878)(_DWORD, _DWORD, _DWORD);
- //----- (0040A630) --------------------------------------------------------
- int __cdecl sub_40A630(int a1, int a2, int a3, int a4, int a5)
- {
- int v5; // eax@12
- int v6; // eax@13
- int v7; // eax@14
- int v8; // eax@16
- int v9; // eax@17
- int v10; // eax@18
- int v11; // eax@20
- int v12; // eax@21
- int v13; // eax@22
- int v14; // eax@24
- int v15; // eax@25
- int v16; // eax@26
- int v17; // eax@27
- int v18; // eax@28
- int v19; // eax@29
- int v20; // eax@30
- int v21; // eax@31
- int v22; // eax@32
- int v23; // eax@33
- int v24; // eax@34
- int v25; // eax@35
- int v26; // eax@36
- int v27; // eax@37
- int v28; // eax@38
- int v29; // eax@39
- int v30; // eax@40
- int v31; // eax@41
- int v32; // eax@42
- int v33; // eax@43
- int v34; // eax@44
- int v35; // eax@45
- int v36; // eax@46
- int v37; // eax@47
- int v38; // eax@48
- int v39; // eax@49
- int v40; // eax@50
- int v41; // eax@51
- int v42; // eax@52
- int v43; // eax@53
- int v44; // eax@54
- int v45; // eax@55
- int v46; // eax@56
- int v47; // eax@57
- int v48; // eax@59
- int v49; // eax@60
- int v50; // eax@61
- int v51; // eax@62
- int v52; // eax@63
- int v53; // eax@64
- int v54; // eax@65
- int v55; // eax@66
- int v56; // eax@67
- int v57; // eax@68
- int v58; // eax@69
- int v59; // eax@70
- int v60; // eax@71
- int v61; // eax@72
- int v62; // eax@73
- int v63; // eax@74
- int v64; // eax@75
- int v65; // eax@76
- int v66; // eax@77
- int v67; // eax@78
- int v68; // eax@79
- int v69; // eax@80
- int v70; // eax@81
- int v71; // eax@82
- int v72; // eax@83
- int v73; // eax@84
- int v74; // eax@85
- int v75; // eax@86
- int v76; // eax@87
- int v77; // eax@88
- int v78; // eax@91
- int v79; // eax@92
- int v80; // eax@93
- int v81; // eax@94
- int v82; // eax@95
- char v84; // [sp+0h] [bp-68h]@13
- char v85; // [sp+Ch] [bp-5Ch]@1
- int v86; // [sp+4Ch] [bp-1Ch]@88
- int v87; // [sp+50h] [bp-18h]@11
- int v88; // [sp+54h] [bp-14h]@22
- int v89; // [sp+58h] [bp-10h]@21
- int v90; // [sp+5Ch] [bp-Ch]@20
- int v91; // [sp+60h] [bp-8h]@11
- int v92; // [sp+64h] [bp-4h]@11
- int v93; // [sp+68h] [bp+0h]@13
- memset(&v85, -858993460, 0x5Cu);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"P != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_projective_add_point.c",
- word_43C1EC + 4);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"Q != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_projective_add_point.c",
- word_43C1EC + 5);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"R != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_projective_add_point.c",
- word_43C1EC + 6);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"modulus != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_projective_add_point.c",
- word_43C1EC + 7);
- if ( !a5 )
- errorFunctionMaybe(
- (int)"mp != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_projective_add_point.c",
- word_43C1EC + 8);
- v87 = sub_408490((int)&v92, (unsigned int)&v91);
- if ( !v87 )
- {
- v6 = dword_44183C(a4, *(_DWORD *)(a2 + 4), v92);
- v87 = _chkesp(&v84 == &v84, v6, (unsigned int)&v93);
- if ( !v87 )
- {
- v7 = dword_44180C(*(_DWORD *)a1, *(_DWORD *)a2);
- if ( !_chkesp(&v84 == &v84, v7, (unsigned int)&v93) )
- {
- if ( *(_DWORD *)(a2 + 8) )
- {
- v8 = dword_44180C(*(_DWORD *)(a1 + 8), *(_DWORD *)(a2 + 8));
- if ( !_chkesp(&v84 == &v84, v8, (unsigned int)&v93) )
- {
- v9 = dword_44180C(*(_DWORD *)(a1 + 4), *(_DWORD *)(a2 + 4));
- if ( !_chkesp(&v84 == &v84, v9, (unsigned int)&v93)
- || (v10 = dword_44180C(*(_DWORD *)(a1 + 4), v92), !_chkesp(&v84 == &v84, v10, (unsigned int)&v93)) )
- {
- sub_408570(v92, v91);
- v5 = sub_409C20(a1, a3, a4, a5);
- return _chkesp(1, v5, v84);
- }
- }
- }
- }
- v11 = dword_4417F8(*(_DWORD *)a1, v90);
- v87 = _chkesp(&v84 == &v84, v11, (unsigned int)&v93);
- if ( !v87 )
- {
- v12 = dword_4417F8(*(_DWORD *)(a1 + 4), v89);
- v87 = _chkesp(&v84 == &v84, v12, (unsigned int)&v93);
- if ( !v87 )
- {
- v13 = dword_4417F8(*(_DWORD *)(a1 + 8), v88);
- v87 = _chkesp(&v84 == &v84, v13, (unsigned int)&v93);
- if ( !v87 )
- {
- if ( !*(_DWORD *)(a2 + 8)
- || (v14 = dword_44184C(*(_DWORD *)(a2 + 8), v92),
- (v87 = _chkesp(&v84 == &v84, v14, (unsigned int)&v93)) == 0)
- && (v15 = dword_441878(v92, a4, a5), (v87 = _chkesp(&v84 == &v84, v15, (unsigned int)&v93)) == 0)
- && (v16 = dword_441844(v92, v90, v90), (v87 = _chkesp(&v84 == &v84, v16, (unsigned int)&v93)) == 0)
- && (v17 = dword_441878(v90, a4, a5), (v87 = _chkesp(&v84 == &v84, v17, (unsigned int)&v93)) == 0)
- && (v18 = dword_441844(*(_DWORD *)(a2 + 8), v92, v92),
- (v87 = _chkesp(&v84 == &v84, v18, (unsigned int)&v93)) == 0)
- && (v19 = dword_441878(v92, a4, a5), (v87 = _chkesp(&v84 == &v84, v19, (unsigned int)&v93)) == 0)
- && (v20 = dword_441844(v92, v89, v89), (v87 = _chkesp(&v84 == &v84, v20, (unsigned int)&v93)) == 0)
- && (v21 = dword_441878(v89, a4, a5), (v87 = _chkesp(&v84 == &v84, v21, (unsigned int)&v93)) == 0) )
- {
- v22 = dword_44184C(v88, v92);
- v87 = _chkesp(&v84 == &v84, v22, (unsigned int)&v93);
- if ( !v87 )
- {
- v23 = dword_441878(v92, a4, a5);
- v87 = _chkesp(&v84 == &v84, v23, (unsigned int)&v93);
- if ( !v87 )
- {
- v24 = dword_441844(*(_DWORD *)a2, v92, v91);
- v87 = _chkesp(&v84 == &v84, v24, (unsigned int)&v93);
- if ( !v87 )
- {
- v25 = dword_441878(v91, a4, a5);
- v87 = _chkesp(&v84 == &v84, v25, (unsigned int)&v93);
- if ( !v87 )
- {
- v26 = dword_441844(v88, v92, v92);
- v87 = _chkesp(&v84 == &v84, v26, (unsigned int)&v93);
- if ( !v87 )
- {
- v27 = dword_441878(v92, a4, a5);
- v87 = _chkesp(&v84 == &v84, v27, (unsigned int)&v93);
- if ( !v87 )
- {
- v28 = dword_441844(*(_DWORD *)(a2 + 4), v92, v92);
- v87 = _chkesp(&v84 == &v84, v28, (unsigned int)&v93);
- if ( !v87 )
- {
- v29 = dword_441878(v92, a4, a5);
- v87 = _chkesp(&v84 == &v84, v29, (unsigned int)&v93);
- if ( !v87 )
- {
- v30 = dword_44183C(v89, v92, v89);
- v87 = _chkesp(&v84 == &v84, v30, (unsigned int)&v93);
- if ( !v87 )
- {
- v31 = dword_441810(v89, 0);
- if ( _chkesp(&v84 == &v84, v31, (unsigned int)&v93) != -1
- || (v32 = dword_441834(v89, a4, v89),
- (v87 = _chkesp(&v84 == &v84, v32, (unsigned int)&v93)) == 0) )
- {
- v33 = dword_441834(v92, v92, v92);
- v87 = _chkesp(&v84 == &v84, v33, (unsigned int)&v93);
- if ( !v87 )
- {
- v34 = dword_44180C(v92, a4);
- if ( _chkesp(&v84 == &v84, v34, (unsigned int)&v93) == -1
- || (v35 = dword_44183C(v92, a4, v92),
- (v87 = _chkesp(&v84 == &v84, v35, (unsigned int)&v93)) == 0) )
- {
- v36 = dword_441834(v92, v89, v92);
- v87 = _chkesp(&v84 == &v84, v36, (unsigned int)&v93);
- if ( !v87 )
- {
- v37 = dword_44180C(v92, a4);
- if ( _chkesp(&v84 == &v84, v37, (unsigned int)&v93) == -1
- || (v38 = dword_44183C(v92, a4, v92),
- (v87 = _chkesp(&v84 == &v84, v38, (unsigned int)&v93)) == 0) )
- {
- v39 = dword_44183C(v90, v91, v90);
- v87 = _chkesp(&v84 == &v84, v39, (unsigned int)&v93);
- if ( !v87 )
- {
- v40 = dword_441810(v90, 0);
- if ( _chkesp(&v84 == &v84, v40, (unsigned int)&v93) != -1
- || (v41 = dword_441834(v90, a4, v90),
- (v87 = _chkesp(&v84 == &v84, v41, (unsigned int)&v93)) == 0) )
- {
- v42 = dword_441834(v91, v91, v91);
- v87 = _chkesp(&v84 == &v84, v42, (unsigned int)&v93);
- if ( !v87 )
- {
- v43 = dword_44180C(v91, a4);
- if ( _chkesp(&v84 == &v84, v43, (unsigned int)&v93) == -1
- || (v44 = dword_44183C(v91, a4, v91),
- (v87 = _chkesp(&v84 == &v84, v44, (unsigned int)&v93)) == 0) )
- {
- v45 = dword_441834(v91, v90, v91);
- v87 = _chkesp(&v84 == &v84, v45, (unsigned int)&v93);
- if ( !v87 )
- {
- v46 = dword_44180C(v91, a4);
- if ( _chkesp(&v84 == &v84, v46, (unsigned int)&v93) == -1
- || (v47 = dword_44183C(v91, a4, v91),
- (v87 = _chkesp(&v84 == &v84, v47, (unsigned int)&v93)) == 0) )
- {
- if ( !*(_DWORD *)(a2 + 8)
- || (v48 = dword_441844(v88, *(_DWORD *)(a2 + 8), v88),
- (v87 = _chkesp(&v84 == &v84, v48, (unsigned int)&v93)) == 0)
- && (v49 = dword_441878(v88, a4, a5),
- (v87 = _chkesp(&v84 == &v84, v49, (unsigned int)&v93)) == 0) )
- {
- v50 = dword_441844(v88, v90, v88);
- v87 = _chkesp(&v84 == &v84, v50, (unsigned int)&v93);
- if ( !v87 )
- {
- v51 = dword_441878(v88, a4, a5);
- v87 = _chkesp(&v84 == &v84, v51, (unsigned int)&v93);
- if ( !v87 )
- {
- v52 = dword_441844(v92, v90, v92);
- v87 = _chkesp(&v84 == &v84, v52, (unsigned int)&v93);
- if ( !v87 )
- {
- v53 = dword_441878(v92, a4, a5);
- v87 = _chkesp(&v84 == &v84, v53, (unsigned int)&v93);
- if ( !v87 )
- {
- v54 = dword_44184C(v90, v90);
- v87 = _chkesp(&v84 == &v84, v54, (unsigned int)&v93);
- if ( !v87 )
- {
- v55 = dword_441878(v90, a4, a5);
- v87 = _chkesp(&v84 == &v84, v55, (unsigned int)&v93);
- if ( !v87 )
- {
- v56 = dword_441844(v91, v90, v91);
- v87 = _chkesp(&v84 == &v84, v56, (unsigned int)&v93);
- if ( !v87 )
- {
- v57 = dword_441878(v91, a4, a5);
- v87 = _chkesp(
- &v84 == &v84,
- v57,
- (unsigned int)&v93);
- if ( !v87 )
- {
- v58 = dword_441844(v92, v90, v92);
- v87 = _chkesp(
- &v84 == &v84,
- v58,
- (unsigned int)&v93);
- if ( !v87 )
- {
- v59 = dword_441878(v92, a4, a5);
- v87 = _chkesp(
- &v84 == &v84,
- v59,
- (unsigned int)&v93);
- if ( !v87 )
- {
- v60 = dword_44184C(v89, v90);
- v87 = _chkesp(
- &v84 == &v84,
- v60,
- (unsigned int)&v93);
- if ( !v87 )
- {
- v61 = dword_441878(v90, a4, a5);
- v87 = _chkesp(
- &v84 == &v84,
- v61,
- (unsigned int)&v93);
- if ( !v87 )
- {
- v62 = dword_44183C(v90, v91, v90);
- v87 = _chkesp(
- &v84 == &v84,
- v62,
- (unsigned int)&v93);
- if ( !v87 )
- {
- v63 = dword_441810(v90, 0);
- if ( _chkesp(
- &v84 == &v84,
- v63,
- (unsigned int)&v93) != -1
- || (v64 = dword_441834(v90, a4, v90),
- (v87 = _chkesp(
- &v84 == &v84,
- v64,
- (unsigned int)&v93)) == 0) )
- {
- v65 = dword_44183C(v91, v90, v91);
- v87 = _chkesp(
- &v84 == &v84,
- v65,
- (unsigned int)&v93);
- if ( !v87 )
- {
- v66 = dword_441810(v91, 0);
- if ( _chkesp(
- &v84 == &v84,
- v66,
- (unsigned int)&v93) != -1
- || (v67 = dword_441834(
- v91,
- a4,
- v91),
- (v87 = _chkesp(
- &v84 == &v84,
- v67,
- (unsigned int)&v93)) == 0) )
- {
- v68 = dword_44183C(
- v91,
- v90,
- v91);
- v87 = _chkesp(
- &v84 == &v84,
- v68,
- (unsigned int)&v93);
- if ( !v87 )
- {
- v69 = dword_441810(v91, 0);
- if ( _chkesp(
- &v84 == &v84,
- v69,
- (unsigned int)&v93) != -1
- || (v70 = dword_441834(v91, a4, v91),
- (v87 = _chkesp(&v84 == &v84, v70, (unsigned int)&v93)) == 0) )
- {
- v71 = dword_441844(
- v91,
- v89,
- v91);
- v87 = _chkesp(
- &v84 == &v84,
- v71,
- (unsigned int)&v93);
- if ( !v87 )
- {
- v72 = dword_441878(v91, a4, a5);
- v87 = _chkesp(&v84 == &v84, v72, (unsigned int)&v93);
- if ( !v87 )
- {
- v73 = dword_44183C(v91, v92, v89);
- v87 = _chkesp(&v84 == &v84, v73, (unsigned int)&v93);
- if ( !v87 )
- {
- v74 = dword_441810(v89, 0);
- if ( _chkesp(&v84 == &v84, v74, (unsigned int)&v93) != -1 || (v75 = dword_441834(v89, a4, v89), (v87 = _chkesp(&v84 == &v84, v75, (unsigned int)&v93)) == 0) )
- {
- v76 = dword_441808(v89);
- if ( _chkesp(&v84 == &v84, v76, (unsigned int)&v93) <= 0 )
- {
- v86 = 0;
- }
- else
- {
- v77 = dword_441804(v89, 0);
- v86 = (_chkesp(&v84 == &v84, v77, (unsigned int)&v93) & 1) != 0;
- }
- if ( !v86 || (v78 = dword_441834(v89, a4, v89), (v87 = _chkesp(&v84 == &v84, v78, (unsigned int)&v93)) == 0) )
- {
- v79 = dword_441854(v89, v89);
- v87 = _chkesp(&v84 == &v84, v79, (unsigned int)&v93);
- if ( !v87 )
- {
- v80 = dword_4417F8(v90, *(_DWORD *)a3);
- v87 = _chkesp(&v84 == &v84, v80, (unsigned int)&v93);
- if ( !v87 )
- {
- v81 = dword_4417F8(v89, *(_DWORD *)(a3 + 4));
- v87 = _chkesp(&v84 == &v84, v81, (unsigned int)&v93);
- if ( !v87 )
- {
- v82 = dword_4417F8(v88, *(_DWORD *)(a3 + 8));
- v87 = _chkesp(&v84 == &v84, v82, (unsigned int)&v93);
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- sub_408570(v92, v91);
- v5 = v87;
- return _chkesp(1, v5, v84);
- }
- v5 = v87;
- return _chkesp(1, v5, v84);
- }
- // 43C1EC: using guessed type __int16 word_43C1EC;
- // 4417F8: using guessed type int (__cdecl *dword_4417F8)(_DWORD, _DWORD);
- // 441804: using guessed type int (__cdecl *dword_441804)(_DWORD, _DWORD);
- // 441808: using guessed type int (__cdecl *dword_441808)(_DWORD);
- // 44180C: using guessed type int (__cdecl *dword_44180C)(_DWORD, _DWORD);
- // 441810: using guessed type int (__cdecl *dword_441810)(_DWORD, _DWORD);
- // 441834: using guessed type int (__cdecl *dword_441834)(_DWORD, _DWORD, _DWORD);
- // 44183C: using guessed type int (__cdecl *dword_44183C)(_DWORD, _DWORD, _DWORD);
- // 441844: using guessed type int (__cdecl *dword_441844)(_DWORD, _DWORD, _DWORD);
- // 44184C: using guessed type int (__cdecl *dword_44184C)(_DWORD, _DWORD);
- // 441854: using guessed type int (__cdecl *dword_441854)(_DWORD, _DWORD);
- // 441878: using guessed type int (__cdecl *dword_441878)(_DWORD, _DWORD, _DWORD);
- //----- (0040B430) --------------------------------------------------------
- int __cdecl sub_40B430(int a1, int a2, int a3, int a4, int a5)
- {
- int v5; // eax@9
- int v6; // eax@10
- int v7; // eax@11
- int v8; // eax@12
- int v9; // eax@13
- int v10; // eax@14
- int v11; // eax@14
- int v12; // eax@21
- int v13; // eax@21
- int v14; // eax@25
- int v15; // eax@26
- int v16; // eax@27
- int v17; // eax@28
- int v18; // eax@30
- int v19; // eax@31
- int v20; // eax@32
- int v21; // eax@33
- int v22; // eax@33
- int v23; // eax@34
- int v24; // eax@35
- int v25; // eax@38
- int v26; // eax@40
- int v27; // eax@43
- int v28; // eax@48
- int v29; // eax@52
- int v30; // eax@53
- int v31; // eax@54
- int v32; // eax@58
- int v33; // eax@60
- int v34; // eax@68
- int v35; // eax@71
- int v36; // eax@72
- int v37; // eax@73
- int v38; // eax@75
- int v39; // eax@81
- int v40; // eax@82
- char v42; // [sp+0h] [bp-A0h]@9
- char v43; // [sp+Ch] [bp-94h]@1
- int v44; // [sp+4Ch] [bp-54h]@40
- int v45; // [sp+50h] [bp-50h]@40
- int v46; // [sp+54h] [bp-4Ch]@40
- int v47; // [sp+58h] [bp-48h]@38
- int v48; // [sp+5Ch] [bp-44h]@38
- int v49; // [sp+60h] [bp-40h]@40
- int v50; // [sp+64h] [bp-3Ch]@40
- int v51; // [sp+68h] [bp-38h]@9
- int v52; // [sp+6Ch] [bp-34h]@11
- int v53; // [sp+70h] [bp-30h]@9
- int j; // [sp+74h] [bp-2Ch]@18
- unsigned int i; // [sp+78h] [bp-28h]@15
- int v56[8]; // [sp+7Ch] [bp-24h]@17
- int v57; // [sp+9Ch] [bp-4h]@23
- int v58; // [sp+A0h] [bp+0h]@9
- memset(&v43, -858993460, 0x94u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"k != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_mulmod.c",
- word_43C1F0 + 7);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"G != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_mulmod.c",
- word_43C1F0 + 8);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"R != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_mulmod.c",
- word_43C1F0 + 9);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"modulus != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ltc_ecc_mulmod.c",
- word_43C1F0 + 10);
- v5 = dword_441870(a4, &v51);
- v53 = _chkesp(&v42 == &v42, v5, (unsigned int)&v58);
- if ( v53 )
- {
- v6 = v53;
- return _chkesp(1, v6, v42);
- }
- v7 = dword_4417E8(&v52);
- v53 = _chkesp(&v42 == &v42, v7, (unsigned int)&v58);
- if ( v53 )
- {
- v8 = dword_44187C(v51);
- _chkesp(&v42 == &v42, v8, (unsigned int)&v58);
- v6 = v53;
- return _chkesp(1, v6, v42);
- }
- v9 = dword_441874(v52, a4);
- v53 = _chkesp(&v42 == &v42, v9, (unsigned int)&v58);
- if ( v53 )
- {
- v10 = dword_44187C(v51);
- _chkesp(&v42 == &v42, v10, (unsigned int)&v58);
- v11 = dword_4417F0(v52);
- _chkesp(&v42 == &v42, v11, (unsigned int)&v58);
- v6 = v53;
- return _chkesp(1, v6, v42);
- }
- for ( i = 0; (signed int)i < 8; ++i )
- {
- v56[i] = sub_40CE30();
- if ( !v56[i] )
- {
- for ( j = 0; j < (signed int)i; ++j )
- sub_40CEB0(v56[j]);
- v12 = dword_44187C(v51);
- _chkesp(&v42 == &v42, v12, (unsigned int)&v58);
- v13 = dword_4417F0(v52);
- _chkesp(&v42 == &v42, v13, (unsigned int)&v58);
- v6 = 13;
- return _chkesp(1, v6, v42);
- }
- }
- v57 = sub_40CE30();
- if ( !v57 )
- {
- v53 = 13;
- goto LABEL_80;
- }
- v14 = dword_441810(v52, 1);
- if ( _chkesp(&v42 == &v42, v14, (unsigned int)&v58) )
- {
- v18 = dword_441864(*(_DWORD *)a2, v52, a4, *(_DWORD *)v57);
- v53 = _chkesp(&v42 == &v42, v18, (unsigned int)&v58);
- if ( v53
- || (v19 = dword_441864(*(_DWORD *)(a2 + 4), v52, a4, *(_DWORD *)(v57 + 4)),
- (v53 = _chkesp(&v42 == &v42, v19, (unsigned int)&v58)) != 0)
- || (v20 = dword_441864(*(_DWORD *)(a2 + 8), v52, a4, *(_DWORD *)(v57 + 8)),
- (v53 = _chkesp(&v42 == &v42, v20, (unsigned int)&v58)) != 0) )
- goto LABEL_80;
- }
- else
- {
- v15 = dword_4417F8(*(_DWORD *)a2, *(_DWORD *)v57);
- v53 = _chkesp(&v42 == &v42, v15, (unsigned int)&v58);
- if ( v53
- || (v16 = dword_4417F8(*(_DWORD *)(a2 + 4), *(_DWORD *)(v57 + 4)),
- (v53 = _chkesp(&v42 == &v42, v16, (unsigned int)&v58)) != 0)
- || (v17 = dword_4417F8(*(_DWORD *)(a2 + 8), *(_DWORD *)(v57 + 8)),
- (v53 = _chkesp(&v42 == &v42, v17, (unsigned int)&v58)) != 0) )
- goto LABEL_80;
- }
- v21 = dword_4417F0(v52);
- _chkesp(&v42 == &v42, v21, (unsigned int)&v58);
- v52 = 0;
- v22 = dword_441890(v57, v56[0], a4, v51);
- v53 = _chkesp(&v42 == &v42, v22, (unsigned int)&v58);
- if ( v53
- || (v23 = dword_441890(v56[0], v56[0], a4, v51), (v53 = _chkesp(&v42 == &v42, v23, (unsigned int)&v58)) != 0)
- || (v24 = dword_441890(v56[0], v56[0], a4, v51), (v53 = _chkesp(&v42 == &v42, v24, (unsigned int)&v58)) != 0) )
- goto LABEL_80;
- for ( j = 9; j < 16; ++j )
- {
- v25 = dword_44188C(*(&v47 + j), v57, *(&v48 + j), a4, v51);
- v53 = _chkesp(&v42 == &v42, v25, (unsigned int)&v58);
- if ( v53 )
- goto LABEL_80;
- }
- v45 = 0;
- v46 = 1;
- v50 = 0;
- v26 = dword_441808(a1);
- v44 = _chkesp(&v42 == &v42, v26, (unsigned int)&v58) - 1;
- v48 = 0;
- v47 = 0;
- v49 = 1;
- while ( 1 )
- {
- --v46;
- if ( v46 )
- goto LABEL_44;
- if ( v44 == -1 )
- break;
- v27 = dword_441804(a1, v44);
- v50 = _chkesp(&v42 == &v42, v27, (unsigned int)&v58);
- v46 = dword_4417E4;
- --v44;
- LABEL_44:
- i = ((unsigned int)v50 >> (dword_4417E4 - 1)) & 1;
- v50 *= 2;
- if ( v45 || i )
- {
- if ( v45 != 1 || i )
- {
- ++v47;
- v48 |= i << (4 - v47);
- v45 = 2;
- if ( v47 == 4 )
- {
- if ( v49 == 1 )
- {
- v29 = dword_4417F8(*(_DWORD *)*(&v48 + v48), *(_DWORD *)a3);
- v53 = _chkesp(&v42 == &v42, v29, (unsigned int)&v58);
- if ( v53
- || (v30 = dword_4417F8(*(_DWORD *)(*(&v48 + v48) + 4), *(_DWORD *)(a3 + 4)),
- (v53 = _chkesp(&v42 == &v42, v30, (unsigned int)&v58)) != 0)
- || (v31 = dword_4417F8(*(_DWORD *)(*(&v48 + v48) + 8), *(_DWORD *)(a3 + 8)),
- (v53 = _chkesp(&v42 == &v42, v31, (unsigned int)&v58)) != 0) )
- goto LABEL_80;
- v49 = 0;
- }
- else
- {
- for ( j = 0; j < 4; ++j )
- {
- v32 = dword_441890(a3, a3, a4, v51);
- v53 = _chkesp(&v42 == &v42, v32, (unsigned int)&v58);
- if ( v53 )
- goto LABEL_80;
- }
- v33 = dword_44188C(a3, *(&v48 + v48), a3, a4, v51);
- v53 = _chkesp(&v42 == &v42, v33, (unsigned int)&v58);
- if ( v53 )
- goto LABEL_80;
- }
- v48 = 0;
- v47 = 0;
- v45 = 1;
- }
- }
- else
- {
- v28 = dword_441890(a3, a3, a4, v51);
- v53 = _chkesp(&v42 == &v42, v28, (unsigned int)&v58);
- if ( v53 )
- goto LABEL_80;
- }
- }
- }
- if ( v45 == 2 && v47 > 0 )
- {
- for ( j = 0; j < v47; ++j )
- {
- if ( !v49 )
- {
- v34 = dword_441890(a3, a3, a4, v51);
- v53 = _chkesp(&v42 == &v42, v34, (unsigned int)&v58);
- if ( v53 )
- goto LABEL_80;
- }
- v48 *= 2;
- if ( v48 & 0x10 )
- {
- if ( v49 == 1 )
- {
- v35 = dword_4417F8(*(_DWORD *)v57, *(_DWORD *)a3);
- v53 = _chkesp(&v42 == &v42, v35, (unsigned int)&v58);
- if ( v53
- || (v36 = dword_4417F8(*(_DWORD *)(v57 + 4), *(_DWORD *)(a3 + 4)),
- (v53 = _chkesp(&v42 == &v42, v36, (unsigned int)&v58)) != 0)
- || (v37 = dword_4417F8(*(_DWORD *)(v57 + 8), *(_DWORD *)(a3 + 8)),
- (v53 = _chkesp(&v42 == &v42, v37, (unsigned int)&v58)) != 0) )
- goto LABEL_80;
- v49 = 0;
- }
- else
- {
- v38 = dword_44188C(a3, v57, a3, a4, v51);
- v53 = _chkesp(&v42 == &v42, v38, (unsigned int)&v58);
- if ( v53 )
- goto LABEL_80;
- }
- }
- }
- }
- if ( a5 )
- v53 = sub_409960(a3, a4, v51);
- else
- v53 = 0;
- LABEL_80:
- if ( v52 )
- {
- v39 = dword_4417F0(v52);
- _chkesp(&v42 == &v42, v39, (unsigned int)&v58);
- }
- v40 = dword_44187C(v51);
- _chkesp(&v42 == &v42, v40, (unsigned int)&v58);
- sub_40CEB0(v57);
- for ( i = 0; (signed int)i < 8; ++i )
- sub_40CEB0(v56[i]);
- v6 = v53;
- return _chkesp(1, v6, v42);
- }
- // 43C1F0: using guessed type __int16 word_43C1F0;
- // 4417E4: using guessed type int dword_4417E4;
- // 4417E8: using guessed type int (__cdecl *dword_4417E8)(_DWORD);
- // 4417F0: using guessed type int (__cdecl *dword_4417F0)(_DWORD);
- // 4417F8: using guessed type int (__cdecl *dword_4417F8)(_DWORD, _DWORD);
- // 441804: using guessed type int (__cdecl *dword_441804)(_DWORD, _DWORD);
- // 441808: using guessed type int (__cdecl *dword_441808)(_DWORD);
- // 441810: using guessed type int (__cdecl *dword_441810)(_DWORD, _DWORD);
- // 441864: using guessed type int (__cdecl *dword_441864)(_DWORD, _DWORD, _DWORD, _DWORD);
- // 441870: using guessed type int (__cdecl *dword_441870)(_DWORD, _DWORD);
- // 441874: using guessed type int (__cdecl *dword_441874)(_DWORD, _DWORD);
- // 44187C: using guessed type int (__cdecl *dword_44187C)(_DWORD);
- // 44188C: using guessed type int (__cdecl *dword_44188C)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
- // 441890: using guessed type int (__cdecl *dword_441890)(_DWORD, _DWORD, _DWORD, _DWORD);
- // 40B430: using guessed type _DWORD var_24[8];
- //----- (0040BD00) --------------------------------------------------------
- signed int __cdecl sub_40BD00(signed int a1)
- {
- signed int result; // eax@4
- char v2; // [sp+Ch] [bp-40h]@1
- memset(&v2, -858993460, 0x40u);
- if ( a1 >= 0 && a1 < 32 && dword_43F6C8[24 * a1] )
- result = 0;
- else
- result = 10;
- return result;
- }
- // 43F6C8: using guessed type int dword_43F6C8[];
- //----- (0040BD50) --------------------------------------------------------
- int __cdecl sub_40BD50(int a1, int a2)
- {
- int v2; // edx@3
- int v3; // eax@3
- char v5; // [sp+0h] [bp-50h]@0
- char v6; // [sp+Ch] [bp-44h]@1
- int v7; // [sp+4Ch] [bp-4h]@1
- memset(&v6, -858993460, 0x44u);
- v7 = a1;
- if ( !a1 )
- errorFunctionMaybe(
- (int)"out != ((void *)0)",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\misc\\zeromem.c",
- word_43C1F4 + 2);
- while ( 1 )
- {
- v2 = a2;
- v3 = a2-- - 1;
- if ( !v2 )
- break;
- *(_BYTE *)v7++ = 0;
- }
- return _chkesp(1, v3, v5);
- }
- // 43C1F4: using guessed type __int16 word_43C1F4;
- //----- (0040BDD0) --------------------------------------------------------
- int __cdecl tomcrypt_hash_memory(signed int a1, int a2, int a3, int a4, int a5)
- {
- int v5; // eax@8
- int v6; // eax@13
- int v7; // eax@14
- int v8; // eax@15
- char v10; // [sp+0h] [bp-54h]@13
- char v11; // [sp+Ch] [bp-48h]@1
- int v12; // [sp+4Ch] [bp-8h]@7
- int v13; // [sp+50h] [bp-4h]@11
- int v14; // [sp+54h] [bp+0h]@13
- memset(&v11, -858993460, 0x48u);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\hashes\\helper\\hash_memory.c",
- word_43C1F8 + 4);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"out != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\hashes\\helper\\hash_memory.c",
- word_43C1F8 + 5);
- if ( !a5 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\hashes\\helper\\hash_memory.c",
- word_43C1F8 + 6);
- v12 = tomcrypt_hash_is_valid(a1);
- if ( v12 )
- {
- v5 = v12;
- }
- else
- {
- if ( *(_DWORD *)a5 >= (unsigned int)dword_4402D0[26 * a1] )
- {
- v13 = (int)malloc(0x110u);
- if ( v13 )
- {
- v6 = ((int (__cdecl *)(int))dword_44031C[26 * a1])(v13);
- v12 = _chkesp(&v10 == &v10, v6, (unsigned int)&v14);
- if ( !v12 )
- {
- v7 = ((int (__cdecl *)(int, int, int))dword_440320[26 * a1])(v13, a2, a3);
- v12 = _chkesp(&v10 == &v10, v7, (unsigned int)&v14);
- if ( !v12 )
- {
- v8 = ((int (__cdecl *)(int, int))dword_440324[26 * a1])(v13, a4);
- v12 = _chkesp(&v10 == &v10, v8, (unsigned int)&v14);
- *(_DWORD *)a5 = dword_4402D0[26 * a1];
- }
- }
- CrtCheckMemoryWrapperWrapper(v13);
- v5 = v12;
- }
- else
- {
- v5 = 13;
- }
- }
- else
- {
- *(_DWORD *)a5 = dword_4402D0[26 * a1];
- v5 = 6;
- }
- }
- return _chkesp(1, v5, v10);
- }
- // 43C1F8: using guessed type __int16 word_43C1F8;
- // 4402D0: using guessed type int dword_4402D0[];
- // 44031C: using guessed type int dword_44031C[];
- // 440320: using guessed type int dword_440320[];
- // 440324: using guessed type int dword_440324[];
- //----- (0040BF70) --------------------------------------------------------
- int __cdecl tomcrypt_ecc_free(int a1)
- {
- int v1; // eax@3
- char v3; // [sp+0h] [bp-4Ch]@0
- char v4; // [sp+Ch] [bp-40h]@1
- memset(&v4, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"key != ((void *)0)",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ecc_free.c",
- word_43C1FC + 1);
- v1 = sub_408570(*(_DWORD *)(a1 + 12), *(_DWORD *)(a1 + 16));
- return _chkesp(1, v1, v3);
- }
- // 43C1FC: using guessed type __int16 word_43C1FC;
- //----- (0040BFF0) --------------------------------------------------------
- int __cdecl tomcrypt_ecc_shared_secret(int a1, int a2, int a3, int a4)
- {
- int v4; // eax@10
- int v5; // eax@11
- int v6; // eax@12
- int v7; // eax@18
- int v8; // eax@20
- int v9; // eax@21
- int v10; // eax@22
- int v11; // eax@24
- int v12; // eax@24
- int v13; // eax@24
- int v14; // eax@25
- char v16; // [sp+0h] [bp-5Ch]@18
- char v17; // [sp+Ch] [bp-50h]@1
- int v18; // [sp+4Ch] [bp-10h]@18
- int v19; // [sp+50h] [bp-Ch]@18
- int v20; // [sp+54h] [bp-8h]@16
- unsigned int v21; // [sp+58h] [bp-4h]@22
- int v22; // [sp+5Ch] [bp+0h]@18
- memset(&v17, -858993460, 0x50u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"private_key != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ecc_shared_secret.c",
- word_43C200 + 6);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"public_key != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ecc_shared_secret.c",
- word_43C200 + 7);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"out != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ecc_shared_secret.c",
- word_43C200 + 8);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\ecc\\ecc_shared_secret.c",
- word_43C200 + 9);
- if ( *(_DWORD *)a1 == 1 )
- {
- LOBYTE(v5) = sub_40CF10(*(_DWORD *)(a1 + 4));
- if ( v5 && (LOBYTE(v6) = sub_40CF10(*(_DWORD *)(a2 + 4)), v6) )
- {
- if ( strcmp(*(const char **)(*(_DWORD *)(a1 + 8) + 4), *(const char **)(*(_DWORD *)(a2 + 8) + 4)) )
- {
- v4 = 14;
- }
- else
- {
- v20 = sub_40CE30();
- if ( v20 )
- {
- v7 = dword_4417E8(&v19);
- v18 = _chkesp(&v16 == &v16, v7, (unsigned int)&v22);
- if ( v18 )
- {
- sub_40CEB0(v20);
- v4 = v18;
- }
- else
- {
- v8 = dword_441820(v19, *(_DWORD *)(*(_DWORD *)(a1 + 8) + 8), 16);
- v18 = _chkesp(&v16 == &v16, v8, (unsigned int)&v22);
- if ( !v18 )
- {
- v9 = dword_441888(*(_DWORD *)(a1 + 24), a2 + 12, v20, v19, 1);
- v18 = _chkesp(&v16 == &v16, v9, (unsigned int)&v22);
- if ( !v18 )
- {
- v10 = dword_441828(v19);
- v21 = _chkesp(&v16 == &v16, v10, (unsigned int)&v22);
- if ( *(_DWORD *)a4 >= v21 )
- {
- sub_40BD50(a3, v21);
- v11 = dword_441828(*(_DWORD *)v20);
- v12 = _chkesp(&v16 == &v16, v11, (unsigned int)&v22);
- v13 = dword_44182C(*(_DWORD *)v20, v21 - v12 + a3);
- v18 = _chkesp(&v16 == &v16, v13, (unsigned int)&v22);
- *(_DWORD *)a4 = v21;
- }
- else
- {
- *(_DWORD *)a4 = v21;
- v18 = 6;
- }
- }
- }
- v14 = dword_4417F0(v19);
- _chkesp(&v16 == &v16, v14, (unsigned int)&v22);
- sub_40CEB0(v20);
- v4 = v18;
- }
- }
- else
- {
- v4 = 13;
- }
- }
- }
- else
- {
- v4 = 16;
- }
- }
- else
- {
- v4 = 15;
- }
- return _chkesp(1, v4, v16);
- }
- // 43C200: using guessed type __int16 word_43C200;
- // 4417E8: using guessed type int (__cdecl *dword_4417E8)(_DWORD);
- // 4417F0: using guessed type int (__cdecl *dword_4417F0)(_DWORD);
- // 441820: using guessed type int (__cdecl *dword_441820)(_DWORD, _DWORD, _DWORD);
- // 441828: using guessed type int (__cdecl *dword_441828)(_DWORD);
- // 44182C: using guessed type int (__cdecl *dword_44182C)(_DWORD, _DWORD);
- // 441888: using guessed type int (__cdecl *dword_441888)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
- //----- (0040C290) --------------------------------------------------------
- signed int __cdecl tomcrypt_hash_is_valid(signed int a1)
- {
- signed int result; // eax@4
- char v2; // [sp+Ch] [bp-40h]@1
- memset(&v2, -858993460, 0x40u);
- if ( a1 >= 0 && a1 < 32 && dword_4402C8[26 * a1] )
- result = 0;
- else
- result = 11;
- return result;
- }
- // 4402C8: using guessed type int dword_4402C8[];
- //----- (0040C2E0) --------------------------------------------------------
- int __cdecl tomcrypt_find_hash_oid(const void *Buf2, int a2)
- {
- int v2; // eax@8
- char v4; // [sp+0h] [bp-50h]@0
- char v5; // [sp+Ch] [bp-44h]@1
- int i; // [sp+4Ch] [bp-4h]@3
- memset(&v5, -858993460, 0x44u);
- if ( !Buf2 )
- errorFunctionMaybe(
- (int)"ID != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\misc\\crypt\\crypt_find_hash_oid.c",
- word_43C204 + 2);
- for ( i = 0; i < 32; ++i )
- {
- if ( dword_4402C8[26 * i] && dword_440318[26 * i] == a2 && !memcmp((char *)&unk_4402D8 + 104 * i, Buf2, 4 * a2) )
- {
- v2 = i;
- return _chkesp(1, v2, v4);
- }
- }
- v2 = -1;
- return _chkesp(1, v2, v4);
- }
- // 43C204: using guessed type __int16 word_43C204;
- // 4402C8: using guessed type int dword_4402C8[];
- // 440318: using guessed type int dword_440318[];
- //----- (0040C3A0) --------------------------------------------------------
- int __cdecl tomcrypt_der_decode_sequence(int a1, unsigned int a2, int a3, unsigned int a4, int a5)
- {
- int v5; // eax@6
- int v6; // ecx@19
- char v8; // [sp+0h] [bp-74h]@0
- char v9; // [sp+Ch] [bp-68h]@1
- int v10; // [sp+4Ch] [bp-28h]@32
- int v11; // [sp+50h] [bp-24h]@29
- int i; // [sp+54h] [bp-20h]@11
- unsigned int j; // [sp+58h] [bp-1Ch]@23
- unsigned int v14; // [sp+5Ch] [bp-18h]@29
- int v15; // [sp+60h] [bp-14h]@16
- int v16; // [sp+64h] [bp-10h]@7
- unsigned int v17; // [sp+68h] [bp-Ch]@29
- int v18; // [sp+6Ch] [bp-8h]@29
- int v19; // [sp+70h] [bp-4h]@33
- unsigned int v20; // [sp+80h] [bp+Ch]@26
- memset(&v9, -858993460, 0x68u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\sequence\\der_decode_sequence_ex.c",
- word_43C208 + 5);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"list != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\sequence\\der_decode_sequence_ex.c",
- word_43C208 + 6);
- if ( a2 >= 2 )
- {
- v16 = 0;
- if ( *(_BYTE *)a1 == 48 || *(_BYTE *)(v16 + a1) == 49 )
- {
- ++v16;
- if ( (signed int)*(_BYTE *)(v16 + a1) >= 128 )
- {
- if ( *(_BYTE *)(v16 + a1) & 0x80 )
- {
- if ( (signed int)*(_BYTE *)(v16 + a1) < 129 || (signed int)*(_BYTE *)(v16 + a1) > 131 )
- {
- v5 = 7;
- return _chkesp(1, v5, v8);
- }
- v15 = *(_BYTE *)(v16++ + a1) & 0x7F;
- if ( v15 + v16 > a2 )
- {
- v5 = 7;
- return _chkesp(1, v5, v8);
- }
- for ( i = 0; ; i = *(_BYTE *)(v16++ + a1) | (i << 8) )
- {
- v6 = v15--;
- if ( !v6 )
- break;
- }
- }
- }
- else
- {
- i = *(_BYTE *)(v16++ + a1);
- }
- if ( i + v16 <= a2 )
- {
- for ( j = 0; j < a4; ++j )
- *(_DWORD *)(a3 + 32 * j + 12) = 0;
- v20 = i;
- for ( j = 0; j < a4; ++j )
- {
- v14 = 0;
- v18 = *(_DWORD *)(a3 + 32 * j);
- v17 = *(_DWORD *)(a3 + 32 * j + 8);
- v11 = *(_DWORD *)(a3 + 32 * j + 4);
- if ( a5 || *(_DWORD *)(a3 + 32 * j + 12) != 1 )
- {
- if ( v18 )
- {
- v10 = v18 - 1;
- switch ( v18 )
- {
- case 1:
- v14 = v20;
- v19 = sub_40FAC0(v16 + a1, v20, v11);
- if ( !v19 )
- {
- v19 = sub_40FA60((int)&v14);
- if ( !v19 )
- goto LABEL_106;
- }
- break;
- case 2:
- v14 = v20;
- v19 = sub_40F7D0(v16 + a1, v20, v11);
- if ( v19 )
- {
- if ( !a5 )
- continue;
- }
- else
- {
- v19 = sub_40F5E0(v11, (int)&v14);
- if ( !v19 )
- goto LABEL_106;
- }
- break;
- case 3:
- v14 = v20;
- v19 = sub_40F4C0(v16 + a1, v20, v11);
- if ( v19 )
- {
- if ( !a5 )
- continue;
- }
- else
- {
- v19 = sub_40F3F0(*(_DWORD *)v11, (int)&v14);
- if ( !v19 )
- goto LABEL_106;
- }
- break;
- case 4:
- v14 = v20;
- v19 = sub_40F1D0(v16 + a1, v20, v11, (int)&v17);
- if ( v19 )
- {
- if ( !a5 )
- continue;
- }
- else
- {
- *(_DWORD *)(a3 + 32 * j + 8) = v17;
- v19 = sub_40F120(v17, (int)&v14);
- if ( !v19 )
- goto LABEL_106;
- }
- break;
- case 5:
- v14 = v20;
- v19 = sub_40EF50(v16 + a1, v20, v11, (int)&v17);
- if ( v19 )
- {
- if ( !a5 )
- continue;
- }
- else
- {
- *(_DWORD *)(a3 + 32 * j + 8) = v17;
- v19 = sub_40EEA0(v17, (int)&v14);
- if ( !v19 )
- goto LABEL_106;
- }
- break;
- case 6:
- if ( v20 >= 2 && *(_BYTE *)(v16 + a1) == 5 && !*(_BYTE *)(v16 + a1 + 1) )
- {
- v14 = 2;
- goto LABEL_106;
- }
- if ( !a5 )
- continue;
- v19 = 7;
- break;
- case 7:
- v14 = v20;
- v19 = sub_40EC30(v16 + a1, v20, v11, (int)&v17);
- if ( v19 )
- {
- if ( !a5 )
- continue;
- }
- else
- {
- *(_DWORD *)(a3 + 32 * j + 8) = v17;
- v19 = sub_40EAB0(v11, v17, (int)&v14);
- if ( !v19 )
- goto LABEL_106;
- }
- break;
- case 8:
- v14 = v20;
- v19 = sub_40E870(v16 + a1, v20, v11, (int)&v17);
- if ( v19 )
- {
- if ( !a5 )
- continue;
- }
- else
- {
- *(_DWORD *)(a3 + 32 * j + 8) = v17;
- v19 = sub_40E760(v11, v17, (int)&v14);
- if ( !v19 )
- goto LABEL_106;
- }
- break;
- case 9:
- v14 = v20;
- v19 = sub_40E4B0(v16 + a1, v20, v11, (int)&v17);
- if ( v19 )
- {
- if ( !a5 )
- continue;
- }
- else
- {
- *(_DWORD *)(a3 + 32 * j + 8) = v17;
- v19 = sub_40E3A0(v11, v17, (int)&v14);
- if ( !v19 )
- goto LABEL_106;
- }
- break;
- case 10:
- v14 = v20;
- v19 = sub_40E020(v16 + a1, v20, v11, (int)&v17);
- if ( v19 )
- {
- if ( !a5 )
- continue;
- }
- else
- {
- *(_DWORD *)(a3 + 32 * j + 8) = v17;
- v19 = sub_40DEE0(v11, v17, (int)&v14);
- if ( !v19 )
- goto LABEL_106;
- }
- break;
- case 11:
- v14 = v20;
- v19 = sub_40D8B0(v16 + a1, (int)&v14, v11);
- if ( !v19 )
- goto LABEL_106;
- if ( !a5 )
- continue;
- break;
- case 14:
- v14 = v20;
- v19 = tomcrypt_der_decode_sequence(v16 + a1, v20, v11, v17, 0);
- if ( v19 )
- {
- if ( !a5 )
- continue;
- }
- else
- {
- v19 = sub_40D500(v11, v17, &v14);
- if ( !v19 )
- goto LABEL_106;
- }
- break;
- case 13:
- case 15:
- if ( (v18 != 15 || (*(_BYTE *)(v16 + a1) & 0x3F) == 49)
- && (v18 != 13 || (*(_BYTE *)(v16 + a1) & 0x3F) == 48) )
- {
- v14 = v20;
- v19 = tomcrypt_der_decode_sequence(v16 + a1, v20, v11, v17, 1);
- if ( v19 )
- {
- if ( !a5 )
- continue;
- }
- else
- {
- v19 = sub_40D500(v11, v17, &v14);
- if ( !v19 )
- goto LABEL_106;
- }
- }
- else
- {
- v19 = 7;
- }
- break;
- case 12:
- v14 = v20;
- v19 = sub_40CF70(v16 + a1, &v14, v11, v17);
- if ( !v19 )
- {
- LABEL_106:
- v16 += v14;
- v20 -= v14;
- *(_DWORD *)(a3 + 32 * j + 12) = 1;
- if ( !a5 )
- j = -1;
- continue;
- }
- if ( !a5 )
- continue;
- break;
- default:
- v19 = 16;
- break;
- }
- goto LABEL_115;
- }
- break;
- }
- }
- for ( j = 0; j < a4; ++j )
- {
- if ( !*(_DWORD *)(a3 + 32 * j + 12) )
- {
- v19 = 7;
- goto LABEL_115;
- }
- }
- v19 = 0;
- LABEL_115:
- v5 = v19;
- }
- else
- {
- v5 = 7;
- }
- }
- else
- {
- v5 = 7;
- }
- }
- else
- {
- v5 = 7;
- }
- return _chkesp(1, v5, v8);
- }
- // 40C3A0: using guessed type _DWORD __cdecl tomcrypt_der_decode_sequence(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
- // 40D500: using guessed type _DWORD __cdecl sub_40D500(_DWORD, _DWORD, _DWORD);
- // 43C208: using guessed type __int16 word_43C208;
- //----- (0040CC20) --------------------------------------------------------
- int __cdecl sub_40CC20(int a1, size_t SizeOfElements, int a3, signed int a4)
- {
- int v4; // eax@8
- int v5; // eax@13
- int v6; // eax@15
- int v7; // eax@17
- char v9; // [sp+0h] [bp-5Ch]@13
- char v10; // [sp+Ch] [bp-50h]@1
- int v11; // [sp+4Ch] [bp-10h]@11
- int v12; // [sp+50h] [bp-Ch]@4
- int v13; // [sp+54h] [bp-8h]@17
- int v14; // [sp+58h] [bp-4h]@9
- int v15; // [sp+5Ch] [bp+0h]@13
- memset(&v10, -858993460, 0x50u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"N != NULL",
- (int)"c:\\cr\\doc\\libs\\libtomcrypt\\src\\math\\rand_prime.c",
- word_43C20C + 4);
- if ( (SizeOfElements & 0x80000000u) == 0 )
- {
- v12 = 0;
- }
- else
- {
- v12 = 1;
- SizeOfElements = -SizeOfElements;
- }
- if ( (signed int)SizeOfElements >= 2 && (signed int)SizeOfElements <= 512 )
- {
- v14 = sub_40CDE0(a4);
- if ( v14 )
- {
- v4 = v14;
- }
- else
- {
- v11 = (int)calloc(1u, SizeOfElements);
- if ( v11 )
- {
- do
- {
- v5 = ((int (__cdecl *)(int, size_t, int))dword_440FDC[10 * a4])(v11, SizeOfElements, a3);
- if ( _chkesp(&v9 == &v9, v5, (unsigned int)&v15) != SizeOfElements )
- {
- CrtCheckMemoryWrapperWrapper(v11);
- v4 = 9;
- return _chkesp(1, v4, v9);
- }
- *(_BYTE *)v11 |= 0xC0u;
- *(_BYTE *)(SizeOfElements + v11 - 1) |= ((v12 & 1) != 0 ? 2 : 0) | 1;
- v6 = dword_441830(a1, v11, SizeOfElements);
- v14 = _chkesp(&v9 == &v9, v6, (unsigned int)&v15);
- if ( v14 )
- {
- CrtCheckMemoryWrapperWrapper(v11);
- v4 = v14;
- return _chkesp(1, v4, v9);
- }
- v7 = dword_441884(a1, &v13);
- v14 = _chkesp(&v9 == &v9, v7, (unsigned int)&v15);
- if ( v14 )
- {
- CrtCheckMemoryWrapperWrapper(v11);
- v4 = v14;
- return _chkesp(1, v4, v9);
- }
- }
- while ( !v13 );
- CrtCheckMemoryWrapperWrapper(v11);
- v4 = 0;
- }
- else
- {
- v4 = 13;
- }
- }
- }
- else
- {
- v4 = 23;
- }
- return _chkesp(1, v4, v9);
- }
- // 43C20C: using guessed type __int16 word_43C20C;
- // 440FDC: using guessed type int dword_440FDC[];
- // 441830: using guessed type int (__cdecl *dword_441830)(_DWORD, _DWORD, _DWORD);
- // 441884: using guessed type int (__cdecl *dword_441884)(_DWORD, _DWORD);
- //----- (0040CDE0) --------------------------------------------------------
- signed int __cdecl sub_40CDE0(signed int a1)
- {
- signed int result; // eax@4
- char v2; // [sp+Ch] [bp-40h]@1
- memset(&v2, -858993460, 0x40u);
- if ( a1 >= 0 && a1 < 32 && dword_440FC8[10 * a1] )
- result = 0;
- else
- result = 12;
- return result;
- }
- // 440FC8: using guessed type int dword_440FC8[];
- //----- (0040CE30) --------------------------------------------------------
- int __cdecl sub_40CE30()
- {
- int v0; // eax@2
- char v2; // [sp+0h] [bp-50h]@0
- char v3; // [sp+Ch] [bp-44h]@1
- int v4; // [sp+4Ch] [bp-4h]@1
- memset(&v3, -858993460, 0x44u);
- v4 = (int)calloc(1u, 0xCu);
- if ( v4 )
- {
- if ( sub_408490(v4, v4 + 4) )
- {
- CrtCheckMemoryWrapperWrapper(v4);
- v0 = 0;
- }
- else
- {
- v0 = v4;
- }
- }
- else
- {
- v0 = 0;
- }
- return _chkesp(1, v0, v2);
- }
- //----- (0040CEB0) --------------------------------------------------------
- int __cdecl sub_40CEB0(int a1)
- {
- int v1; // eax@1
- char v3; // [sp+0h] [bp-4Ch]@0
- char v4; // [sp+Ch] [bp-40h]@1
- v1 = -858993460;
- memset(&v4, -858993460, 0x40u);
- if ( a1 )
- {
- sub_408570(*(_DWORD *)a1, *(_DWORD *)(a1 + 4));
- CrtCheckMemoryWrapperWrapper(a1);
- }
- return _chkesp(1, v1, v3);
- }
- //----- (0040CF10) --------------------------------------------------------
- bool __cdecl sub_40CF10(signed int a1)
- {
- char v2; // [sp+Ch] [bp-44h]@1
- int i; // [sp+4Ch] [bp-4h]@1
- memset(&v2, -858993460, 0x44u);
- for ( i = 0; dword_4353F8[7 * i]; ++i )
- ;
- return a1 >= -1 && a1 < i;
- }
- // 4353F8: using guessed type int dword_4353F8[];
- //----- (0040CF70) --------------------------------------------------------
- int __cdecl sub_40CF70(int a1, unsigned int *a2, int a3, unsigned int a4)
- {
- int v4; // eax@8
- char v6; // [sp+0h] [bp-60h]@0
- char v7; // [sp+Ch] [bp-54h]@1
- int v8; // [sp+4Ch] [bp-14h]@14
- int v9; // [sp+50h] [bp-10h]@14
- unsigned int v10; // [sp+54h] [bp-Ch]@16
- unsigned int i; // [sp+58h] [bp-8h]@9
- unsigned int v12; // [sp+5Ch] [bp-4h]@14
- memset(&v7, -858993460, 0x54u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\choice\\der_decode_choice.c",
- word_43C210 + 4);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"inlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\choice\\der_decode_choice.c",
- word_43C210 + 5);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"list != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\choice\\der_decode_choice.c",
- word_43C210 + 6);
- if ( *a2 >= 2 )
- {
- for ( i = 0; i < a4; ++i )
- *(_DWORD *)(a3 + 32 * i + 12) = 0;
- i = 0;
- while ( 2 )
- {
- if ( i >= a4 )
- {
- v4 = 7;
- }
- else
- {
- v12 = *(_DWORD *)(a3 + 32 * i + 8);
- v9 = *(_DWORD *)(a3 + 32 * i + 4);
- v8 = *(_DWORD *)(a3 + 32 * i);
- v8 -= 2;
- switch ( v8 )
- {
- case 0:
- if ( sub_40F7D0(a1, *a2, v9) || sub_40F5E0(v9, (int)&v10) )
- goto LABEL_60;
- *(_DWORD *)(a3 + 32 * i + 12) = 1;
- *a2 = v10;
- v4 = 0;
- break;
- case 1:
- if ( sub_40F4C0(a1, *a2, v9) || sub_40F3F0(v12, (int)&v10) )
- goto LABEL_60;
- *(_DWORD *)(a3 + 32 * i + 12) = 1;
- *a2 = v10;
- v4 = 0;
- break;
- case 2:
- if ( sub_40F1D0(a1, *a2, v9, (int)&v12) || sub_40F120(v12, (int)&v10) )
- goto LABEL_60;
- *(_DWORD *)(a3 + 32 * i + 12) = 1;
- *(_DWORD *)(a3 + 32 * i + 8) = v12;
- *a2 = v10;
- v4 = 0;
- break;
- case 3:
- if ( sub_40EF50(a1, *a2, v9, (int)&v12) || sub_40EEA0(v12, (int)&v10) )
- goto LABEL_60;
- *(_DWORD *)(a3 + 32 * i + 12) = 1;
- *(_DWORD *)(a3 + 32 * i + 8) = v12;
- *a2 = v10;
- v4 = 0;
- break;
- case 4:
- if ( *a2 != 2 || *(_BYTE *)(i + a1) != 5 || *(_BYTE *)(i + a1 + 1) )
- goto LABEL_60;
- *a2 = 2;
- *(_DWORD *)(a3 + 32 * i + 12) = 1;
- v4 = 0;
- break;
- case 5:
- if ( sub_40EC30(a1, *a2, v9, (int)&v12) || sub_40EAB0(v9, v12, (int)&v10) )
- goto LABEL_60;
- *(_DWORD *)(a3 + 32 * i + 12) = 1;
- *(_DWORD *)(a3 + 32 * i + 8) = v12;
- *a2 = v10;
- v4 = 0;
- break;
- case 6:
- if ( sub_40E870(a1, *a2, v9, (int)&v12) || sub_40E760(v9, v12, (int)&v10) )
- goto LABEL_60;
- *(_DWORD *)(a3 + 32 * i + 12) = 1;
- *(_DWORD *)(a3 + 32 * i + 8) = v12;
- *a2 = v10;
- v4 = 0;
- break;
- case 7:
- if ( sub_40E4B0(a1, *a2, v9, (int)&v12) || sub_40E3A0(v9, v12, (int)&v10) )
- goto LABEL_60;
- *(_DWORD *)(a3 + 32 * i + 12) = 1;
- *(_DWORD *)(a3 + 32 * i + 8) = v12;
- *a2 = v10;
- v4 = 0;
- break;
- case 8:
- if ( sub_40E020(a1, *a2, v9, (int)&v12) || sub_40DEE0(v9, v12, (int)&v10) )
- goto LABEL_60;
- *(_DWORD *)(a3 + 32 * i + 12) = 1;
- *(_DWORD *)(a3 + 32 * i + 8) = v12;
- *a2 = v10;
- v4 = 0;
- break;
- case 9:
- v10 = *a2;
- if ( sub_40D8B0(a1, (int)&v10, v9) )
- goto LABEL_60;
- *(_DWORD *)(a3 + 32 * i + 12) = 1;
- *a2 = v10;
- v4 = 0;
- break;
- case 11:
- case 12:
- case 13:
- if ( tomcrypt_der_decode_sequence(a1, *a2, v9, v12, 1) || sub_40D500(v9, v12, &v10) )
- {
- LABEL_60:
- ++i;
- continue;
- }
- *(_DWORD *)(a3 + 32 * i + 12) = 1;
- *a2 = v10;
- v4 = 0;
- break;
- default:
- v4 = 16;
- break;
- }
- }
- break;
- }
- }
- else
- {
- v4 = 7;
- }
- return _chkesp(1, v4, v6);
- }
- // 40C3A0: using guessed type _DWORD __cdecl tomcrypt_der_decode_sequence(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
- // 40D500: using guessed type _DWORD __cdecl sub_40D500(_DWORD, _DWORD, _DWORD);
- // 43C210: using guessed type __int16 word_43C210;
- //----- (0040D500) --------------------------------------------------------
- int __cdecl sub_40D500(int a1, unsigned int a2, int a3)
- {
- char v4; // [sp+0h] [bp-70h]@0
- char v5; // [sp+Ch] [bp-64h]@1
- int v6; // [sp+4Ch] [bp-24h]@8
- int v7; // [sp+50h] [bp-20h]@7
- unsigned int v8; // [sp+54h] [bp-1Ch]@5
- unsigned int v9; // [sp+58h] [bp-18h]@34
- unsigned int v10; // [sp+5Ch] [bp-14h]@5
- int v11; // [sp+60h] [bp-10h]@9
- unsigned int v12; // [sp+64h] [bp-Ch]@7
- int v13; // [sp+68h] [bp-8h]@7
- int v14; // [sp+6Ch] [bp-4h]@9
- memset(&v5, -858993460, 0x64u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"list != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\sequence\\der_length_sequence.c",
- word_43C214 + 5);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\sequence\\der_length_sequence.c",
- word_43C214 + 6);
- v10 = 0;
- v8 = 0;
- while ( 2 )
- {
- if ( v8 >= a2
- || (v13 = *(_DWORD *)(a1 + 32 * v8), v12 = *(_DWORD *)(a1 + 32 * v8 + 8), v7 = *(_DWORD *)(a1 + 32 * v8 + 4), !v13) )
- {
- v9 = v10;
- if ( v10 >= 0x80 )
- {
- if ( v10 >= 0x100 )
- {
- if ( v10 >= 0x10000 )
- {
- if ( v10 >= 0x1000000 )
- {
- v14 = 16;
- return _chkesp(1, v14, v4);
- }
- v10 += 5;
- }
- else
- {
- v10 += 4;
- }
- }
- else
- {
- v10 += 3;
- }
- }
- else
- {
- v10 += 2;
- }
- *(_DWORD *)a3 = v10;
- v14 = 0;
- return _chkesp(1, v14, v4);
- }
- v6 = v13 - 1;
- switch ( v13 )
- {
- case 1:
- v14 = sub_40FA60((int)&v11);
- if ( !v14 )
- {
- v10 += v11;
- goto LABEL_33;
- }
- return _chkesp(1, v14, v4);
- case 2:
- v14 = sub_40F5E0(v7, (int)&v11);
- if ( !v14 )
- {
- v10 += v11;
- goto LABEL_33;
- }
- return _chkesp(1, v14, v4);
- case 3:
- v14 = sub_40F3F0(*(_DWORD *)v7, (int)&v11);
- if ( !v14 )
- {
- v10 += v11;
- goto LABEL_33;
- }
- return _chkesp(1, v14, v4);
- case 4:
- v14 = sub_40F120(v12, (int)&v11);
- if ( !v14 )
- {
- v10 += v11;
- goto LABEL_33;
- }
- return _chkesp(1, v14, v4);
- case 5:
- v14 = sub_40EEA0(v12, (int)&v11);
- if ( !v14 )
- {
- v10 += v11;
- goto LABEL_33;
- }
- return _chkesp(1, v14, v4);
- case 6:
- v10 += 2;
- goto LABEL_33;
- case 7:
- v14 = sub_40EAB0(v7, v12, (int)&v11);
- if ( v14 )
- return _chkesp(1, v14, v4);
- v10 += v11;
- goto LABEL_33;
- case 8:
- v14 = sub_40E760(v7, v12, (int)&v11);
- if ( v14 )
- return _chkesp(1, v14, v4);
- v10 += v11;
- goto LABEL_33;
- case 9:
- v14 = sub_40E3A0(v7, v12, (int)&v11);
- if ( v14 )
- return _chkesp(1, v14, v4);
- v10 += v11;
- goto LABEL_33;
- case 11:
- v14 = sub_40FB90(v7, (int)&v11);
- if ( v14 )
- return _chkesp(1, v14, v4);
- v10 += v11;
- goto LABEL_33;
- case 10:
- v14 = sub_40DEE0(v7, v12, (int)&v11);
- if ( v14 )
- return _chkesp(1, v14, v4);
- v10 += v11;
- goto LABEL_33;
- case 13:
- case 14:
- case 15:
- v14 = sub_40D500(v7, v12, &v11);
- if ( v14 )
- return _chkesp(1, v14, v4);
- v10 += v11;
- LABEL_33:
- ++v8;
- continue;
- default:
- v14 = 16;
- break;
- }
- return _chkesp(1, v14, v4);
- }
- }
- // 40D500: using guessed type _DWORD __cdecl sub_40D500(_DWORD, _DWORD, _DWORD);
- // 43C214: using guessed type __int16 word_43C214;
- //----- (0040D8B0) --------------------------------------------------------
- int __cdecl sub_40D8B0(int a1, int a2, int a3)
- {
- int v3; // eax@10
- int v4; // esi@16
- int v5; // esi@18
- int v6; // esi@20
- int v7; // esi@22
- int v8; // esi@24
- int v9; // ecx@30
- int v10; // esi@33
- int v11; // esi@35
- int v12; // esi@38
- int v13; // eax@44
- int v14; // esi@47
- int v15; // esi@49
- char v17; // [sp+0h] [bp-7Ch]@0
- char v18; // [sp+Ch] [bp-70h]@1
- int v19; // [sp+4Ch] [bp-30h]@45
- int v20; // [sp+50h] [bp-2Ch]@31
- int v21; // [sp+54h] [bp-28h]@13
- unsigned int i; // [sp+58h] [bp-24h]@11
- unsigned __int8 v23; // [sp+5Ch] [bp-20h]@15
- char v24[31]; // [sp+5Dh] [bp-1Fh]@16
- memset(&v18, -858993460, 0x70u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\utctime\\der_decode_utctime.c",
- word_43C218 + 5);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"inlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\utctime\\der_decode_utctime.c",
- word_43C218 + 6);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"out != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\utctime\\der_decode_utctime.c",
- word_43C218 + 7);
- if ( *(_DWORD *)a2 >= 2u
- && (unsigned int)*(_BYTE *)(a1 + 1) < 0x20
- && (unsigned int)*(_BYTE *)(a1 + 1) + 2 <= *(_DWORD *)a2 )
- {
- for ( i = 0; i < *(_BYTE *)(a1 + 1); ++i )
- {
- v21 = sub_40E700(*(_BYTE *)(i + a1 + 2));
- if ( v21 == -1 )
- {
- v3 = 7;
- return _chkesp(1, v3, v17);
- }
- *(&v23 + i) = v21;
- }
- *(_DWORD *)a2 = i + 2;
- i = 0;
- v4 = 10 * sub_40DDB0(v23);
- *(_DWORD *)a3 = sub_40DDB0(v24[i]) + v4;
- if ( *(_DWORD *)a3 < 0x64u )
- {
- i += 2;
- v5 = 10 * sub_40DDB0(*(&v23 + i));
- *(_DWORD *)(a3 + 4) = sub_40DDB0(v24[i]) + v5;
- if ( *(_DWORD *)(a3 + 4) < 0xDu )
- {
- i += 2;
- v6 = 10 * sub_40DDB0(*(&v23 + i));
- *(_DWORD *)(a3 + 8) = sub_40DDB0(v24[i]) + v6;
- if ( *(_DWORD *)(a3 + 8) < 0x20u )
- {
- i += 2;
- v7 = 10 * sub_40DDB0(*(&v23 + i));
- *(_DWORD *)(a3 + 12) = sub_40DDB0(v24[i]) + v7;
- if ( *(_DWORD *)(a3 + 12) < 0x18u )
- {
- i += 2;
- v8 = 10 * sub_40DDB0(*(&v23 + i));
- *(_DWORD *)(a3 + 16) = sub_40DDB0(v24[i]) + v8;
- if ( *(_DWORD *)(a3 + 16) < 0x3Cu )
- {
- i += 2;
- *(_DWORD *)(a3 + 20) = 0;
- *(_DWORD *)(a3 + 32) = 0;
- *(_DWORD *)(a3 + 28) = 0;
- *(_DWORD *)(a3 + 24) = 0;
- if ( *(&v23 + i) == 90 )
- {
- v3 = 0;
- }
- else
- {
- if ( *(&v23 + i) != 43 && *(&v23 + i) != 45 )
- {
- v12 = 10 * sub_40DDB0(*(&v23 + i));
- *(_DWORD *)(a3 + 20) = sub_40DDB0(v24[i]) + v12;
- if ( *(_DWORD *)(a3 + 20) < 0x3Cu )
- {
- i += 2;
- if ( *(&v23 + i) == 90 )
- {
- v3 = 0;
- }
- else
- {
- if ( *(&v23 + i) != 43 && *(&v23 + i) != 45 )
- {
- v3 = 7;
- }
- else
- {
- v13 = *(&v23 + i++);
- v19 = v13 != 43;
- *(_DWORD *)(a3 + 24) = v19;
- v14 = 10 * sub_40DDB0(*(&v23 + i));
- *(_DWORD *)(a3 + 28) = sub_40DDB0(v24[i]) + v14;
- if ( *(_DWORD *)(a3 + 28) < 0x18u )
- {
- i += 2;
- v15 = 10 * sub_40DDB0(*(&v23 + i));
- *(_DWORD *)(a3 + 32) = sub_40DDB0(v24[i]) + v15;
- if ( *(_DWORD *)(a3 + 32) < 0x3Cu )
- {
- i += 2;
- v3 = 0;
- }
- else
- {
- v3 = 7;
- }
- }
- else
- {
- v3 = 7;
- }
- }
- }
- }
- else
- {
- v3 = 7;
- }
- }
- else
- {
- v9 = *(&v23 + i++);
- v20 = v9 != 43;
- *(_DWORD *)(a3 + 24) = v20;
- v10 = 10 * sub_40DDB0(*(&v23 + i));
- *(_DWORD *)(a3 + 28) = sub_40DDB0(v24[i]) + v10;
- if ( *(_DWORD *)(a3 + 28) < 0x18u )
- {
- i += 2;
- v11 = 10 * sub_40DDB0(*(&v23 + i));
- *(_DWORD *)(a3 + 32) = sub_40DDB0(v24[i]) + v11;
- if ( *(_DWORD *)(a3 + 32) < 0x3Cu )
- {
- i += 2;
- v3 = 0;
- }
- else
- {
- v3 = 7;
- }
- }
- else
- {
- v3 = 7;
- }
- }
- }
- }
- else
- {
- v3 = 7;
- }
- }
- else
- {
- v3 = 7;
- }
- }
- else
- {
- v3 = 7;
- }
- }
- else
- {
- v3 = 7;
- }
- }
- else
- {
- v3 = 7;
- }
- }
- else
- {
- v3 = 7;
- }
- return _chkesp(1, v3, v17);
- }
- // 43C218: using guessed type __int16 word_43C218;
- // 40D8B0: using guessed type char var_1F[31];
- //----- (0040DDB0) --------------------------------------------------------
- signed int __cdecl sub_40DDB0(unsigned __int8 a1)
- {
- signed int result; // eax@2
- char v2; // [sp+Ch] [bp-44h]@1
- int v3; // [sp+4Ch] [bp-4h]@1
- memset(&v2, -858993460, 0x44u);
- v3 = a1 - 48;
- switch ( a1 )
- {
- case 0x30u:
- result = 0;
- break;
- case 0x31u:
- result = 1;
- break;
- case 0x32u:
- result = 2;
- break;
- case 0x33u:
- result = 3;
- break;
- case 0x34u:
- result = 4;
- break;
- case 0x35u:
- result = 5;
- break;
- case 0x36u:
- result = 6;
- break;
- case 0x37u:
- result = 7;
- break;
- case 0x38u:
- result = 8;
- break;
- case 0x39u:
- result = 9;
- break;
- default:
- result = 100;
- break;
- }
- return result;
- }
- //----- (0040DE70) --------------------------------------------------------
- signed int __cdecl sub_40DE70(unsigned __int16 a1)
- {
- signed int result; // eax@2
- char v2; // [sp+Ch] [bp-40h]@1
- memset(&v2, -858993460, 0x40u);
- if ( (signed int)a1 > 127 )
- {
- if ( (signed int)a1 > 2047 )
- {
- if ( (signed int)a1 > 65535 )
- result = 4;
- else
- result = 3;
- }
- else
- {
- result = 2;
- }
- }
- else
- {
- result = 1;
- }
- return result;
- }
- //----- (0040DEE0) --------------------------------------------------------
- int __cdecl sub_40DEE0(int a1, unsigned int a2, int a3)
- {
- int v3; // eax@8
- signed int v4; // eax@9
- char v6; // [sp+0h] [bp-54h]@0
- char v7; // [sp+Ch] [bp-48h]@1
- unsigned int v8; // [sp+4Ch] [bp-8h]@5
- unsigned int i; // [sp+50h] [bp-4h]@5
- memset(&v7, -858993460, 0x48u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\utf8\\der_length_utf8_string.c",
- word_43C21C + 3);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\utf8\\der_length_utf8_string.c",
- word_43C21C + 4);
- v8 = 0;
- for ( i = 0; i < a2; ++i )
- {
- if ( (signed int)*(_WORD *)(a1 + 2 * i) > 1114111 )
- {
- v3 = 16;
- return _chkesp(1, v3, v6);
- }
- v4 = sub_40DE70(*(_WORD *)(a1 + 2 * i));
- v8 += v4;
- }
- if ( v8 < 0x80 )
- {
- *(_DWORD *)a3 = v8 + 2;
- LABEL_19:
- v3 = 0;
- return _chkesp(1, v3, v6);
- }
- if ( v8 < 0x100 )
- {
- *(_DWORD *)a3 = v8 + 3;
- goto LABEL_19;
- }
- if ( v8 < 0x10000 )
- {
- *(_DWORD *)a3 = v8 + 4;
- goto LABEL_19;
- }
- if ( v8 < 0x1000000 )
- {
- *(_DWORD *)a3 = v8 + 5;
- goto LABEL_19;
- }
- v3 = 16;
- return _chkesp(1, v3, v6);
- }
- // 43C21C: using guessed type __int16 word_43C21C;
- //----- (0040E020) --------------------------------------------------------
- int __cdecl sub_40E020(int a1, unsigned int a2, int a3, int a4)
- {
- int v4; // eax@8
- int v5; // edx@17
- int v6; // ecx@34
- char v8; // [sp+0h] [bp-60h]@0
- char v9; // [sp+Ch] [bp-54h]@1
- int v10; // [sp+4Ch] [bp-14h]@16
- unsigned int v11; // [sp+50h] [bp-10h]@25
- int v12; // [sp+54h] [bp-Ch]@12
- unsigned int v13; // [sp+58h] [bp-8h]@11
- int v14; // [sp+5Ch] [bp-4h]@25
- memset(&v9, -858993460, 0x54u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\utf8\\der_decode_utf8_string.c",
- word_43C220 + 4);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"out != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\utf8\\der_decode_utf8_string.c",
- word_43C220 + 5);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\utf8\\der_decode_utf8_string.c",
- word_43C220 + 6);
- if ( a2 >= 2 )
- {
- if ( (*(_BYTE *)a1 & 0x1F) == 12 )
- {
- v13 = 1;
- if ( *(_BYTE *)(a1 + 1) & 0x80 )
- {
- v12 = *(_BYTE *)(v13 + a1) & 0x7F;
- if ( !v12 || (unsigned int)v12 > 3 || v12 + v13 > a2 )
- {
- v4 = 7;
- return _chkesp(1, v4, v8);
- }
- v10 = 0;
- ++v13;
- while ( 1 )
- {
- v5 = v12--;
- if ( !v5 )
- break;
- v10 = *(_BYTE *)(v13++ + a1) | (v10 << 8);
- }
- }
- else
- {
- v10 = *(_BYTE *)(v13++ + a1) & 0x7F;
- }
- if ( v13 + v10 <= a2 )
- {
- v12 = 0;
- while ( v13 < a2 )
- {
- LOWORD(v14) = *(_BYTE *)(v13++ + a1);
- v11 = 0;
- while ( v14 & 0x80 && v11 <= 4 )
- {
- ++v11;
- LOWORD(v14) = (unsigned __int8)(2 * v14);
- }
- if ( v11 > 4 || v13 + v11 - 1 > a2 )
- {
- v4 = 7;
- return _chkesp(1, v4, v8);
- }
- LOWORD(v14) = (unsigned __int16)v14 >> v11;
- if ( v11 > 1 )
- --v11;
- while ( 1 )
- {
- v6 = v11--;
- if ( !v6 )
- break;
- if ( (*(_BYTE *)(v13 + a1) & 0xC0) != 128 )
- {
- v4 = 7;
- return _chkesp(1, v4, v8);
- }
- LOWORD(v14) = *(_BYTE *)(v13++ + a1) & 0x3F | ((_WORD)v14 << 6);
- }
- if ( (unsigned int)v12 > *(_DWORD *)a4 )
- {
- *(_DWORD *)a4 = v12;
- v4 = 6;
- return _chkesp(1, v4, v8);
- }
- *(_WORD *)(a3 + 2 * v12++) = v14;
- }
- *(_DWORD *)a4 = v12;
- v4 = 0;
- }
- else
- {
- v4 = 7;
- }
- }
- else
- {
- v4 = 7;
- }
- }
- else
- {
- v4 = 7;
- }
- return _chkesp(1, v4, v8);
- }
- // 43C220: using guessed type __int16 word_43C220;
- //----- (0040E2E0) --------------------------------------------------------
- int __cdecl sub_40E2E0(int a1)
- {
- char v2; // [sp+Ch] [bp-44h]@1
- int i; // [sp+4Ch] [bp-4h]@1
- memset(&v2, -858993460, 0x44u);
- for ( i = 0; i < 74; ++i )
- {
- if ( dword_4365C8[2 * i] == a1 )
- return dword_4365CC[2 * i];
- }
- return -1;
- }
- // 4365C8: using guessed type int dword_4365C8[];
- // 4365CC: using guessed type int dword_4365CC[];
- //----- (0040E340) --------------------------------------------------------
- int __cdecl sub_40E340(int a1)
- {
- char v2; // [sp+Ch] [bp-44h]@1
- int i; // [sp+4Ch] [bp-4h]@1
- memset(&v2, -858993460, 0x44u);
- for ( i = 0; i < 74; ++i )
- {
- if ( dword_4365CC[2 * i] == a1 )
- return dword_4365C8[2 * i];
- }
- return -1;
- }
- // 4365C8: using guessed type int dword_4365C8[];
- // 4365CC: using guessed type int dword_4365CC[];
- //----- (0040E3A0) --------------------------------------------------------
- int __cdecl sub_40E3A0(int a1, unsigned int a2, int a3)
- {
- int v3; // eax@8
- char v5; // [sp+0h] [bp-50h]@0
- char v6; // [sp+Ch] [bp-44h]@1
- unsigned int i; // [sp+4Ch] [bp-4h]@5
- memset(&v6, -858993460, 0x44u);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\printable_string\\der_length_printable_string.c",
- word_43C224 + 3);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"octets != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\printable_string\\der_length_printable_string.c",
- word_43C224 + 4);
- for ( i = 0; i < a2; ++i )
- {
- if ( sub_40E2E0(*(_BYTE *)(i + a1)) == -1 )
- {
- v3 = 16;
- return _chkesp(1, v3, v5);
- }
- }
- if ( a2 < 0x80 )
- {
- *(_DWORD *)a3 = a2 + 2;
- LABEL_19:
- v3 = 0;
- return _chkesp(1, v3, v5);
- }
- if ( a2 < 0x100 )
- {
- *(_DWORD *)a3 = a2 + 3;
- goto LABEL_19;
- }
- if ( a2 < 0x10000 )
- {
- *(_DWORD *)a3 = a2 + 4;
- goto LABEL_19;
- }
- if ( a2 < 0x1000000 )
- {
- *(_DWORD *)a3 = a2 + 5;
- goto LABEL_19;
- }
- v3 = 16;
- return _chkesp(1, v3, v5);
- }
- // 43C224: using guessed type __int16 word_43C224;
- //----- (0040E4B0) --------------------------------------------------------
- int __cdecl sub_40E4B0(int a1, unsigned int a2, int a3, int a4)
- {
- int v4; // eax@8
- int v5; // edx@17
- char v7; // [sp+0h] [bp-60h]@0
- char v8; // [sp+Ch] [bp-54h]@1
- int v9; // [sp+4Ch] [bp-14h]@27
- int v10; // [sp+50h] [bp-10h]@27
- int v11; // [sp+54h] [bp-Ch]@16
- int i; // [sp+58h] [bp-8h]@12
- int v13; // [sp+5Ch] [bp-4h]@11
- memset(&v8, -858993460, 0x54u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\printable_string\\der_decode_printable_string.c",
- word_43C228 + 4);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"out != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\printable_string\\der_decode_printable_string.c",
- word_43C228 + 5);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\printable_string\\der_decode_printable_string.c",
- word_43C228 + 6);
- if ( a2 >= 2 )
- {
- if ( (*(_BYTE *)a1 & 0x1F) == 19 )
- {
- v13 = 1;
- if ( *(_BYTE *)(a1 + 1) & 0x80 )
- {
- i = *(_BYTE *)(v13 + a1) & 0x7F;
- if ( !i || (unsigned int)i > 3 || i + v13 > a2 )
- {
- v4 = 7;
- return _chkesp(1, v4, v7);
- }
- v11 = 0;
- ++v13;
- while ( 1 )
- {
- v5 = i--;
- if ( !v5 )
- break;
- v11 = *(_BYTE *)(v13++ + a1) | (v11 << 8);
- }
- }
- else
- {
- v11 = *(_BYTE *)(v13++ + a1) & 0x7F;
- }
- if ( (unsigned int)v11 <= *(_DWORD *)a4 )
- {
- if ( v13 + v11 <= a2 )
- {
- for ( i = 0; i < (unsigned int)v11; ++i )
- {
- v9 = *(_BYTE *)(v13++ + a1);
- v10 = sub_40E340(v9);
- if ( v10 == -1 )
- {
- v4 = 16;
- return _chkesp(1, v4, v7);
- }
- *(_BYTE *)(i + a3) = v10;
- }
- *(_DWORD *)a4 = i;
- v4 = 0;
- }
- else
- {
- v4 = 7;
- }
- }
- else
- {
- *(_DWORD *)a4 = v11;
- v4 = 6;
- }
- }
- else
- {
- v4 = 7;
- }
- }
- else
- {
- v4 = 7;
- }
- return _chkesp(1, v4, v7);
- }
- // 43C228: using guessed type __int16 word_43C228;
- //----- (0040E6A0) --------------------------------------------------------
- int __cdecl sub_40E6A0(int a1)
- {
- char v2; // [sp+Ch] [bp-44h]@1
- int i; // [sp+4Ch] [bp-4h]@1
- memset(&v2, -858993460, 0x44u);
- for ( i = 0; i < 102; ++i )
- {
- if ( dword_4368E0[2 * i] == a1 )
- return dword_4368E4[2 * i];
- }
- return -1;
- }
- // 4368E0: using guessed type int dword_4368E0[];
- // 4368E4: using guessed type int dword_4368E4[];
- //----- (0040E700) --------------------------------------------------------
- int __cdecl sub_40E700(int a1)
- {
- char v2; // [sp+Ch] [bp-44h]@1
- int i; // [sp+4Ch] [bp-4h]@1
- memset(&v2, -858993460, 0x44u);
- for ( i = 0; i < 102; ++i )
- {
- if ( dword_4368E4[2 * i] == a1 )
- return dword_4368E0[2 * i];
- }
- return -1;
- }
- // 4368E0: using guessed type int dword_4368E0[];
- // 4368E4: using guessed type int dword_4368E4[];
- //----- (0040E760) --------------------------------------------------------
- int __cdecl sub_40E760(int a1, unsigned int a2, int a3)
- {
- int v3; // eax@8
- char v5; // [sp+0h] [bp-50h]@0
- char v6; // [sp+Ch] [bp-44h]@1
- unsigned int i; // [sp+4Ch] [bp-4h]@5
- memset(&v6, -858993460, 0x44u);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\ia5\\der_length_ia5_string.c",
- word_43C22C + 3);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"octets != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\ia5\\der_length_ia5_string.c",
- word_43C22C + 4);
- for ( i = 0; i < a2; ++i )
- {
- if ( sub_40E6A0(*(_BYTE *)(i + a1)) == -1 )
- {
- v3 = 16;
- return _chkesp(1, v3, v5);
- }
- }
- if ( a2 < 0x80 )
- {
- *(_DWORD *)a3 = a2 + 2;
- LABEL_19:
- v3 = 0;
- return _chkesp(1, v3, v5);
- }
- if ( a2 < 0x100 )
- {
- *(_DWORD *)a3 = a2 + 3;
- goto LABEL_19;
- }
- if ( a2 < 0x10000 )
- {
- *(_DWORD *)a3 = a2 + 4;
- goto LABEL_19;
- }
- if ( a2 < 0x1000000 )
- {
- *(_DWORD *)a3 = a2 + 5;
- goto LABEL_19;
- }
- v3 = 16;
- return _chkesp(1, v3, v5);
- }
- // 43C22C: using guessed type __int16 word_43C22C;
- //----- (0040E870) --------------------------------------------------------
- int __cdecl sub_40E870(int a1, unsigned int a2, int a3, int a4)
- {
- int v4; // eax@8
- int v5; // edx@17
- char v7; // [sp+0h] [bp-60h]@0
- char v8; // [sp+Ch] [bp-54h]@1
- int v9; // [sp+4Ch] [bp-14h]@27
- int v10; // [sp+50h] [bp-10h]@27
- int v11; // [sp+54h] [bp-Ch]@16
- int i; // [sp+58h] [bp-8h]@12
- int v13; // [sp+5Ch] [bp-4h]@11
- memset(&v8, -858993460, 0x54u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\ia5\\der_decode_ia5_string.c",
- word_43C230 + 4);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"out != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\ia5\\der_decode_ia5_string.c",
- word_43C230 + 5);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\ia5\\der_decode_ia5_string.c",
- word_43C230 + 6);
- if ( a2 >= 2 )
- {
- if ( (*(_BYTE *)a1 & 0x1F) == 22 )
- {
- v13 = 1;
- if ( *(_BYTE *)(a1 + 1) & 0x80 )
- {
- i = *(_BYTE *)(v13 + a1) & 0x7F;
- if ( !i || (unsigned int)i > 3 || i + v13 > a2 )
- {
- v4 = 7;
- return _chkesp(1, v4, v7);
- }
- v11 = 0;
- ++v13;
- while ( 1 )
- {
- v5 = i--;
- if ( !v5 )
- break;
- v11 = *(_BYTE *)(v13++ + a1) | (v11 << 8);
- }
- }
- else
- {
- v11 = *(_BYTE *)(v13++ + a1) & 0x7F;
- }
- if ( (unsigned int)v11 <= *(_DWORD *)a4 )
- {
- if ( v13 + v11 <= a2 )
- {
- for ( i = 0; i < (unsigned int)v11; ++i )
- {
- v9 = *(_BYTE *)(v13++ + a1);
- v10 = sub_40E700(v9);
- if ( v10 == -1 )
- {
- v4 = 16;
- return _chkesp(1, v4, v7);
- }
- *(_BYTE *)(i + a3) = v10;
- }
- *(_DWORD *)a4 = i;
- v4 = 0;
- }
- else
- {
- v4 = 7;
- }
- }
- else
- {
- *(_DWORD *)a4 = v11;
- v4 = 6;
- }
- }
- else
- {
- v4 = 7;
- }
- }
- else
- {
- v4 = 7;
- }
- return _chkesp(1, v4, v7);
- }
- // 43C230: using guessed type __int16 word_43C230;
- //----- (0040EA60) --------------------------------------------------------
- int __cdecl sub_40EA60(unsigned int a1)
- {
- char v2; // [sp+Ch] [bp-44h]@1
- int v3; // [sp+4Ch] [bp-4h]@1
- memset(&v2, -858993460, 0x44u);
- v3 = 0;
- while ( a1 )
- {
- ++v3;
- a1 >>= 1;
- }
- return v3;
- }
- //----- (0040EAB0) --------------------------------------------------------
- int __cdecl sub_40EAB0(int a1, unsigned int a2, int a3)
- {
- int v3; // eax@6
- char v5; // [sp+0h] [bp-5Ch]@0
- char v6; // [sp+Ch] [bp-50h]@1
- unsigned int v7; // [sp+4Ch] [bp-10h]@11
- int v8; // [sp+50h] [bp-Ch]@13
- unsigned int v9; // [sp+54h] [bp-8h]@11
- unsigned int i; // [sp+58h] [bp-4h]@11
- memset(&v6, -858993460, 0x50u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"words != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\object_identifier\\der_length_object_identifier.c",
- word_43C234 + 3);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\object_identifier\\der_length_object_identifier.c",
- word_43C234 + 4);
- if ( a2 >= 2 )
- {
- if ( *(_DWORD *)a1 <= 3u && (*(_DWORD *)a1 >= 2u || *(_DWORD *)(a1 + 4) <= 0x27u) )
- {
- v9 = 0;
- v7 = *(_DWORD *)(a1 + 4) + 40 * *(_DWORD *)a1;
- for ( i = 1; i < a2; ++i )
- {
- v8 = sub_40EA60(v7);
- v9 += (v8 % 7u != 0) + v8 / 7u + (v7 == 0);
- if ( i < a2 - 1 )
- v7 = *(_DWORD *)(a1 + 4 * i + 4);
- }
- if ( v9 >= 0x80 )
- {
- if ( v9 >= 0x100 )
- {
- if ( v9 >= 0x10000 )
- {
- v3 = 16;
- return _chkesp(1, v3, v5);
- }
- v9 += 4;
- }
- else
- {
- v9 += 3;
- }
- }
- else
- {
- v9 += 2;
- }
- *(_DWORD *)a3 = v9;
- v3 = 0;
- return _chkesp(1, v3, v5);
- }
- v3 = 16;
- }
- else
- {
- v3 = 16;
- }
- return _chkesp(1, v3, v5);
- }
- // 43C234: using guessed type __int16 word_43C234;
- //----- (0040EC30) --------------------------------------------------------
- int __cdecl sub_40EC30(int a1, unsigned int a2, int a3, int a4)
- {
- int v4; // eax@8
- int v5; // edx@11
- int v6; // ecx@19
- int v7; // edx@25
- int v8; // edx@26
- char v10; // [sp+0h] [bp-5Ch]@0
- char v11; // [sp+Ch] [bp-50h]@1
- int i; // [sp+4Ch] [bp-10h]@14
- int v13; // [sp+50h] [bp-Ch]@24
- int v14; // [sp+54h] [bp-8h]@18
- int v15; // [sp+58h] [bp-4h]@11
- memset(&v11, -858993460, 0x50u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\object_identifier\\der_decode_object_identifier.c",
- word_43C238 + 3);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"words != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\object_identifier\\der_decode_object_identifier.c",
- word_43C238 + 4);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\object_identifier\\der_decode_object_identifier.c",
- word_43C238 + 5);
- if ( a2 >= 3 )
- {
- if ( *(_DWORD *)a4 >= 2u )
- {
- v15 = 0;
- v5 = *(_BYTE *)a1 & 0x1F;
- v15 = 1;
- if ( v5 == 6 )
- {
- if ( (signed int)*(_BYTE *)(v15 + a1) >= 128 )
- {
- if ( (signed int)*(_BYTE *)(v15 + a1) < 129 || (signed int)*(_BYTE *)(v15 + a1) > 130 )
- {
- v4 = 7;
- return _chkesp(1, v4, v10);
- }
- v14 = *(_BYTE *)(v15++ + a1) & 0x7F;
- for ( i = 0; ; i = *(_BYTE *)(v15++ + a1) | (i << 8) )
- {
- v6 = v14--;
- if ( !v6 )
- break;
- }
- }
- else
- {
- i = *(_BYTE *)(v15++ + a1);
- }
- if ( (unsigned int)i >= 1 && v15 + i <= a2 )
- {
- v14 = 0;
- v13 = 0;
- while ( 1 )
- {
- v7 = i--;
- if ( !v7 )
- break;
- v13 = *(_BYTE *)(v15 + a1) & 0x7F | (v13 << 7);
- v8 = *(_BYTE *)(v15++ + a1) & 0x80;
- if ( !v8 )
- {
- if ( (unsigned int)v14 >= *(_DWORD *)a4 )
- {
- v4 = 6;
- return _chkesp(1, v4, v10);
- }
- if ( v14 )
- {
- *(_DWORD *)(a3 + 4 * v14++) = v13;
- }
- else
- {
- *(_DWORD *)a3 = v13 / 0x28u;
- *(_DWORD *)(a3 + 4) = v13 % 0x28u;
- v14 = 2;
- }
- v13 = 0;
- }
- }
- *(_DWORD *)a4 = v14;
- v4 = 0;
- }
- else
- {
- v4 = 7;
- }
- }
- else
- {
- v4 = 7;
- }
- }
- else
- {
- v4 = 6;
- }
- }
- else
- {
- v4 = 7;
- }
- return _chkesp(1, v4, v10);
- }
- // 43C238: using guessed type __int16 word_43C238;
- //----- (0040EEA0) --------------------------------------------------------
- int __cdecl sub_40EEA0(unsigned int a1, int a2)
- {
- int v2; // eax@11
- char v4; // [sp+0h] [bp-4Ch]@0
- char v5; // [sp+Ch] [bp-40h]@1
- memset(&v5, -858993460, 0x40u);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\octet\\der_length_octet_string.c",
- word_43C23C + 1);
- if ( a1 < 0x80 )
- {
- *(_DWORD *)a2 = a1 + 2;
- LABEL_12:
- v2 = 0;
- return _chkesp(1, v2, v4);
- }
- if ( a1 < 0x100 )
- {
- *(_DWORD *)a2 = a1 + 3;
- goto LABEL_12;
- }
- if ( a1 < 0x10000 )
- {
- *(_DWORD *)a2 = a1 + 4;
- goto LABEL_12;
- }
- if ( a1 < 0x1000000 )
- {
- *(_DWORD *)a2 = a1 + 5;
- goto LABEL_12;
- }
- v2 = 16;
- return _chkesp(1, v2, v4);
- }
- // 43C23C: using guessed type __int16 word_43C23C;
- //----- (0040EF50) --------------------------------------------------------
- int __cdecl sub_40EF50(int a1, unsigned int a2, int a3, int a4)
- {
- int v4; // eax@8
- int v5; // edx@17
- char v7; // [sp+0h] [bp-58h]@0
- char v8; // [sp+Ch] [bp-4Ch]@1
- int v9; // [sp+4Ch] [bp-Ch]@16
- int i; // [sp+50h] [bp-8h]@12
- int v11; // [sp+54h] [bp-4h]@11
- memset(&v8, -858993460, 0x4Cu);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\octet\\der_decode_octet_string.c",
- word_43C240 + 3);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"out != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\octet\\der_decode_octet_string.c",
- word_43C240 + 4);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\octet\\der_decode_octet_string.c",
- word_43C240 + 5);
- if ( a2 >= 2 )
- {
- if ( (*(_BYTE *)a1 & 0x1F) == 4 )
- {
- v11 = 1;
- if ( *(_BYTE *)(a1 + 1) & 0x80 )
- {
- i = *(_BYTE *)(v11 + a1) & 0x7F;
- if ( !i || (unsigned int)i > 3 || i + v11 > a2 )
- {
- v4 = 7;
- return _chkesp(1, v4, v7);
- }
- v9 = 0;
- ++v11;
- while ( 1 )
- {
- v5 = i--;
- if ( !v5 )
- break;
- v9 = *(_BYTE *)(v11++ + a1) | (v9 << 8);
- }
- }
- else
- {
- v9 = *(_BYTE *)(v11++ + a1) & 0x7F;
- }
- if ( (unsigned int)v9 <= *(_DWORD *)a4 )
- {
- if ( v11 + v9 <= a2 )
- {
- for ( i = 0; i < (unsigned int)v9; ++i )
- *(_BYTE *)(i + a3) = *(_BYTE *)(v11++ + a1);
- *(_DWORD *)a4 = i;
- v4 = 0;
- }
- else
- {
- v4 = 7;
- }
- }
- else
- {
- *(_DWORD *)a4 = v9;
- v4 = 6;
- }
- }
- else
- {
- v4 = 7;
- }
- }
- else
- {
- v4 = 7;
- }
- return _chkesp(1, v4, v7);
- }
- // 43C240: using guessed type __int16 word_43C240;
- //----- (0040F120) --------------------------------------------------------
- int __cdecl sub_40F120(unsigned int a1, int a2)
- {
- int v2; // eax@9
- char v4; // [sp+0h] [bp-50h]@0
- char v5; // [sp+Ch] [bp-44h]@1
- unsigned int v6; // [sp+4Ch] [bp-4h]@3
- memset(&v5, -858993460, 0x44u);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\bit\\der_length_bit_string.c",
- word_43C244 + 2);
- v6 = (a1 >> 3) + ((a1 & 7) != 0) + 1;
- if ( v6 < 0x80 )
- {
- *(_DWORD *)a2 = v6 + 2;
- LABEL_10:
- v2 = 0;
- return _chkesp(1, v2, v4);
- }
- if ( v6 < 0x100 )
- {
- *(_DWORD *)a2 = v6 + 3;
- goto LABEL_10;
- }
- if ( v6 < 0x10000 )
- {
- *(_DWORD *)a2 = v6 + 4;
- goto LABEL_10;
- }
- v2 = 16;
- return _chkesp(1, v2, v4);
- }
- // 43C244: using guessed type __int16 word_43C244;
- //----- (0040F1D0) --------------------------------------------------------
- int __cdecl sub_40F1D0(int a1, unsigned int a2, int a3, int a4)
- {
- int v4; // eax@8
- int v5; // ecx@16
- char v7; // [sp+0h] [bp-5Ch]@0
- char v8; // [sp+Ch] [bp-50h]@1
- int j; // [sp+4Ch] [bp-10h]@12
- int v10; // [sp+50h] [bp-Ch]@11
- int v11; // [sp+54h] [bp-8h]@23
- int i; // [sp+58h] [bp-4h]@15
- memset(&v8, -858993460, 0x50u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\bit\\der_decode_bit_string.c",
- word_43C248 + 3);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"out != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\bit\\der_decode_bit_string.c",
- word_43C248 + 4);
- if ( !a4 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\bit\\der_decode_bit_string.c",
- word_43C248 + 5);
- if ( a2 >= 4 )
- {
- if ( (*(_BYTE *)a1 & 0x1F) == 3 )
- {
- v10 = 1;
- if ( *(_BYTE *)(a1 + 1) & 0x80 )
- {
- j = *(_BYTE *)(v10++ + a1) & 0x7F;
- if ( !j || (unsigned int)j > 2 )
- {
- v4 = 7;
- return _chkesp(1, v4, v7);
- }
- for ( i = 0; ; i = *(_BYTE *)(v10++ + a1) | (i << 8) )
- {
- v5 = j--;
- if ( !v5 )
- break;
- }
- }
- else
- {
- i = *(_BYTE *)(v10++ + a1) & 0x7F;
- }
- if ( i && v10 + i <= a2 )
- {
- v11 = 8 * i - 8 - (*(_BYTE *)(v10++ + a1) & 7);
- if ( (unsigned int)v11 <= *(_DWORD *)a4 )
- {
- for ( j = 0; j < (unsigned int)v11; ++j )
- {
- *(_BYTE *)(j + a3) = ((1 << (7 - (j & 7))) & *(_BYTE *)(v10 + a1)) != 0;
- if ( (j & 7) == 7 )
- ++v10;
- }
- *(_DWORD *)a4 = v11;
- v4 = 0;
- }
- else
- {
- *(_DWORD *)a4 = v11;
- v4 = 6;
- }
- }
- else
- {
- v4 = 7;
- }
- }
- else
- {
- v4 = 7;
- }
- }
- else
- {
- v4 = 16;
- }
- return _chkesp(1, v4, v7);
- }
- // 43C248: using guessed type __int16 word_43C248;
- //----- (0040F3F0) --------------------------------------------------------
- int __cdecl sub_40F3F0(unsigned int a1, int a2)
- {
- char v3; // [sp+0h] [bp-58h]@0
- char v4; // [sp+Ch] [bp-4Ch]@1
- unsigned int i; // [sp+50h] [bp-8h]@3
- int v6; // [sp+54h] [bp-4h]@3
- memset(&v4, -858993460, 0x4Cu);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\short_integer\\der_length_short_integer.c",
- word_43C24C + 3);
- v6 = 0;
- for ( i = a1; i; i >>= 8 )
- ++v6;
- if ( !v6 )
- v6 = 1;
- *(_DWORD *)a2 = (((1 << (8 * v6 - 1)) & a1) != 0) + v6 + 2;
- return _chkesp(1, 0, v3);
- }
- // 43C24C: using guessed type __int16 word_43C24C;
- //----- (0040F4C0) --------------------------------------------------------
- int __cdecl sub_40F4C0(int a1, unsigned int a2, int a3)
- {
- int v3; // eax@6
- int v4; // eax@7
- int v5; // eax@12
- char v7; // [sp+0h] [bp-58h]@0
- char v8; // [sp+Ch] [bp-4Ch]@1
- int i; // [sp+4Ch] [bp-Ch]@11
- int v10; // [sp+50h] [bp-8h]@7
- int v11; // [sp+54h] [bp-4h]@9
- memset(&v8, -858993460, 0x4Cu);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"num != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\short_integer\\der_decode_short_integer.c",
- word_43C250 + 3);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\short_integer\\der_decode_short_integer.c",
- word_43C250 + 4);
- if ( a2 >= 2 )
- {
- v10 = 0;
- v4 = *(_BYTE *)a1 & 0x1F;
- v10 = 1;
- if ( v4 == 2 )
- {
- v11 = *(_BYTE *)(v10++ + a1);
- if ( v11 + v10 <= a2 )
- {
- for ( i = 0; ; i = *(_BYTE *)(v10++ + a1) | (i << 8) )
- {
- v5 = v11--;
- if ( !v5 )
- break;
- }
- *(_DWORD *)a3 = i;
- v3 = 0;
- }
- else
- {
- v3 = 7;
- }
- }
- else
- {
- v3 = 7;
- }
- }
- else
- {
- v3 = 7;
- }
- return _chkesp(1, v3, v7);
- }
- // 43C250: using guessed type __int16 word_43C250;
- //----- (0040F5E0) --------------------------------------------------------
- int __cdecl sub_40F5E0(int a1, int a2)
- {
- int v2; // eax@5
- int v3; // eax@6
- int v4; // eax@7
- int v5; // eax@10
- int v6; // eax@10
- int v7; // eax@11
- int v8; // eax@11
- int v9; // eax@11
- int v10; // esi@11
- int v11; // eax@11
- int v12; // eax@12
- char v14; // [sp+0h] [bp-58h]@5
- char v15; // [sp+Ch] [bp-4Ch]@1
- int v16; // [sp+4Ch] [bp-Ch]@8
- unsigned int v17; // [sp+50h] [bp-8h]@10
- unsigned int v18; // [sp+54h] [bp-4h]@10
- int v19; // [sp+58h] [bp+0h]@5
- memset(&v15, -858993460, 0x4Cu);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"num != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\integer\\der_length_integer.c",
- word_43C254 + 4);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\integer\\der_length_integer.c",
- word_43C254 + 5);
- v2 = dword_441810(a1, 0);
- if ( _chkesp(&v14 == &v14, v2, (unsigned int)&v19) == -1 )
- {
- v16 = 0;
- v7 = dword_441814(a1);
- v8 = _chkesp(&v14 == &v14, v7, (unsigned int)&v19);
- v18 = 8 - (v8 & 7) + v8;
- v9 = dword_441818(a1);
- v10 = _chkesp(&v14 == &v14, v9, (unsigned int)&v19) + 1;
- v11 = dword_441814(a1);
- if ( v10 == _chkesp(&v14 == &v14, v11, (unsigned int)&v14) )
- {
- v12 = dword_441814(a1);
- if ( !(_chkesp(&v14 == &v14, v12, (unsigned int)&v14) & 7) )
- --v18;
- }
- v18 >>= 3;
- v17 = v18;
- }
- else
- {
- v3 = dword_441814(a1);
- v16 = !(_chkesp(&v14 == &v14, v3, (unsigned int)&v19) & 7)
- || (v4 = dword_441810(a1, 0), (_chkesp(&v14 == &v14, v4, (unsigned int)&v19) == 0) == 1);
- v5 = dword_441828(a1);
- v6 = _chkesp(&v14 == &v14, v5, (unsigned int)&v19);
- v17 = v6 + v16;
- v18 = v6 + v16;
- }
- if ( v18 >= 0x80 )
- {
- ++v17;
- while ( v18 )
- {
- ++v17;
- v18 >>= 8;
- }
- }
- else
- {
- ++v17;
- }
- ++v17;
- *(_DWORD *)a2 = v17;
- return _chkesp(1, 0, v14);
- }
- // 43C254: using guessed type __int16 word_43C254;
- // 441810: using guessed type int (__cdecl *dword_441810)(_DWORD, _DWORD);
- // 441814: using guessed type int (__cdecl *dword_441814)(_DWORD);
- // 441818: using guessed type int (__cdecl *dword_441818)(_DWORD);
- // 441828: using guessed type int (__cdecl *dword_441828)(_DWORD);
- //----- (0040F7D0) --------------------------------------------------------
- int __cdecl sub_40F7D0(int a1, unsigned int a2, int a3)
- {
- int v3; // eax@6
- int v4; // eax@7
- int v5; // eax@12
- int v6; // eax@20
- int v7; // eax@24
- int v8; // eax@27
- int v9; // eax@29
- int v10; // eax@29
- int v11; // eax@29
- int v12; // eax@30
- int v13; // eax@31
- int v14; // eax@32
- char v16; // [sp+0h] [bp-60h]@12
- char v17; // [sp+Ch] [bp-54h]@1
- int v18; // [sp+4Ch] [bp-14h]@27
- int v19; // [sp+50h] [bp-10h]@12
- int v20; // [sp+54h] [bp-Ch]@9
- int i; // [sp+58h] [bp-8h]@19
- int v22; // [sp+5Ch] [bp-4h]@7
- int v23; // [sp+60h] [bp+0h]@12
- memset(&v17, -858993460, 0x54u);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"num != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\integer\\der_decode_integer.c",
- word_43C258 + 4);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\integer\\der_decode_integer.c",
- word_43C258 + 5);
- if ( a2 >= 3 )
- {
- v22 = 0;
- v4 = *(_BYTE *)a1 & 0x1F;
- v22 = 1;
- if ( v4 == 2 )
- {
- v20 = *(_BYTE *)(v22++ + a1);
- if ( v20 & 0x80 )
- {
- v20 &= 0x7Fu;
- if ( v20 + v22 > a2 || (unsigned int)v20 > 4 || !v20 )
- {
- v3 = 7;
- return _chkesp(1, v3, v16);
- }
- for ( i = 0; ; i = (i << 8) | *(_BYTE *)(v22++ + a1) )
- {
- v6 = v20--;
- if ( !v6 )
- break;
- }
- if ( i + v22 > a2 )
- {
- v3 = 7;
- return _chkesp(1, v3, v16);
- }
- v7 = dword_441830(a3, v22 + a1, i);
- v19 = _chkesp(&v16 == &v16, v7, (unsigned int)&v23);
- if ( v19 )
- {
- v3 = v19;
- return _chkesp(1, v3, v16);
- }
- }
- else
- {
- if ( v20 + v22 > a2 )
- {
- v3 = 7;
- return _chkesp(1, v3, v16);
- }
- v5 = dword_441830(a3, v22 + a1, v20);
- v19 = _chkesp(&v16 == &v16, v5, (unsigned int)&v23);
- if ( v19 )
- {
- v3 = v19;
- return _chkesp(1, v3, v16);
- }
- }
- if ( *(_BYTE *)(v22 + a1) & 0x80 )
- {
- v8 = dword_4417E8(&v18);
- if ( _chkesp(&v16 == &v16, v8, (unsigned int)&v23) )
- {
- v3 = 13;
- return _chkesp(1, v3, v16);
- }
- v9 = dword_441814(a3);
- v10 = _chkesp(&v16 == &v16, v9, (unsigned int)&v23);
- v11 = dword_44181C(v18, v10);
- if ( _chkesp(&v16 == &v16, v11, (unsigned int)&v23)
- || (v12 = dword_44183C(a3, v18, a3), _chkesp(&v16 == &v16, v12, (unsigned int)&v23)) )
- {
- v13 = dword_4417F0(v18);
- _chkesp(&v16 == &v16, v13, (unsigned int)&v23);
- v3 = 13;
- return _chkesp(1, v3, v16);
- }
- v14 = dword_4417F0(v18);
- _chkesp(&v16 == &v16, v14, (unsigned int)&v23);
- }
- v3 = 0;
- return _chkesp(1, v3, v16);
- }
- v3 = 7;
- }
- else
- {
- v3 = 7;
- }
- return _chkesp(1, v3, v16);
- }
- // 43C258: using guessed type __int16 word_43C258;
- // 4417E8: using guessed type int (__cdecl *dword_4417E8)(_DWORD);
- // 4417F0: using guessed type int (__cdecl *dword_4417F0)(_DWORD);
- // 441814: using guessed type int (__cdecl *dword_441814)(_DWORD);
- // 44181C: using guessed type int (__cdecl *dword_44181C)(_DWORD, _DWORD);
- // 441830: using guessed type int (__cdecl *dword_441830)(_DWORD, _DWORD, _DWORD);
- // 44183C: using guessed type int (__cdecl *dword_44183C)(_DWORD, _DWORD, _DWORD);
- //----- (0040FA60) --------------------------------------------------------
- int __cdecl sub_40FA60(int a1)
- {
- char v2; // [sp+0h] [bp-4Ch]@0
- char v3; // [sp+Ch] [bp-40h]@1
- memset(&v3, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\boolean\\der_length_boolean.c",
- word_43C25C + 1);
- *(_DWORD *)a1 = 3;
- return _chkesp(1, 0, v2);
- }
- // 43C25C: using guessed type __int16 word_43C25C;
- //----- (0040FAC0) --------------------------------------------------------
- int __cdecl sub_40FAC0(int a1, int a2, int a3)
- {
- int v3; // eax@10
- char v5; // [sp+0h] [bp-4Ch]@0
- char v6; // [sp+Ch] [bp-40h]@1
- memset(&v6, -858993460, 0x40u);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"in != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\boolean\\der_decode_boolean.c",
- word_43C260 + 1);
- if ( !a3 )
- errorFunctionMaybe(
- (int)"out != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\boolean\\der_decode_boolean.c",
- word_43C260 + 2);
- if ( a2 != 3 || *(_BYTE *)a1 != 1 || *(_BYTE *)(a1 + 1) != 1 || *(_BYTE *)(a1 + 2) && *(_BYTE *)(a1 + 2) != 255 )
- {
- v3 = 16;
- }
- else
- {
- *(_DWORD *)a3 = *(_BYTE *)(a1 + 2) == 255;
- v3 = 0;
- }
- return _chkesp(1, v3, v5);
- }
- // 43C260: using guessed type __int16 word_43C260;
- //----- (0040FB90) --------------------------------------------------------
- int __cdecl sub_40FB90(int a1, int a2)
- {
- char v3; // [sp+0h] [bp-4Ch]@0
- char v4; // [sp+Ch] [bp-40h]@1
- memset(&v4, -858993460, 0x40u);
- if ( !a2 )
- errorFunctionMaybe(
- (int)"outlen != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\utctime\\der_length_utctime.c",
- word_43C264 + 1);
- if ( !a1 )
- errorFunctionMaybe(
- (int)"utctime != NULL",
- (int)"C:\\cr\\doc\\libs\\libtomcrypt\\src\\pk\\asn1\\der\\utctime\\der_length_utctime.c",
- word_43C264 + 2);
- if ( *(_DWORD *)(a1 + 28) || *(_DWORD *)(a1 + 32) )
- *(_DWORD *)a2 = 19;
- else
- *(_DWORD *)a2 = 15;
- return _chkesp(1, 0, v3);
- }
- // 43C264: using guessed type __int16 word_43C264;
- //----- (004106F0) --------------------------------------------------------
- void __cdecl CrtCheckMemoryWrapperWrapper(int a1)
- {
- CrtCheckMemoryWrapper(a1, 1);
- }
- //----- (00410710) --------------------------------------------------------
- void __cdecl CrtCheckMemoryWrapper(int a1, signed int a2)
- {
- int v2; // ecx@13
- int v3; // ecx@20
- char v4; // [sp+0h] [bp-10h]@0
- int lpMem; // [sp+Ch] [bp-4h]@13
- if ( dword_43C268 & 4 && !sub_410DD0() && _CrtDbgReport(2, (int)"dbgheap.c", 1026, 0, "_CrtCheckMemory()", v4) == 1 )
- __debugbreak();
- if ( a1 )
- {
- if ( off_43C520(3, a1, 0, a2, 0, 0, 0) )
- {
- if ( !sub_411210(a1) && _CrtDbgReport(2, (int)"dbgheap.c", 1044, 0, "_CrtIsValidHeapPointer(pUserData)", v4) == 1 )
- __debugbreak();
- v2 = a1 - 32;
- lpMem = a1 - 32;
- if ( (*(_DWORD *)(a1 - 32 + 20) & 0xFFFF) != 4 )
- {
- v2 = a1 - 32;
- if ( *(_DWORD *)(lpMem + 20) != 1 )
- {
- if ( (*(_DWORD *)(lpMem + 20) & 0xFFFF) != 2 )
- {
- v2 = a1 - 32;
- if ( *(_DWORD *)(lpMem + 20) != 3 )
- {
- if ( _CrtDbgReport(2, (int)"dbgheap.c", 1050, 0, "_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)", v4) == 1 )
- __debugbreak();
- }
- }
- }
- }
- if ( !(dword_43C268 & 4) )
- {
- LOBYTE(v2) = byte_43C274;
- if ( !CheckBytes(lpMem + 28, v2, 4)
- && _CrtDbgReport(
- 1,
- 0,
- 0,
- 0,
- "DAMAGE: before %hs block (#%d) at 0x%08X.\n",
- *(_DWORD *)&off_43C278[4 * (*(_DWORD *)(lpMem + 20) & 0xFFFF)]) == 1 )
- __debugbreak();
- LOBYTE(v3) = byte_43C274;
- if ( !CheckBytes(lpMem + *(_DWORD *)(lpMem + 16) + 32, v3, 4)
- && _CrtDbgReport(
- 1,
- 0,
- 0,
- 0,
- "DAMAGE: after %hs block (#%d) at 0x%08X.\n",
- *(_DWORD *)&off_43C278[4 * (*(_DWORD *)(lpMem + 20) & 0xFFFF)]) == 1 )
- __debugbreak();
- }
- if ( *(_DWORD *)(lpMem + 20) == 3 )
- {
- if ( *(_DWORD *)(lpMem + 12) != -19088708 || *(_DWORD *)(lpMem + 24) )
- {
- if ( _CrtDbgReport(
- 2,
- (int)"dbgheap.c",
- 1071,
- 0,
- "pHead->nLine == IGNORE_LINE && pHead->lRequest == IGNORE_REQ",
- v4) == 1 )
- __debugbreak();
- }
- memset((void *)lpMem, (unsigned __int8)byte_43C275, *(_DWORD *)(lpMem + 16) + 36);
- sub_4146B0((LPVOID)lpMem);
- }
- else
- {
- if ( *(_DWORD *)(lpMem + 20) == 2 && a2 == 1 )
- a2 = 2;
- if ( *(_DWORD *)(lpMem + 20) != a2
- && _CrtDbgReport(2, (int)"dbgheap.c", 1084, 0, "pHead->nBlockUse == nBlockUse", v4) == 1 )
- __debugbreak();
- dword_4414D4 -= *(_DWORD *)(lpMem + 16);
- if ( dword_43C268 & 2 )
- {
- *(_DWORD *)(lpMem + 20) = 0;
- memset((void *)a1, (unsigned __int8)byte_43C275, *(_DWORD *)(a1 - 32 + 16));
- }
- else
- {
- if ( *(_DWORD *)lpMem )
- {
- *(_DWORD *)(*(_DWORD *)lpMem + 4) = *(_DWORD *)(lpMem + 4);
- }
- else
- {
- if ( dword_4414C8 != lpMem && _CrtDbgReport(2, (int)"dbgheap.c", 1099, 0, "_pLastBlock == pHead", v4) == 1 )
- __debugbreak();
- dword_4414C8 = *(_DWORD *)(lpMem + 4);
- }
- if ( *(_DWORD *)(lpMem + 4) )
- {
- **(_DWORD **)(lpMem + 4) = *(_DWORD *)lpMem;
- }
- else
- {
- if ( dword_4414D0 != lpMem && _CrtDbgReport(2, (int)"dbgheap.c", 1109, 0, "_pFirstBlock == pHead", v4) == 1 )
- __debugbreak();
- dword_4414D0 = *(_DWORD *)lpMem;
- }
- memset((void *)lpMem, (unsigned __int8)byte_43C275, *(_DWORD *)(lpMem + 16) + 36);
- sub_4146B0((LPVOID)lpMem);
- }
- }
- }
- else
- {
- if ( _CrtDbgReport(0, 0, 0, 0, "%s", (unsigned int)"Client hook free failure.\n") == 1 )
- __debugbreak();
- }
- }
- }
- // 410D40: using guessed type _DWORD __cdecl CheckBytes(_DWORD, _DWORD, _DWORD);
- // 43C268: using guessed type int dword_43C268;
- // 43C274: using guessed type char byte_43C274;
- // 43C275: using guessed type char byte_43C275;
- // 43C520: using guessed type int (__cdecl *off_43C520)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
- // 4414C8: using guessed type int dword_4414C8;
- // 4414D0: using guessed type int dword_4414D0;
- // 4414D4: using guessed type int dword_4414D4;
- //----- (00410DD0) --------------------------------------------------------
- signed int __cdecl sub_410DD0()
- {
- signed int result; // eax@2
- int v1; // eax@25
- int v2; // ecx@29
- int v3; // edx@37
- int v4; // [sp+10h] [bp-14h]@27
- signed int v5; // [sp+14h] [bp-10h]@23
- signed int v6; // [sp+18h] [bp-Ch]@3
- int i; // [sp+1Ch] [bp-8h]@21
- signed int v8; // [sp+20h] [bp-4h]@20
- if ( dword_43C268 & 1 )
- {
- v6 = sub_414780();
- if ( v6 == -1 || v6 == -2 )
- {
- v8 = 1;
- for ( i = dword_4414D0; i; i = *(_DWORD *)i )
- {
- v5 = 1;
- if ( (*(_DWORD *)(i + 20) & 0xFFFF) != 4
- && *(_DWORD *)(i + 20) != 1
- && (v1 = i, (*(_DWORD *)(i + 20) & 0xFFFF) != 2)
- && *(_DWORD *)(i + 20) != 3 )
- {
- v4 = (int)"DAMAGED";
- }
- else
- {
- v1 = i;
- v4 = *(_DWORD *)&off_43C278[4 * (*(_DWORD *)(i + 20) & 0xFFFF)];
- }
- LOBYTE(v1) = byte_43C274;
- if ( !CheckBytes(i + 28, v1, 4) )
- {
- if ( _CrtDbgReport(0, 0, 0, 0, "DAMAGE: before %hs block (#%d) at 0x%08X.\n", v4) == 1 )
- __debugbreak();
- v5 = 0;
- }
- LOBYTE(v2) = byte_43C274;
- if ( !CheckBytes(i + *(_DWORD *)(i + 16) + 32, v2, 4) )
- {
- if ( _CrtDbgReport(0, 0, 0, 0, "DAMAGE: after %hs block (#%d) at 0x%08X.\n", v4) == 1 )
- __debugbreak();
- v5 = 0;
- }
- v3 = i;
- if ( !*(_DWORD *)(i + 20) )
- {
- LOBYTE(v3) = byte_43C275;
- if ( !CheckBytes(i + 32, v3, *(_DWORD *)(i + 16)) )
- {
- if ( _CrtDbgReport(0, 0, 0, 0, "DAMAGE: on top of Free block at 0x%08X.\n", i + 32) == 1 )
- __debugbreak();
- v5 = 0;
- }
- }
- if ( !v5 )
- {
- if ( *(_DWORD *)(i + 8) && _CrtDbgReport(0, 0, 0, 0, "%hs allocated at file %hs(%d).\n", v4) == 1 )
- __debugbreak();
- if ( _CrtDbgReport(0, 0, 0, 0, "%hs located at 0x%08X is %u bytes long.\n", v4) == 1 )
- __debugbreak();
- v8 = 0;
- }
- }
- }
- else
- {
- switch ( v6 + 6 )
- {
- case 3:
- if ( _CrtDbgReport(0, 0, 0, 0, "%s", (unsigned int)"_heapchk fails with _HEAPBADBEGIN.\n") == 1 )
- __debugbreak();
- break;
- case 2:
- if ( _CrtDbgReport(0, 0, 0, 0, "%s", (unsigned int)"_heapchk fails with _HEAPBADNODE.\n") == 1 )
- __debugbreak();
- break;
- case 1:
- if ( _CrtDbgReport(0, 0, 0, 0, "%s", (unsigned int)"_heapchk fails with _HEAPBADEND.\n") == 1 )
- __debugbreak();
- break;
- case 0:
- if ( _CrtDbgReport(0, 0, 0, 0, "%s", (unsigned int)"_heapchk fails with _HEAPBADPTR.\n") == 1 )
- __debugbreak();
- break;
- default:
- if ( _CrtDbgReport(0, 0, 0, 0, "%s", (unsigned int)"_heapchk fails with unknown return value!\n") == 1 )
- __debugbreak();
- break;
- }
- v8 = 0;
- }
- result = v8;
- }
- else
- {
- result = 1;
- }
- return result;
- }
- // 410D40: using guessed type _DWORD __cdecl CheckBytes(_DWORD, _DWORD, _DWORD);
- // 43C268: using guessed type int dword_43C268;
- // 43C274: using guessed type char byte_43C274;
- // 43C275: using guessed type char byte_43C275;
- // 4414D0: using guessed type int dword_4414D0;
- //----- (00411210) --------------------------------------------------------
- BOOL __cdecl sub_411210(int a1)
- {
- BOOL result; // eax@2
- char v2; // [sp+0h] [bp-10h]@12
- int v3; // [sp+4h] [bp-Ch]@12
- char v4; // [sp+8h] [bp-8h]@12
- int v5; // [sp+Ch] [bp-4h]@6
- if ( a1 )
- {
- if ( _CrtIsValidPointer((void *)(a1 - 32), 0x20u, 1) )
- {
- if ( dword_441CF0 == 3 )
- {
- v5 = __sbh_find_block(a1 - 32);
- if ( v5 )
- {
- result = __sbh_verify_block(v5, a1 - 32);
- }
- else
- {
- if ( dword_441550 & 0x8000 )
- result = 1;
- else
- result = HeapValidate(hHeap, 0, (LPCVOID)(a1 - 32));
- }
- }
- else
- {
- if ( dword_441CF0 == 2 )
- {
- v3 = __sbh_find_block_0(a1 - 32, &v2, &v4);
- if ( v3 )
- {
- if ( *(_BYTE *)v3 )
- result = 1;
- else
- result = 0;
- }
- else
- {
- if ( dword_441550 & 0x8000 )
- result = 1;
- else
- result = HeapValidate(hHeap, 0, (LPCVOID)(a1 - 32));
- }
- }
- else
- {
- result = HeapValidate(hHeap, 0, (LPCVOID)(a1 - 32));
- }
- }
- }
- else
- {
- result = 0;
- }
- }
- else
- {
- result = 0;
- }
- return result;
- }
- // 4149D0: using guessed type _DWORD __cdecl __sbh_find_block(_DWORD);
- // 414A30: using guessed type _DWORD __cdecl __sbh_verify_block(_DWORD, _DWORD);
- // 4169F0: using guessed type _DWORD __cdecl __sbh_find_block_0(_DWORD, _DWORD, _DWORD);
- // 441550: using guessed type int dword_441550;
- // 441CF0: using guessed type int dword_441CF0;
- //----- (00412AB8) --------------------------------------------------------
- int __usercall sub_412AB8<eax>(int a1<ebp>)
- {
- *(_DWORD *)(a1 - 32) = ***(_DWORD ***)(a1 - 20);
- return _XcptFilter(*(_DWORD *)(a1 - 32), *(struct _EXCEPTION_POINTERS **)(a1 - 20));
- }
- //----- (00412AD3) --------------------------------------------------------
- void __usercall sub_412AD3(int a1<ebp>)
- {
- _exit(*(_DWORD *)(a1 - 32));
- }
- //----- (00413880) --------------------------------------------------------
- LPVOID __cdecl sub_413880(signed int dwBytes)
- {
- LPVOID result; // eax@4
- int v2; // [sp+0h] [bp-4h]@3
- void *v3; // [sp+0h] [bp-4h]@11
- int dwBytesa; // [sp+Ch] [bp+8h]@8
- if ( dword_441CF0 == 3 )
- {
- if ( dwBytes <= (unsigned int)dword_441D20 )
- {
- v2 = __sbh_alloc_block(dwBytes);
- if ( v2 )
- return (LPVOID)v2;
- }
- goto LABEL_14;
- }
- if ( dword_441CF0 != 2 )
- {
- LABEL_14:
- if ( !dwBytes )
- dwBytes = 1;
- return HeapAlloc(hHeap, 0, (dwBytes + 15) & 0xFFFFFFF0);
- }
- if ( dwBytes )
- dwBytesa = (dwBytes + 15) & 0xFFFFFFF0;
- else
- dwBytesa = 16;
- if ( dwBytesa <= (unsigned int)dword_43E574 && (v3 = (void *)__sbh_alloc_block_0((unsigned int)dwBytesa >> 4)) != 0 )
- result = v3;
- else
- result = HeapAlloc(hHeap, 0, dwBytesa);
- return result;
- }
- // 415070: using guessed type _DWORD __cdecl __sbh_alloc_block(_DWORD);
- // 416AF0: using guessed type _DWORD __cdecl __sbh_alloc_block_0(_DWORD);
- // 43E574: using guessed type int dword_43E574;
- // 441CF0: using guessed type int dword_441CF0;
- // 441D20: using guessed type int dword_441D20;
- //----- (00414110) --------------------------------------------------------
- LPVOID __cdecl sub_414110(LPVOID lpMem, signed int dwBytes)
- {
- SIZE_T v3; // eax@11
- int v4; // [sp+0h] [bp-14h]@16
- int v5; // [sp+4h] [bp-10h]@16
- int v6; // [sp+8h] [bp-Ch]@16
- int v7; // [sp+Ch] [bp-8h]@4
- LPVOID v8; // [sp+10h] [bp-4h]@5
- int dwBytesa; // [sp+20h] [bp+Ch]@16
- if ( (unsigned int)dwBytes > 0xFFFFFFE0 )
- return 0;
- if ( dword_441CF0 == 3 )
- {
- v7 = __sbh_find_block(lpMem);
- if ( v7 )
- {
- v8 = 0;
- if ( dwBytes <= (unsigned int)dword_441D20 )
- {
- if ( __sbh_resize_block(v7, lpMem, dwBytes) )
- v8 = lpMem;
- }
- }
- if ( !v7 )
- {
- if ( !dwBytes )
- dwBytes = 1;
- v3 = dwBytes + 15;
- LOBYTE(v3) = (dwBytes + 15) & 0xF0;
- v8 = HeapReAlloc(hHeap, 0x10u, lpMem, v3);
- }
- return v8;
- }
- if ( dword_441CF0 != 2 )
- {
- if ( !dwBytes )
- dwBytes = 1;
- return HeapReAlloc(hHeap, 0x10u, lpMem, (dwBytes + 15) & 0xFFFFFFF0);
- }
- if ( !dwBytes )
- dwBytes = 1;
- dwBytesa = (dwBytes + 15) & 0xFFFFFFF0;
- v5 = __sbh_find_block_0(lpMem, &v4, &v6);
- if ( !v5 )
- return HeapReAlloc(hHeap, 0x10u, lpMem, dwBytesa);
- v8 = 0;
- if ( dwBytesa <= (unsigned int)dword_43E574 && __sbh_resize_block_0(v4, v6, v5, (unsigned int)dwBytesa >> 4) )
- v8 = lpMem;
- return v8;
- }
- // 4149D0: using guessed type _DWORD __cdecl __sbh_find_block(_DWORD);
- // 4158B0: using guessed type _DWORD __cdecl __sbh_resize_block(_DWORD, _DWORD, _DWORD);
- // 4169F0: using guessed type _DWORD __cdecl __sbh_find_block_0(_DWORD, _DWORD, _DWORD);
- // 417160: using guessed type _DWORD __cdecl __sbh_resize_block_0(_DWORD, _DWORD, _DWORD, _DWORD);
- // 43E574: using guessed type int dword_43E574;
- // 441CF0: using guessed type int dword_441CF0;
- // 441D20: using guessed type int dword_441D20;
- //----- (00414290) --------------------------------------------------------
- void *__cdecl sub_414290(LPVOID lpMem, signed int dwBytes)
- {
- void *result; // eax@2
- int v3; // eax@19
- signed int v4; // eax@37
- int v5; // eax@66
- signed int v6; // [sp+0h] [bp-30h]@52
- signed int v7; // [sp+4h] [bp-2Ch]@46
- signed int v8; // [sp+8h] [bp-28h]@21
- signed int Size; // [sp+Ch] [bp-24h]@13
- int v10; // [sp+10h] [bp-20h]@40
- int v11; // [sp+14h] [bp-1Ch]@45
- int v12; // [sp+18h] [bp-18h]@40
- int v13; // [sp+1Ch] [bp-14h]@40
- unsigned int v14; // [sp+20h] [bp-10h]@7
- void *Dst; // [sp+24h] [bp-Ch]@6
- int v16; // [sp+28h] [bp-8h]@12
- int v17; // [sp+2Ch] [bp-4h]@1
- v17 = dwBytes;
- if ( lpMem )
- {
- if ( dwBytes )
- {
- if ( dword_441CF0 == 3 )
- {
- do
- {
- Dst = 0;
- if ( (unsigned int)dwBytes <= 0xFFFFFFE0 )
- {
- v14 = __sbh_find_block(lpMem);
- if ( v14 )
- {
- if ( dwBytes <= (unsigned int)dword_441D20 )
- {
- if ( __sbh_resize_block(v14, lpMem, dwBytes) )
- {
- Dst = lpMem;
- }
- else
- {
- Dst = (void *)__sbh_alloc_block(dwBytes);
- if ( Dst )
- {
- v16 = *((_DWORD *)lpMem - 1) - 1;
- if ( v16 >= (unsigned int)dwBytes )
- Size = dwBytes;
- else
- Size = v16;
- memcpy(Dst, lpMem, Size);
- v14 = __sbh_find_block(lpMem);
- sub_414A90(v14, (int)lpMem);
- }
- }
- }
- if ( !Dst )
- {
- if ( !dwBytes )
- dwBytes = 1;
- v3 = dwBytes + 15;
- LOBYTE(v3) = (dwBytes + 15) & 0xF0;
- dwBytes = v3;
- Dst = HeapAlloc(hHeap, 0, v3);
- if ( Dst )
- {
- v16 = *((_DWORD *)lpMem - 1) - 1;
- if ( v16 >= (unsigned int)dwBytes )
- v8 = dwBytes;
- else
- v8 = v16;
- memcpy(Dst, lpMem, v8);
- sub_414A90(v14, (int)lpMem);
- }
- }
- }
- if ( !v14 )
- {
- if ( !dwBytes )
- dwBytes = 1;
- dwBytes = (dwBytes + 15) & 0xFFFFFFF0;
- Dst = HeapReAlloc(hHeap, 0, lpMem, dwBytes);
- }
- }
- if ( Dst || !dword_441534 )
- return Dst;
- }
- while ( _callnewh(dwBytes) );
- result = 0;
- }
- else
- {
- if ( dword_441CF0 == 2 )
- {
- if ( (unsigned int)dwBytes <= 0xFFFFFFE0 )
- {
- if ( dwBytes )
- {
- v4 = dwBytes + 15;
- LOBYTE(v4) = (dwBytes + 15) & 0xF0;
- dwBytes = v4;
- }
- else
- {
- dwBytes = 16;
- }
- }
- do
- {
- Dst = 0;
- if ( (unsigned int)dwBytes <= 0xFFFFFFE0 )
- {
- v12 = __sbh_find_block_0(lpMem, &v10, &v13);
- if ( v12 )
- {
- if ( dwBytes < (unsigned int)dword_43E574 )
- {
- if ( __sbh_resize_block_0(v10, v13, v12, (unsigned int)dwBytes >> 4) )
- {
- Dst = lpMem;
- }
- else
- {
- Dst = (void *)__sbh_alloc_block_0((unsigned int)dwBytes >> 4);
- if ( Dst )
- {
- v11 = 16 * *(_BYTE *)v12;
- if ( v11 >= (unsigned int)dwBytes )
- v7 = dwBytes;
- else
- v7 = v11;
- memcpy(Dst, lpMem, v7);
- __sbh_free_block(v10, v13, v12);
- }
- }
- }
- if ( !Dst )
- {
- Dst = HeapAlloc(hHeap, 0, dwBytes);
- if ( Dst )
- {
- v11 = 16 * *(_BYTE *)v12;
- if ( v11 >= (unsigned int)dwBytes )
- v6 = dwBytes;
- else
- v6 = v11;
- memcpy(Dst, lpMem, v6);
- __sbh_free_block(v10, v13, v12);
- }
- }
- }
- else
- {
- Dst = HeapReAlloc(hHeap, 0, lpMem, dwBytes);
- }
- }
- if ( Dst || !dword_441534 )
- return Dst;
- }
- while ( _callnewh(dwBytes) );
- result = 0;
- }
- else
- {
- do
- {
- Dst = 0;
- if ( (unsigned int)dwBytes <= 0xFFFFFFE0 )
- {
- if ( !dwBytes )
- dwBytes = 1;
- v5 = dwBytes + 15;
- LOBYTE(v5) = (dwBytes + 15) & 0xF0;
- dwBytes = v5;
- Dst = HeapReAlloc(hHeap, 0, lpMem, v5);
- }
- if ( Dst || !dword_441534 )
- return Dst;
- }
- while ( _callnewh(dwBytes) );
- result = 0;
- }
- }
- }
- else
- {
- sub_4146B0(lpMem);
- result = 0;
- }
- }
- else
- {
- result = (void *)_malloc_base(dwBytes);
- }
- return result;
- }
- // 413770: using guessed type _DWORD __cdecl _callnewh(_DWORD);
- // 4149D0: using guessed type _DWORD __cdecl __sbh_find_block(_DWORD);
- // 415070: using guessed type _DWORD __cdecl __sbh_alloc_block(_DWORD);
- // 4158B0: using guessed type _DWORD __cdecl __sbh_resize_block(_DWORD, _DWORD, _DWORD);
- // 4169F0: using guessed type _DWORD __cdecl __sbh_find_block_0(_DWORD, _DWORD, _DWORD);
- // 416A80: using guessed type _DWORD __cdecl __sbh_free_block(_DWORD, _DWORD, _DWORD);
- // 416AF0: using guessed type _DWORD __cdecl __sbh_alloc_block_0(_DWORD);
- // 417160: using guessed type _DWORD __cdecl __sbh_resize_block_0(_DWORD, _DWORD, _DWORD, _DWORD);
- // 43E574: using guessed type int dword_43E574;
- // 441CF0: using guessed type int dword_441CF0;
- // 441D20: using guessed type int dword_441D20;
- //----- (004146B0) --------------------------------------------------------
- void __cdecl sub_4146B0(LPVOID lpMem)
- {
- int v1; // [sp+0h] [bp-10h]@9
- int v2; // [sp+4h] [bp-Ch]@9
- int v3; // [sp+8h] [bp-8h]@9
- unsigned int v4; // [sp+Ch] [bp-4h]@3
- if ( lpMem )
- {
- if ( dword_441CF0 == 3 )
- {
- v4 = __sbh_find_block(lpMem);
- if ( v4 )
- sub_414A90(v4, (int)lpMem);
- if ( !v4 )
- HeapFree(hHeap, 0, lpMem);
- }
- else
- {
- if ( dword_441CF0 == 2 )
- {
- v2 = __sbh_find_block_0(lpMem, &v1, &v3);
- if ( v2 )
- __sbh_free_block(v1, v3, v2);
- if ( !v2 )
- HeapFree(hHeap, 0, lpMem);
- }
- else
- {
- HeapFree(hHeap, 0, lpMem);
- }
- }
- }
- }
- // 4149D0: using guessed type _DWORD __cdecl __sbh_find_block(_DWORD);
- // 4169F0: using guessed type _DWORD __cdecl __sbh_find_block_0(_DWORD, _DWORD, _DWORD);
- // 416A80: using guessed type _DWORD __cdecl __sbh_free_block(_DWORD, _DWORD, _DWORD);
- // 441CF0: using guessed type int dword_441CF0;
- //----- (00414780) --------------------------------------------------------
- signed int __cdecl sub_414780()
- {
- signed int v1; // [sp+0h] [bp-4h]@1
- v1 = -2;
- if ( dword_441CF0 == 3 )
- {
- if ( __sbh_heap_check(-2) < 0 )
- v1 = -4;
- }
- else
- {
- if ( dword_441CF0 == 2 && __sbh_heap_check_0() < 0 )
- v1 = -4;
- }
- if ( !HeapValidate(hHeap, 0, 0) )
- {
- if ( GetLastError() == 120 )
- {
- dword_441548 = 120;
- dword_441544 = 40;
- }
- else
- {
- v1 = -4;
- }
- }
- return v1;
- }
- // 415FD0: using guessed type int __cdecl __sbh_heap_check(_DWORD);
- // 4172D0: using guessed type int __sbh_heap_check_0(void);
- // 441544: using guessed type int dword_441544;
- // 441548: using guessed type int dword_441548;
- // 441CF0: using guessed type int dword_441CF0;
- //----- (00414A90) --------------------------------------------------------
- int __cdecl sub_414A90(unsigned int a1, int a2)
- {
- int result; // eax@1
- int v3; // ST28_4@32
- int v4; // edx@34
- int v5; // edx@37
- int v6; // eax@43
- int v7; // [sp+0h] [bp-3Ch]@1
- int v8; // [sp+4h] [bp-38h]@2
- int v9; // [sp+8h] [bp-34h]@16
- signed int v10; // [sp+Ch] [bp-30h]@1
- int v11; // [sp+10h] [bp-2Ch]@0
- int v12; // [sp+14h] [bp-28h]@13
- int v13; // [sp+18h] [bp-24h]@3
- int v14; // [sp+20h] [bp-1Ch]@1
- signed int v15; // [sp+28h] [bp-14h]@2
- signed int v16; // [sp+30h] [bp-Ch]@2
- int v17; // [sp+34h] [bp-8h]@1
- unsigned int v18; // [sp+38h] [bp-4h]@1
- v7 = *(_DWORD *)(a1 + 16);
- v18 = (unsigned int)(a2 - *(_DWORD *)(a1 + 12)) >> 15;
- v17 = v7 + 516 * v18 + 324;
- v14 = a2 - 4;
- result = a2 - 4;
- v10 = *(_DWORD *)(a2 - 4) - 1;
- if ( !(v10 & 1) )
- {
- v8 = v10 + v14;
- v15 = *(_DWORD *)(v10 + v14);
- v16 = *(_DWORD *)(a2 - 8);
- if ( !(v15 & 1) )
- {
- v13 = (v15 >> 4) - 1;
- if ( (unsigned int)v13 > 0x3F )
- v13 = 63;
- if ( *(_DWORD *)(v8 + 4) == *(_DWORD *)(v8 + 8) )
- {
- if ( (unsigned int)v13 >= 0x20 )
- {
- *(_DWORD *)(v7 + 4 * v18 + 196) &= ~(0x80000000u >> (v13 - 32));
- --*(_BYTE *)(v13 + v7 + 4);
- if ( !*(_BYTE *)(v13 + v7 + 4) )
- *(_DWORD *)(a1 + 4) &= ~(0x80000000u >> (v13 - 32));
- }
- else
- {
- *(_DWORD *)(v7 + 4 * v18 + 68) &= ~(0x80000000u >> v13);
- --*(_BYTE *)(v13 + v7 + 4);
- if ( !*(_BYTE *)(v13 + v7 + 4) )
- *(_DWORD *)a1 &= ~(0x80000000u >> v13);
- }
- }
- *(_DWORD *)(*(_DWORD *)(v8 + 8) + 4) = *(_DWORD *)(v8 + 4);
- *(_DWORD *)(*(_DWORD *)(v8 + 4) + 8) = *(_DWORD *)(v8 + 8);
- v10 += v15;
- }
- v12 = (v10 >> 4) - 1;
- if ( (unsigned int)v12 > 0x3F )
- v12 = 63;
- if ( !(v16 & 1) )
- {
- v9 = v14 - v16;
- v11 = (v16 >> 4) - 1;
- if ( (unsigned int)v11 > 0x3F )
- v11 = 63;
- v10 += v16;
- v12 = (v10 >> 4) - 1;
- if ( (unsigned int)v12 > 0x3F )
- v12 = 63;
- if ( v11 != v12 )
- {
- if ( *(_DWORD *)(v9 + 4) == *(_DWORD *)(v9 + 8) )
- {
- if ( (unsigned int)v11 >= 0x20 )
- {
- *(_DWORD *)(v7 + 4 * v18 + 196) &= ~(0x80000000u >> (v11 - 32));
- --*(_BYTE *)(v11 + v7 + 4);
- if ( !*(_BYTE *)(v11 + v7 + 4) )
- *(_DWORD *)(a1 + 4) &= ~(0x80000000u >> (v11 - 32));
- }
- else
- {
- *(_DWORD *)(v7 + 4 * v18 + 68) &= ~(0x80000000u >> v11);
- --*(_BYTE *)(v11 + v7 + 4);
- if ( !*(_BYTE *)(v11 + v7 + 4) )
- *(_DWORD *)a1 &= ~(0x80000000u >> v11);
- }
- }
- *(_DWORD *)(*(_DWORD *)(v9 + 8) + 4) = *(_DWORD *)(v9 + 4);
- *(_DWORD *)(*(_DWORD *)(v9 + 4) + 8) = *(_DWORD *)(v9 + 8);
- }
- v14 -= v16;
- }
- if ( v16 & 1 || v11 != v12 )
- {
- v3 = v17 + 8 * v12;
- *(_DWORD *)(v14 + 4) = *(_DWORD *)(v17 + 8 * v12 + 4);
- *(_DWORD *)(v14 + 8) = v3;
- *(_DWORD *)(v3 + 4) = v14;
- *(_DWORD *)(*(_DWORD *)(v14 + 4) + 8) = v14;
- if ( *(_DWORD *)(v14 + 4) == *(_DWORD *)(v14 + 8) )
- {
- if ( (unsigned int)v12 >= 0x20 )
- {
- v5 = (*(_BYTE *)(v12 + v7 + 4))++;
- if ( !v5 )
- *(_DWORD *)(a1 + 4) |= 0x80000000u >> (v12 - 32);
- *(_DWORD *)(v7 + 4 * v18 + 196) |= 0x80000000u >> (v12 - 32);
- }
- else
- {
- v4 = (*(_BYTE *)(v12 + v7 + 4))++;
- if ( !v4 )
- *(_DWORD *)a1 |= 0x80000000u >> v12;
- *(_DWORD *)(v7 + 4 * v18 + 68) |= 0x80000000u >> v12;
- }
- }
- }
- *(_DWORD *)v14 = v10;
- *(_DWORD *)(v10 + v14 - 4) = v10;
- result = *(_DWORD *)v17 - 1;
- *(_DWORD *)v17 = result;
- if ( !*(_DWORD *)v17 )
- {
- if ( Dst )
- {
- VirtualFree((LPVOID)((dword_441D08 << 15) + *((_DWORD *)Dst + 3)), 0x8000u, 0x4000u);
- *((_DWORD *)Dst + 2) |= 0x80000000u >> dword_441D08;
- *(_DWORD *)(*((_DWORD *)Dst + 4) + 4 * dword_441D08 + 196) = 0;
- --*(_BYTE *)(*((_DWORD *)Dst + 4) + 67);
- if ( !*(_BYTE *)(*((_DWORD *)Dst + 4) + 67) )
- {
- v6 = *((_DWORD *)Dst + 1);
- LOBYTE(v6) = v6 & 0xFE;
- *((_DWORD *)Dst + 1) = v6;
- }
- if ( *((_DWORD *)Dst + 2) == -1 )
- {
- VirtualFree(*((LPVOID *)Dst + 3), 0, 0x8000u);
- HeapFree(hHeap, 0, *((LPVOID *)Dst + 4));
- memcpy_0(Dst, (char *)Dst + 20, (char *)lpMem + 20 * dword_441D18-- - ((char *)Dst + 20));
- if ( a1 > (unsigned int)Dst )
- a1 -= 20;
- dword_441D0C = (int)lpMem;
- }
- }
- Dst = (void *)a1;
- result = v18;
- dword_441D08 = v18;
- }
- }
- return result;
- }
- // 441D08: using guessed type int dword_441D08;
- // 441D0C: using guessed type int dword_441D0C;
- // 441D18: using guessed type int dword_441D18;
- //----- (00417510) --------------------------------------------------------
- HMODULE __cdecl sub_417510(HMODULE a1)
- {
- HMODULE result; // eax@1
- int v2; // ST08_4@4
- *(_DWORD *)a1 = 0;
- result = GetModuleHandleA(0);
- if ( *(_WORD *)result == 23117 )
- {
- if ( *((_DWORD *)result + 15) )
- {
- v2 = (int)((char *)result + *((_DWORD *)result + 15));
- *(_BYTE *)a1 = *(_BYTE *)(v2 + 26);
- result = a1;
- *((_BYTE *)a1 + 1) = *(_BYTE *)(v2 + 27);
- }
- }
- return result;
- }
- //----- (00417570) --------------------------------------------------------
- signed int __cdecl sub_417570()
- {
- signed int result; // eax@4
- char *Str; // [sp+0h] [bp-1238h]@13
- char *Stra; // [sp+0h] [bp-1238h]@22
- int Strb; // [sp+0h] [bp-1238h]@23
- int v4; // [sp+4h] [bp-1234h]@33
- __int32 v5; // [sp+8h] [bp-1230h]@29
- CHAR SubStr; // [sp+Ch] [bp-122Ch]@14
- CHAR Str2; // [sp+110h] [bp-1128h]@5
- struct _OSVERSIONINFOA VersionInformation; // [sp+11A0h] [bp-98h]@1
- CHAR *i; // [sp+1234h] [bp-4h]@6
- VersionInformation.dwOSVersionInfoSize = 148;
- if ( GetVersionExA(&VersionInformation)
- && VersionInformation.dwPlatformId == 2
- && VersionInformation.dwMajorVersion >= 5 )
- {
- result = 1;
- }
- else
- {
- if ( !GetEnvironmentVariableA("__MSVCRT_HEAP_SELECT", &Str2, 0x1090u) )
- goto LABEL_38;
- for ( i = &Str2; *i; ++i )
- {
- if ( *i >= 97 )
- {
- if ( *i <= 122 )
- *i -= 32;
- }
- }
- if ( strncmp("__GLOBAL_HEAP_SELECTED", &Str2, 0x16u) )
- {
- GetModuleFileNameA(0, &SubStr, 0x104u);
- for ( i = &SubStr; *i; ++i )
- {
- if ( *i >= 97 && *i <= 122 )
- *i -= 32;
- }
- Str = strstr(&Str2, &SubStr);
- }
- else
- {
- Str = &Str2;
- }
- if ( !Str )
- goto LABEL_38;
- Stra = strchr(Str, 44);
- if ( !Stra )
- goto LABEL_38;
- Strb = (int)(Stra + 1);
- i = (CHAR *)Strb;
- while ( *i )
- {
- if ( *i == 59 )
- *i = 0;
- else
- ++i;
- }
- v5 = strtol((const char *)Strb, 0, 10);
- if ( v5 == 2 || v5 == 3 || v5 == 1 )
- {
- result = v5;
- }
- else
- {
- LABEL_38:
- sub_417510(&v4);
- if ( (signed int)(unsigned __int8)v4 < 6 )
- result = 2;
- else
- result = 3;
- }
- }
- return result;
- }
- //----- (004177A0) --------------------------------------------------------
- signed int __cdecl sub_4177A0(int a1)
- {
- hHeap = HeapCreate(a1 == 0, 0x1000u, 0);
- if ( !hHeap )
- return 0;
- dword_441CF0 = sub_417570();
- if ( dword_441CF0 == 3 )
- {
- if ( !__sbh_heap_init(1016) )
- {
- HeapDestroy(hHeap);
- return 0;
- }
- }
- else
- {
- if ( dword_441CF0 == 2 && !__sbh_new_region() )
- {
- HeapDestroy(hHeap);
- return 0;
- }
- }
- return 1;
- }
- // 414960: using guessed type _DWORD __cdecl __sbh_heap_init(_DWORD);
- // 416630: using guessed type int __sbh_new_region(void);
- // 441CF0: using guessed type int dword_441CF0;
- //----- (00419CA0) --------------------------------------------------------
- signed int __cdecl sub_419CA0(int a1)
- {
- signed int result; // eax@2
- int v2; // [sp+0h] [bp-4h]@28
- if ( !dword_43E7A0 )
- return 0;
- if ( *(_DWORD *)(a1 + 20) != dword_43E830 || *(_DWORD *)(a1 + 20) != dword_43E840 )
- {
- if ( dword_4415A0 )
- {
- if ( TimeZoneInformation.DaylightDate.wYear )
- cvtdate(
- 1,
- 0,
- *(_DWORD *)(a1 + 20),
- TimeZoneInformation.DaylightDate.wMonth,
- 0,
- 0,
- TimeZoneInformation.DaylightDate.wDay,
- TimeZoneInformation.DaylightDate.wHour,
- TimeZoneInformation.DaylightDate.wMinute,
- TimeZoneInformation.DaylightDate.wSecond,
- TimeZoneInformation.DaylightDate.wMilliseconds);
- else
- cvtdate(
- 1,
- 1,
- *(_DWORD *)(a1 + 20),
- TimeZoneInformation.DaylightDate.wMonth,
- TimeZoneInformation.DaylightDate.wDay,
- TimeZoneInformation.DaylightDate.wDayOfWeek,
- 0,
- TimeZoneInformation.DaylightDate.wHour,
- TimeZoneInformation.DaylightDate.wMinute,
- TimeZoneInformation.DaylightDate.wSecond,
- TimeZoneInformation.DaylightDate.wMilliseconds);
- if ( TimeZoneInformation.StandardDate.wYear )
- cvtdate(
- 0,
- 0,
- *(_DWORD *)(a1 + 20),
- TimeZoneInformation.StandardDate.wMonth,
- 0,
- 0,
- TimeZoneInformation.StandardDate.wDay,
- TimeZoneInformation.StandardDate.wHour,
- TimeZoneInformation.StandardDate.wMinute,
- TimeZoneInformation.StandardDate.wSecond,
- TimeZoneInformation.StandardDate.wMilliseconds);
- else
- cvtdate(
- 0,
- 1,
- *(_DWORD *)(a1 + 20),
- TimeZoneInformation.StandardDate.wMonth,
- TimeZoneInformation.StandardDate.wDay,
- TimeZoneInformation.StandardDate.wDayOfWeek,
- 0,
- TimeZoneInformation.StandardDate.wHour,
- TimeZoneInformation.StandardDate.wMinute,
- TimeZoneInformation.StandardDate.wSecond,
- TimeZoneInformation.StandardDate.wMilliseconds);
- }
- else
- {
- cvtdate(1, 1, *(_DWORD *)(a1 + 20), 4, 1, 0, 0, 2, 0, 0, 0);
- cvtdate(0, 1, *(_DWORD *)(a1 + 20), 10, 5, 0, 0, 2, 0, 0, 0);
- }
- }
- if ( dword_43E834 >= dword_43E844 )
- {
- if ( *(_DWORD *)(a1 + 28) < dword_43E844 || *(_DWORD *)(a1 + 28) > dword_43E834 )
- return 1;
- if ( *(_DWORD *)(a1 + 28) > dword_43E844 && *(_DWORD *)(a1 + 28) < dword_43E834 )
- return 0;
- }
- else
- {
- if ( *(_DWORD *)(a1 + 28) < dword_43E834 || *(_DWORD *)(a1 + 28) > dword_43E844 )
- return 0;
- if ( *(_DWORD *)(a1 + 28) > dword_43E834 && *(_DWORD *)(a1 + 28) < dword_43E844 )
- return 1;
- }
- v2 = 1000 * (3600 * *(_DWORD *)(a1 + 8) + 60 * *(_DWORD *)(a1 + 4) + *(_DWORD *)a1);
- if ( *(_DWORD *)(a1 + 28) == dword_43E834 )
- result = v2 >= dword_43E838;
- else
- result = v2 < dword_43E848;
- return result;
- }
- // 419FA0: using guessed type _DWORD __cdecl cvtdate(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
- // 43E7A0: using guessed type int dword_43E7A0;
- // 43E830: using guessed type int dword_43E830;
- // 43E834: using guessed type int dword_43E834;
- // 43E838: using guessed type int dword_43E838;
- // 43E840: using guessed type int dword_43E840;
- // 43E844: using guessed type int dword_43E844;
- // 43E848: using guessed type int dword_43E848;
- // 4415A0: using guessed type int dword_4415A0;
- //----- (0041F810) --------------------------------------------------------
- signed int __cdecl sub_41F810(int a1)
- {
- void *v1; // eax@1
- signed int result; // eax@2
- signed int v3; // eax@3
- v1 = malloc(0x80u);
- *(_DWORD *)(a1 + 12) = v1;
- if ( v1 )
- {
- v3 = 0;
- do
- {
- v3 += 4;
- *(_DWORD *)(v3 + *(_DWORD *)(a1 + 12) - 4) = 0;
- }
- while ( v3 < 128 );
- *(_DWORD *)a1 = 0;
- *(_DWORD *)(a1 + 4) = 32;
- *(_DWORD *)(a1 + 8) = 0;
- result = 0;
- }
- else
- {
- result = -2;
- }
- return result;
- }
- //----- (0041F860) --------------------------------------------------------
- void __cdecl sub_41F860(int a1)
- {
- int i; // eax@2
- if ( *(_DWORD *)(a1 + 12) )
- {
- for ( i = 0; i < *(_DWORD *)a1; *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * i - 4) = 0 )
- ++i;
- CrtCheckMemoryWrapperWrapper(*(_DWORD *)(a1 + 12));
- *(_DWORD *)(a1 + 12) = 0;
- *(_DWORD *)a1 = 0;
- *(_DWORD *)(a1 + 4) = 0;
- *(_DWORD *)(a1 + 8) = 0;
- }
- }
- //----- (0041F8B0) --------------------------------------------------------
- signed int __cdecl sub_41F8B0(int a1, int a2)
- {
- signed int result; // eax@2
- if ( a1 == a2 || (result = sub_41F8F0(a1, a2)) == 0 )
- {
- if ( *(_DWORD *)a2 )
- {
- *(_DWORD *)(a2 + 8) = *(_DWORD *)(a1 + 8) == 0;
- result = 0;
- }
- else
- {
- *(_DWORD *)(a2 + 8) = 0;
- result = 0;
- }
- }
- return result;
- }
- //----- (0041F8F0) --------------------------------------------------------
- signed int __cdecl sub_41F8F0(int a1, int a2)
- {
- signed int result; // eax@3
- int v3; // edx@4
- int v4; // ecx@4
- int i; // eax@4
- int v6; // ebx@5
- if ( a1 == a2 )
- return 0;
- if ( *(_DWORD *)(a2 + 4) >= *(_DWORD *)a1 || (result = sub_421250(a2, *(_DWORD *)a1)) == 0 )
- {
- v3 = *(_DWORD *)(a1 + 12);
- v4 = *(_DWORD *)(a2 + 12);
- for ( i = 0; i < *(_DWORD *)a1; ++i )
- {
- v6 = *(_DWORD *)v3;
- v3 += 4;
- *(_DWORD *)v4 = v6;
- v4 += 4;
- }
- for ( ; i < *(_DWORD *)a2; ++i )
- {
- *(_DWORD *)v4 = 0;
- v4 += 4;
- }
- *(_DWORD *)a2 = *(_DWORD *)a1;
- *(_DWORD *)(a2 + 8) = *(_DWORD *)(a1 + 8);
- return 0;
- }
- return result;
- }
- //----- (0041F960) --------------------------------------------------------
- signed int __cdecl sub_41F960(unsigned int a1, unsigned int a2)
- {
- unsigned int v2; // ebx@1
- signed int v3; // edi@1
- signed int result; // eax@2
- sub_4213F0(a1);
- v2 = a2;
- v3 = 0;
- while ( 1 )
- {
- result = sub_4212F0(a1, 4, a1);
- if ( result )
- break;
- **(_DWORD **)(a1 + 12) |= v2 >> 28;
- v2 *= 16;
- ++v3;
- ++*(_DWORD *)a1;
- if ( v3 >= 8 )
- {
- sub_4212C0(a1);
- return 0;
- }
- }
- return result;
- }
- //----- (0041F9C0) --------------------------------------------------------
- int __cdecl sub_41F9C0(int a1)
- {
- int result; // eax@1
- int v2; // edx@4
- int v3; // ecx@4
- int v4; // ecx@4
- int v5; // edx@5
- int v6; // ecx@5
- int v7; // esi@6
- result = *(_DWORD *)a1;
- if ( *(_DWORD *)a1 )
- {
- if ( result >= 2 )
- result = 2;
- v2 = *(_DWORD *)(a1 + 12);
- v3 = result - 1;
- result = *(_DWORD *)(v2 + 4 * result - 4);
- v4 = v3 - 1;
- if ( v4 >= 0 )
- {
- v5 = v2 + 4 * v4;
- v6 = v4 + 1;
- do
- {
- v7 = *(_DWORD *)v5;
- v5 -= 4;
- result = v7 | (result << 28);
- --v6;
- }
- while ( v6 );
- }
- }
- return result;
- }
- //----- (0041FA00) --------------------------------------------------------
- signed int __cdecl sub_41FA00(int a1, int a2)
- {
- int v2; // eax@1
- signed int result; // eax@2
- v2 = *(_DWORD *)(a1 + 8);
- if ( v2 == *(_DWORD *)(a2 + 8) )
- {
- if ( v2 == 1 )
- result = sub_421430(a2, a1);
- else
- result = sub_421430(a1, a2);
- }
- else
- {
- result = v2 != 1 ? 1 : -1;
- }
- return result;
- }
- //----- (0041FA40) --------------------------------------------------------
- int __cdecl sub_41FA40(int a1, unsigned int a2)
- {
- int result; // eax@2
- unsigned int v3; // eax@5
- if ( *(_DWORD *)(a1 + 8) == 1 )
- {
- result = -1;
- }
- else
- {
- if ( *(_DWORD *)a1 <= 1 )
- {
- v3 = **(_DWORD **)(a1 + 12);
- if ( v3 <= a2 )
- result = -(v3 < a2);
- else
- result = 1;
- }
- else
- {
- result = 1;
- }
- }
- return result;
- }
- //----- (0041FA70) --------------------------------------------------------
- int __cdecl sub_41FA70(int a1)
- {
- int v1; // ecx@1
- int result; // eax@2
- int v3; // eax@3
- unsigned int v4; // ecx@3
- v1 = *(_DWORD *)a1;
- if ( *(_DWORD *)a1 )
- {
- v3 = 7 * v1;
- v4 = *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * v1 - 4);
- for ( result = 4 * v3 - 28; v4; v4 >>= 1 )
- ++result;
- }
- else
- {
- result = 0;
- }
- return result;
- }
- //----- (0041FAA0) --------------------------------------------------------
- int __cdecl sub_41FAA0(int a1)
- {
- int v1; // edx@1
- int result; // eax@2
- int v3; // ecx@3
- int v4; // eax@4
- unsigned int v5; // edx@7
- int v6; // ecx@8
- v1 = *(_DWORD *)a1;
- if ( *(_DWORD *)a1 )
- {
- v3 = 0;
- if ( v1 > 0 )
- {
- v4 = *(_DWORD *)(a1 + 12);
- do
- {
- if ( *(_DWORD *)v4 )
- break;
- ++v3;
- v4 += 4;
- }
- while ( v3 < v1 );
- }
- v5 = *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * v3);
- result = 28 * v3;
- if ( !(v5 & 1) )
- {
- do
- {
- v6 = v5 & 0xF;
- v5 >>= 4;
- result += dword_4381A4[v6];
- }
- while ( !v6 );
- }
- }
- else
- {
- result = 0;
- }
- return result;
- }
- // 4381A4: using guessed type int dword_4381A4[];
- //----- (0041FB00) --------------------------------------------------------
- signed int __cdecl sub_41FB00(unsigned int a1, signed int a2)
- {
- signed int result; // eax@1
- sub_4213F0(a1);
- result = sub_421250(a1, a2 / 28 + 1);
- if ( !result )
- {
- *(_DWORD *)a1 = a2 / 28 + 1;
- *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * a2 / 28) = 1 << a2 % 28;
- result = 0;
- }
- return result;
- }
- //----- (0041FB60) --------------------------------------------------------
- signed int __cdecl sub_41FB60(unsigned int a1, int a2, int a3)
- {
- unsigned int v3; // edi@1
- int v4; // ebp@3
- char i; // al@6
- int v6; // esi@9
- signed int result; // eax@13
- signed int v8; // [sp+14h] [bp+4h]@4
- v3 = a1;
- sub_4213F0(a1);
- if ( a3 < 2 || a3 > 64 )
- {
- result = -3;
- }
- else
- {
- v4 = a2;
- if ( *(_BYTE *)a2 == 45 )
- {
- v4 = a2 + 1;
- v8 = 1;
- }
- else
- {
- v8 = 0;
- }
- sub_4213F0(v3);
- for ( i = *(_BYTE *)v4; i; i = *(_BYTE *)(v4++ + 1) )
- {
- if ( a3 < 36 )
- i = toupper(i);
- v6 = 0;
- do
- {
- if ( i == off_43EC68[v6] )
- break;
- ++v6;
- }
- while ( v6 < 64 );
- if ( v6 >= a3 )
- break;
- result = sub_420220(v3, a3, v3);
- if ( !result )
- {
- result = sub_41FEB0(v3, v6, v3);
- if ( !result )
- continue;
- }
- return result;
- }
- if ( *(_DWORD *)v3 )
- *(_DWORD *)(v3 + 8) = v8;
- result = 0;
- }
- return result;
- }
- // 41FEB0: using guessed type _DWORD __cdecl sub_41FEB0(_DWORD, _DWORD, _DWORD);
- // 43EC68: using guessed type char *off_43EC68;
- //----- (0041FC20) --------------------------------------------------------
- signed int __cdecl sub_41FC20(int a1, int a2, signed int a3)
- {
- int v3; // esi@1
- int v4; // edi@1
- int v5; // ebx@1
- int v6; // ebp@3
- signed int result; // eax@4
- signed int v8; // edi@11
- int v9; // [sp+10h] [bp-10h]@5
- int v10; // [sp+18h] [bp-8h]@6
- v3 = a2;
- v4 = a3;
- v5 = a2;
- if ( a3 < 2 || a3 > 64 )
- {
- result = -3;
- }
- else
- {
- v6 = 0;
- if ( *(_DWORD *)a1 )
- {
- result = sub_4216B0((int)&v9, a1);
- if ( !result )
- {
- if ( v10 == 1 )
- {
- v5 = v3 + 1;
- *(_BYTE *)v3++ = 45;
- v10 = 0;
- }
- if ( v9 )
- {
- while ( 1 )
- {
- v8 = sub_4214C0((int)&v9, v4, (unsigned int)&v9, (int)&a2);
- if ( v8 )
- break;
- ++v3;
- ++v6;
- *(_BYTE *)(v3 - 1) = off_43EC68[a2];
- if ( !v9 )
- goto LABEL_13;
- v4 = a3;
- }
- sub_41F860((int)&v9);
- result = v8;
- }
- else
- {
- LABEL_13:
- sub_421490(v5, v6);
- *(_BYTE *)v3 = 0;
- sub_41F860((int)&v9);
- result = 0;
- }
- }
- }
- else
- {
- *(_BYTE *)a2 = 48;
- *(_BYTE *)(v3 + 1) = 0;
- result = 0;
- }
- }
- return result;
- }
- // 43EC68: using guessed type char *off_43EC68;
- //----- (0041FD10) --------------------------------------------------------
- int __cdecl sub_41FD10(int a1)
- {
- int v1; // eax@1
- v1 = sub_41FA70(a1);
- return ((v1 & 7) != 0) + v1 / 8;
- }
- //----- (0041FD40) --------------------------------------------------------
- signed int __cdecl sub_41FD40(int a1, int a2)
- {
- signed int result; // eax@1
- int v3; // esi@2
- signed int v4; // edi@3
- int v5; // [sp+Ch] [bp-10h]@1
- int v6; // [sp+18h] [bp-4h]@3
- result = sub_4216B0((int)&v5, a1);
- if ( !result )
- {
- v3 = 0;
- if ( v5 )
- {
- while ( 1 )
- {
- *(_BYTE *)(v3++ + a2) = *(_BYTE *)v6;
- v4 = sub_4216E0((int)&v5, 8, (unsigned int)&v5, 0);
- if ( v4 )
- break;
- if ( !v5 )
- goto LABEL_5;
- }
- sub_41F860((int)&v5);
- result = v4;
- }
- else
- {
- LABEL_5:
- sub_421490(a2, v3);
- sub_41F860((int)&v5);
- result = 0;
- }
- }
- return result;
- }
- //----- (0041FDD0) --------------------------------------------------------
- signed int __cdecl sub_41FDD0(unsigned int a1, int a2, int a3)
- {
- signed int result; // eax@2
- int v4; // edi@3
- int v5; // ebx@4
- int v6; // ecx@6
- int v7; // edx@6
- if ( *(_DWORD *)(a1 + 4) >= 2 || (result = sub_421250(a1, 2)) == 0 )
- {
- sub_4213F0(a1);
- v4 = a3 - 1;
- if ( a3 <= 0 )
- {
- LABEL_7:
- sub_4212C0(a1);
- result = 0;
- }
- else
- {
- v5 = a2;
- while ( 1 )
- {
- result = sub_4212F0(a1, 8, a1);
- if ( result )
- break;
- v6 = *(_BYTE *)v5++;
- **(_DWORD **)(a1 + 12) |= v6;
- ++*(_DWORD *)a1;
- v7 = v4--;
- if ( v7 <= 0 )
- goto LABEL_7;
- }
- }
- }
- return result;
- }
- //----- (0041FE40) --------------------------------------------------------
- signed int __cdecl sub_41FE40(int a1, int a2, int a3)
- {
- int v3; // ebx@1
- int v4; // ebp@1
- signed int result; // eax@2
- v3 = *(_DWORD *)(a1 + 8);
- v4 = *(_DWORD *)(a2 + 8);
- if ( v3 == v4 )
- {
- *(_DWORD *)(a3 + 8) = v3;
- result = sub_421920(a1, a2, a3);
- }
- else
- {
- if ( sub_421430(a1, a2) == -1 )
- {
- *(_DWORD *)(a3 + 8) = v4;
- result = sub_421850((signed int *)a2, (signed int *)a1, a3);
- }
- else
- {
- *(_DWORD *)(a3 + 8) = v3;
- result = sub_421850((signed int *)a1, (signed int *)a2, a3);
- }
- }
- return result;
- }
- //----- (0041FEB0) --------------------------------------------------------
- signed int __cdecl sub_41FEB0(int a1, int a2, int a3)
- {
- signed int result; // eax@2
- int v4; // eax@3
- signed int v5; // edi@6
- int v6; // ecx@7
- int v7; // edi@7
- int v8; // ebx@7
- signed int v9; // ebp@8
- unsigned int v10; // edx@8
- int v11; // ebx@8
- unsigned int v12; // edx@8
- int i; // edi@8
- int v14; // eax@9
- unsigned int v15; // eax@9
- int v16; // ebp@10
- int v17; // edi@10
- int v18; // eax@14
- int v19; // ebp@14
- if ( *(_DWORD *)(a3 + 4) >= *(_DWORD *)a1 + 1 || (result = sub_421250(a3, *(_DWORD *)a1 + 1)) == 0 )
- {
- v4 = a2;
- if ( *(_DWORD *)(a1 + 8) != 1 || *(_DWORD *)a1 <= 1 && **(_DWORD **)(a1 + 12) < (unsigned int)a2 )
- {
- v6 = *(_DWORD *)a3;
- v7 = *(_DWORD *)(a3 + 12);
- *(_DWORD *)(a3 + 8) = 0;
- v8 = *(_DWORD *)(a1 + 12);
- if ( *(_DWORD *)(a1 + 8) )
- {
- *(_DWORD *)a3 = 1;
- if ( *(_DWORD *)a1 == 1 )
- v4 = a2 - **(_DWORD **)(a1 + 12);
- *(_DWORD *)v7 = v4;
- v17 = v7 + 4;
- v16 = 1;
- }
- else
- {
- v9 = 1;
- v10 = a2 + *(_DWORD *)v8;
- v11 = v8 + 4;
- *(_DWORD *)v7 = v10;
- *(_DWORD *)v7 = v10 & 0xFFFFFFF;
- v12 = v10 >> 28;
- for ( i = v7 + 4; v9 < *(_DWORD *)a1; ++v9 )
- {
- v14 = *(_DWORD *)v11;
- v11 += 4;
- v15 = v12 + v14;
- *(_DWORD *)i = v15;
- *(_DWORD *)i = v15 & 0xFFFFFFF;
- v12 = v15 >> 28;
- i += 4;
- }
- *(_DWORD *)i = v12;
- v16 = v9 + 1;
- v17 = i + 4;
- *(_DWORD *)a3 = *(_DWORD *)a1 + 1;
- }
- v18 = v16;
- v19 = v16 + 1;
- if ( v18 < v6 )
- memset((void *)v17, 0, 4 * (v6 - v19 + 1));
- sub_4212C0(a3);
- result = 0;
- }
- else
- {
- *(_DWORD *)(a1 + 8) = 0;
- v5 = sub_420040(a1, a2, a3);
- *(_DWORD *)(a3 + 8) = 1;
- *(_DWORD *)(a1 + 8) = 1;
- sub_4212C0(a3);
- result = v5;
- }
- }
- return result;
- }
- // 41FEB0: using guessed type _DWORD __cdecl sub_41FEB0(_DWORD, _DWORD, _DWORD);
- //----- (0041FFD0) --------------------------------------------------------
- signed int __cdecl sub_41FFD0(int a1, int a2, int a3)
- {
- int v3; // edi@1
- signed int result; // eax@2
- v3 = *(_DWORD *)(a1 + 8);
- if ( v3 == *(_DWORD *)(a2 + 8) )
- {
- if ( sub_421430(a1, a2) == -1 )
- {
- *(_DWORD *)(a3 + 8) = v3 == 0;
- result = sub_421850((signed int *)a2, (signed int *)a1, a3);
- }
- else
- {
- *(_DWORD *)(a3 + 8) = v3;
- result = sub_421850((signed int *)a1, (signed int *)a2, a3);
- }
- }
- else
- {
- *(_DWORD *)(a3 + 8) = v3;
- result = sub_421920(a1, a2, a3);
- }
- return result;
- }
- //----- (00420040) --------------------------------------------------------
- signed int __cdecl sub_420040(int a1, int a2, int a3)
- {
- signed int result; // eax@2
- signed int v4; // eax@4
- signed int v5; // edi@4
- int v6; // edx@5
- signed int v7; // ecx@5
- int v8; // ebx@5
- int v9; // edi@5
- int v10; // eax@5
- signed int v11; // ebp@8
- int v12; // edx@10
- void *i; // edi@10
- unsigned int v14; // edx@11
- int v15; // ebx@11
- unsigned int v16; // edx@11
- int v17; // eax@12
- unsigned int v18; // eax@12
- signed int v19; // eax@14
- int v20; // ebp@14
- if ( *(_DWORD *)(a3 + 4) >= *(_DWORD *)a1 + 1 || (result = sub_421250(a3, *(_DWORD *)a1 + 1)) == 0 )
- {
- if ( *(_DWORD *)(a1 + 8) == 1 )
- {
- *(_DWORD *)(a1 + 8) = 0;
- v4 = sub_41FEB0(a1, a2, a3);
- *(_DWORD *)(a3 + 8) = 1;
- v5 = v4;
- *(_DWORD *)(a1 + 8) = 1;
- sub_4212C0(a3);
- result = v5;
- }
- else
- {
- v6 = *(_DWORD *)a1;
- v7 = *(_DWORD *)a3;
- v8 = *(_DWORD *)(a1 + 12);
- v9 = *(_DWORD *)(a3 + 12);
- v10 = a2;
- if ( (*(_DWORD *)a1 != 1 || *(_DWORD *)v8 > (unsigned int)a2) && v6 )
- {
- *(_DWORD *)(a3 + 8) = 0;
- *(_DWORD *)a3 = *(_DWORD *)a1;
- v14 = *(_DWORD *)v8 - a2;
- v11 = 1;
- *(_DWORD *)v9 = v14;
- v15 = v8 + 4;
- *(_DWORD *)v9 = v14 & 0xFFFFFFF;
- v16 = v14 >> 31;
- for ( i = (void *)(v9 + 4); v11 < *(_DWORD *)a1; ++v11 )
- {
- v17 = *(_DWORD *)v15;
- v15 += 4;
- v18 = v17 - v16;
- *(_DWORD *)i = v18;
- *(_DWORD *)i = v18 & 0xFFFFFFF;
- v16 = v18 >> 31;
- i = (char *)i + 4;
- }
- v12 = a3;
- }
- else
- {
- v11 = 1;
- if ( v6 == 1 )
- v10 = a2 - *(_DWORD *)v8;
- v12 = a3;
- *(_DWORD *)v9 = v10;
- i = (void *)(v9 + 4);
- *(_DWORD *)(a3 + 8) = 1;
- *(_DWORD *)a3 = 1;
- }
- v19 = v11;
- v20 = v11 + 1;
- if ( v19 < v7 )
- memset(i, 0, 4 * (v7 - v20 + 1));
- sub_4212C0(v12);
- result = 0;
- }
- }
- return result;
- }
- // 41FEB0: using guessed type _DWORD __cdecl sub_41FEB0(_DWORD, _DWORD, _DWORD);
- //----- (00420150) --------------------------------------------------------
- signed int __cdecl sub_420150(int a1, int a2, int a3)
- {
- unsigned int v3; // eax@1
- signed int v4; // ecx@1
- int v5; // esi@1
- int v6; // ebx@1
- signed int result; // eax@4
- int v8; // esi@5
- int v9; // esi@9
- signed int v10; // ST0C_4@13
- int v11; // esi@13
- signed int v12; // ST0C_4@14
- v3 = *(_DWORD *)a1;
- v4 = *(_DWORD *)a2;
- v5 = *(_DWORD *)a1;
- v6 = *(_DWORD *)(a1 + 8) != *(_DWORD *)(a2 + 8);
- if ( *(_DWORD *)a1 >= *(_DWORD *)a2 )
- v5 = *(_DWORD *)a2;
- if ( v5 < dword_43ECB8 )
- {
- v8 = *(_DWORD *)a1;
- if ( (signed int)v3 >= v4 )
- v8 = *(_DWORD *)a2;
- if ( v8 < dword_43ECB0 )
- {
- v9 = v4 + v3 + 1;
- if ( (unsigned int)v9 >= 0x200 )
- goto LABEL_18;
- if ( (signed int)v3 >= v4 )
- v3 = *(_DWORD *)a2;
- if ( v3 > 0x100 )
- {
- LABEL_18:
- v12 = v9;
- v11 = a3;
- result = sub_421A30(a1, a2, a3, v12);
- }
- else
- {
- v10 = v9;
- v11 = a3;
- result = sub_421B90(a1, a2, a3, v10);
- }
- *(_DWORD *)(v11 + 8) = v6 & ((*(_DWORD *)v11 <= 0) - 1);
- }
- else
- {
- result = sub_421CF0(a1, a2, a3);
- *(_DWORD *)(a3 + 8) = v6 & ((*(_DWORD *)a3 <= 0) - 1);
- }
- }
- else
- {
- result = sub_422020(a1, a2, a3);
- *(_DWORD *)(a3 + 8) = v6 & ((*(_DWORD *)a3 <= 0) - 1);
- }
- return result;
- }
- // 420150: using guessed type _DWORD __cdecl sub_420150(_DWORD, _DWORD, _DWORD);
- // 43ECB0: using guessed type int dword_43ECB0;
- // 43ECB8: using guessed type int dword_43ECB8;
- //----- (00420220) --------------------------------------------------------
- signed int __cdecl sub_420220(int a1, int a2, int a3)
- {
- signed int result; // eax@2
- int v4; // ecx@3
- int v5; // ebp@3
- int v6; // edi@3
- int v7; // ebx@3
- int v8; // esi@3
- int v9; // ecx@4
- void *v10; // edi@6
- int v11; // eax@6
- int v12; // esi@6
- int v13; // [sp+0h] [bp-4h]@3
- if ( *(_DWORD *)(a3 + 4) >= *(_DWORD *)a1 + 1 || (result = sub_421250(a3, *(_DWORD *)a1 + 1)) == 0 )
- {
- v4 = *(_DWORD *)a3;
- *(_DWORD *)(a3 + 8) = *(_DWORD *)(a1 + 8);
- v5 = *(_DWORD *)(a1 + 12);
- v6 = *(_DWORD *)(a3 + 12);
- v7 = 0;
- v8 = 0;
- v13 = v4;
- if ( *(_DWORD *)a1 > 0 )
- {
- do
- {
- v9 = *(_DWORD *)v5;
- v5 += 4;
- *(_DWORD *)v6 = (v7 + v9 * a2) & 0xFFFFFFF;
- v6 += 4;
- v7 = unknown_libname_1(28);
- ++v8;
- }
- while ( v8 < *(_DWORD *)a1 );
- v4 = v13;
- }
- *(_DWORD *)v6 = v7;
- v10 = (void *)(v6 + 4);
- v11 = v8 + 1;
- v12 = v8 + 2;
- if ( v11 < v4 )
- memset(v10, 0, 4 * (v4 - v12 + 1));
- *(_DWORD *)a3 = *(_DWORD *)a1 + 1;
- sub_4212C0(a3);
- result = 0;
- }
- return result;
- }
- // 413010: using guessed type int __thiscall unknown_libname_1(_DWORD);
- //----- (004202E0) --------------------------------------------------------
- signed int __cdecl sub_4202E0(int a1, int a2)
- {
- unsigned int v2; // ecx@1
- signed int result; // eax@2
- v2 = *(_DWORD *)a1;
- if ( *(_DWORD *)a1 < dword_43ECBC )
- {
- if ( (signed int)v2 < dword_43ECB4 )
- {
- if ( 2 * v2 + 1 >= 0x200 || v2 >= 0x80 )
- {
- result = sub_4228C0(a1, a2);
- *(_DWORD *)(a2 + 8) = 0;
- }
- else
- {
- result = sub_422A50(a1, a2);
- *(_DWORD *)(a2 + 8) = 0;
- }
- }
- else
- {
- result = sub_422C10(a1, a2);
- *(_DWORD *)(a2 + 8) = 0;
- }
- }
- else
- {
- result = sub_422E70(a1, a2);
- *(_DWORD *)(a2 + 8) = 0;
- }
- return result;
- }
- // 4202E0: using guessed type _DWORD __cdecl sub_4202E0(_DWORD, _DWORD);
- // 43ECB4: using guessed type int dword_43ECB4;
- // 43ECBC: using guessed type int dword_43ECBC;
- //----- (00420370) --------------------------------------------------------
- signed int __cdecl sub_420370(int a1, int a2, unsigned int a3, int a4)
- {
- signed int result; // eax@2
- signed int v5; // esi@5
- int v6; // ecx@14
- int v7; // esi@14
- int v8; // edx@14
- signed int v9; // edi@15
- int v10; // ebx@19
- int v11; // ebp@19
- int v12; // edi@19
- __int64 v13; // qax@25
- unsigned int v14; // esi@25
- int v15; // edi@26
- unsigned __int64 v16; // qax@27
- unsigned __int64 v17; // qax@27
- int v18; // eax@32
- int v19; // eax@36
- int v20; // eax@39
- int v21; // [sp+10h] [bp-60h]@15
- int v22; // [sp+14h] [bp-5Ch]@14
- int v23; // [sp+20h] [bp-50h]@12
- int v24; // [sp+28h] [bp-48h]@14
- int v25; // [sp+2Ch] [bp-44h]@25
- int v26; // [sp+30h] [bp-40h]@13
- int v27; // [sp+38h] [bp-38h]@14
- int v28; // [sp+3Ch] [bp-34h]@25
- int v29; // [sp+40h] [bp-30h]@10
- int v30; // [sp+4Ch] [bp-24h]@34
- int v31; // [sp+50h] [bp-20h]@9
- int v32; // [sp+5Ch] [bp-14h]@21
- int v33; // [sp+60h] [bp-10h]@11
- int v34; // [sp+6Ch] [bp-4h]@38
- int v35; // [sp+78h] [bp+8h]@26
- if ( !*(_DWORD *)a2 )
- return -3;
- if ( sub_421430(a1, a2) == -1 )
- {
- if ( a4 )
- v5 = sub_41F8F0(a1, a4);
- else
- v5 = 0;
- if ( a3 )
- {
- sub_4213F0(a3);
- return v5;
- }
- return v5;
- }
- result = sub_4235D0((int)&v31, *(_DWORD *)a1 + 2);
- if ( result )
- return result;
- v31 = *(_DWORD *)a1 + 2;
- v5 = sub_41F810((int)&v29);
- if ( !v5 )
- {
- v5 = sub_41F810((int)&v33);
- if ( v5 )
- {
- LABEL_62:
- sub_41F860((int)&v29);
- goto LABEL_63;
- }
- v5 = sub_4216B0((int)&v23, a1);
- if ( v5 )
- {
- LABEL_61:
- sub_41F860((int)&v33);
- goto LABEL_62;
- }
- v5 = sub_4216B0((int)&v26, a2);
- if ( v5 )
- {
- LABEL_60:
- sub_41F860((int)&v23);
- goto LABEL_61;
- }
- v6 = *(_DWORD *)(a1 + 8);
- v7 = *(_DWORD *)(a2 + 8);
- v27 = 0;
- v22 = v6 != v7;
- v24 = 0;
- v8 = sub_41FA70((int)&v26) % 28;
- if ( v8 >= 27 )
- {
- v21 = 0;
- }
- else
- {
- v9 = 27 - v8;
- v21 = 27 - v8;
- v5 = sub_4212F0((int)&v23, 27 - v8, (int)&v23);
- if ( v5 || (v5 = sub_4212F0((int)&v26, v9, (int)&v26)) != 0 )
- {
- LABEL_59:
- sub_41F860((int)&v26);
- goto LABEL_60;
- }
- }
- v10 = v23 - 1;
- v11 = v26 - 1;
- v12 = v23 - 1 - (v26 - 1);
- v5 = sub_423560((int)&v26, v23 - 1 - (v26 - 1));
- if ( !v5 )
- {
- if ( sub_41FA00((int)&v23, (int)&v26) == -1 )
- {
- LABEL_23:
- sub_423500((unsigned int)&v26, v12);
- if ( v10 < v11 + 1 )
- {
- LABEL_51:
- if ( v23 )
- v24 = *(_DWORD *)(a1 + 8);
- else
- v24 = 0;
- if ( a3 )
- {
- sub_4212C0((int)&v31);
- sub_4234B0((int)&v31, a3);
- *(_DWORD *)(a3 + 8) = v22;
- }
- if ( a4 )
- {
- sub_4216E0((int)&v23, v21, (unsigned int)&v23, 0);
- sub_4234B0((int)&v23, a4);
- }
- v5 = 0;
- }
- else
- {
- while ( v10 > v23 )
- {
- LABEL_50:
- --v10;
- if ( v10 < v11 + 1 )
- goto LABEL_51;
- }
- LODWORD(v13) = *(_DWORD *)(v25 + 4 * v10);
- v14 = *(_DWORD *)(v28 + 4 * v11);
- if ( (_DWORD)v13 == v14 )
- {
- v35 = v10 - v11 - 1;
- v15 = 4 * v35;
- *(_DWORD *)(4 * v35 + v32) = 268435455;
- }
- else
- {
- HIDWORD(v13) = 0;
- v16 = v13 << 28;
- LODWORD(v16) = *(_DWORD *)(v25 + 4 * v10 - 4) | v16;
- v17 = v16 / v14;
- if ( v17 > 0xFFFFFFF )
- LODWORD(v17) = 268435455;
- v35 = v10 - v11 - 1;
- v15 = 4 * v35;
- *(_DWORD *)(4 * v35 + v32) = v17 & 0xFFFFFFF;
- }
- *(_DWORD *)(v15 + v32) = (*(_DWORD *)(v15 + v32) + 1) & 0xFFFFFFF;
- while ( 1 )
- {
- *(_DWORD *)(v15 + v32) = (*(_DWORD *)(v15 + v32) - 1) & 0xFFFFFFF;
- sub_4213F0((unsigned int)&v29);
- v18 = v11 - 1 >= 0 ? *(_DWORD *)(v28 + 4 * v11 - 4) : 0;
- *(_DWORD *)v30 = v18;
- *(_DWORD *)(v30 + 4) = *(_DWORD *)(v28 + 4 * v11);
- v29 = 2;
- v5 = sub_420220((int)&v29, *(_DWORD *)(v15 + v32), (int)&v29);
- if ( v5 )
- break;
- if ( v10 - 2 >= 0 )
- v19 = *(_DWORD *)(v25 + 4 * (v10 - 2));
- else
- v19 = 0;
- *(_DWORD *)v34 = v19;
- if ( v10 - 1 >= 0 )
- v20 = *(_DWORD *)(v25 + 4 * v10 - 4);
- else
- v20 = 0;
- *(_DWORD *)(v34 + 4) = v20;
- *(_DWORD *)(v34 + 8) = *(_DWORD *)(v25 + 4 * v10);
- v33 = 3;
- if ( sub_421430((int)&v29, (int)&v33) != 1 )
- {
- v5 = sub_420220((int)&v26, *(_DWORD *)(v15 + v32), (int)&v29);
- if ( !v5 )
- {
- v5 = sub_423560((int)&v29, v35);
- if ( !v5 )
- {
- v5 = sub_41FFD0((int)&v23, (int)&v29, (int)&v23);
- if ( !v5 )
- {
- if ( v24 != 1 )
- goto LABEL_50;
- v5 = sub_41F8F0((int)&v26, (int)&v29);
- if ( !v5 )
- {
- v5 = sub_423560((int)&v29, v35);
- if ( !v5 )
- {
- v5 = sub_41FE40((int)&v23, (int)&v29, (int)&v23);
- if ( !v5 )
- {
- *(_DWORD *)(v15 + v32) = (*(_DWORD *)(v15 + v32) - 1) & 0xFFFFFFF;
- goto LABEL_50;
- }
- }
- }
- }
- }
- }
- goto LABEL_59;
- }
- }
- }
- }
- else
- {
- while ( 1 )
- {
- ++*(_DWORD *)(v32 + 4 * v12);
- v5 = sub_41FFD0((int)&v23, (int)&v26, (int)&v23);
- if ( v5 )
- break;
- if ( sub_41FA00((int)&v23, (int)&v26) == -1 )
- goto LABEL_23;
- }
- }
- }
- goto LABEL_59;
- }
- LABEL_63:
- sub_41F860((int)&v31);
- return v5;
- }
- //----- (00420890) --------------------------------------------------------
- signed int __cdecl sub_420890(int a1, int a2)
- {
- int v2; // ebp@1
- signed int result; // eax@2
- signed int v4; // eax@3
- int v5; // ecx@3
- int v6; // edi@3
- int v7; // ebx@3
- int v8; // esi@3
- int v9; // eax@3
- int v10; // ecx@4
- unsigned int v11; // eax@5
- char v12; // dl@5
- int v13; // [sp+10h] [bp+8h]@3
- v2 = a2;
- if ( *(_DWORD *)(a2 + 4) >= *(_DWORD *)a1 || (result = sub_421250(a2, *(_DWORD *)a1)) == 0 )
- {
- v4 = *(_DWORD *)a1;
- v5 = *(_DWORD *)a2;
- *(_DWORD *)a2 = *(_DWORD *)a1;
- v6 = *(_DWORD *)(a1 + 12) + 4 * v4 - 4;
- v7 = 0;
- v13 = v5;
- v8 = *(_DWORD *)(v2 + 12) + 4 * v4 - 4;
- v9 = v4 - 1;
- if ( v9 >= 0 )
- {
- v10 = v9 + 1;
- do
- {
- v11 = *(_DWORD *)v6;
- v8 -= 4;
- v12 = *(_DWORD *)v6;
- v6 -= 4;
- *(_DWORD *)(v8 + 4) = (v7 << 27) | (v11 >> 1);
- --v10;
- v7 = v12 & 1;
- }
- while ( v10 );
- v5 = v13;
- }
- if ( *(_DWORD *)v2 < v5 )
- memset((void *)(*(_DWORD *)(v2 + 12) + 4 * *(_DWORD *)v2), 0, 4 * (v5 - *(_DWORD *)v2));
- *(_DWORD *)(v2 + 8) = *(_DWORD *)(a1 + 8);
- sub_4212C0(v2);
- result = 0;
- }
- return result;
- }
- //----- (00420930) --------------------------------------------------------
- signed int __cdecl sub_420930(int a1, int a2, int a3)
- {
- return sub_4214C0(a1, a2, 0, a3);
- }
- //----- (00420950) --------------------------------------------------------
- signed int __cdecl sub_420950(int a1, int a2, int a3)
- {
- signed int result; // eax@2
- signed int v4; // esi@6
- int v5; // ebx@7
- int v6; // eax@7
- int v7; // ebp@7
- signed int v8; // edi@7
- int v9; // eax@20
- int v10; // [sp+8h] [bp-20h]@6
- int v11; // [sp+10h] [bp-18h]@7
- char v12; // [sp+18h] [bp-10h]@5
- int v13; // [sp+20h] [bp-8h]@7
- if ( *(_DWORD *)a1 )
- {
- if ( *(_DWORD *)a2 )
- {
- result = sub_4216B0((int)&v12, a1);
- if ( !result )
- {
- v4 = sub_4216B0((int)&v10, a2);
- if ( !v4 )
- {
- v11 = 0;
- v13 = 0;
- v5 = sub_41FAA0((int)&v12);
- v6 = sub_41FAA0((int)&v10);
- v7 = v6;
- v8 = v5;
- if ( v5 >= v6 )
- v8 = v6;
- if ( v8 <= 0
- || (v4 = sub_4216E0((int)&v12, v8, (unsigned int)&v12, 0)) == 0
- && (v4 = sub_4216E0((int)&v10, v8, (unsigned int)&v10, 0)) == 0 )
- {
- if ( v5 == v8 || (v4 = sub_4216E0((int)&v12, v5 - v8, (unsigned int)&v12, 0)) == 0 )
- {
- if ( v7 == v8 || (v4 = sub_4216E0((int)&v10, v7 - v8, (unsigned int)&v10, 0)) == 0 )
- {
- if ( v10 )
- {
- while ( 1 )
- {
- if ( sub_421430((int)&v12, (int)&v10) == 1 )
- sub_4234B0((int)&v12, (int)&v10);
- v4 = sub_421850(&v10, (signed int *)&v12, (int)&v10);
- if ( v4 )
- break;
- v9 = sub_41FAA0((int)&v10);
- v4 = sub_4216E0((int)&v10, v9, (unsigned int)&v10, 0);
- if ( v4 )
- break;
- if ( !v10 )
- goto LABEL_22;
- }
- }
- else
- {
- LABEL_22:
- v4 = sub_4212F0((int)&v12, v8, a3);
- if ( !v4 )
- *(_DWORD *)(a3 + 8) = 0;
- }
- }
- }
- }
- sub_41F860((int)&v12);
- }
- sub_41F860((int)&v10);
- result = v4;
- }
- }
- else
- {
- result = sub_423640(a1, a3);
- }
- }
- else
- {
- result = sub_423640(a2, a3);
- }
- return result;
- }
- //----- (00420B40) --------------------------------------------------------
- signed int __cdecl sub_420B40(int a1, int a2, int a3)
- {
- signed int result; // eax@1
- signed int v4; // esi@2
- int v5; // ebp@5
- int v6; // [sp-1Ch] [bp-3Ch]@5
- char *v7; // [sp-18h] [bp-38h]@5
- int v8; // [sp-14h] [bp-34h]@5
- char v9; // [sp+0h] [bp-20h]@4
- char v10; // [sp+10h] [bp-10h]@1
- result = sub_4236A0((int)&v10);
- if ( !result )
- {
- v4 = sub_420950(a1, a2, (int)&v10);
- if ( !v4 )
- {
- if ( sub_421430(a1, a2) == -1 )
- {
- v4 = sub_420370(a1, (int)&v10, (unsigned int)&v9, 0);
- if ( !v4 )
- {
- v5 = a3;
- v8 = a3;
- v7 = &v9;
- v6 = a2;
- LABEL_8:
- v4 = sub_420150(v6, v7, v8);
- *(_DWORD *)(v5 + 8) = 0;
- goto LABEL_9;
- }
- }
- else
- {
- v4 = sub_420370(a2, (int)&v10, (unsigned int)&v9, 0);
- if ( !v4 )
- {
- v5 = a3;
- v8 = a3;
- v7 = &v9;
- v6 = a1;
- goto LABEL_8;
- }
- }
- }
- LABEL_9:
- sub_423670((int)&v10);
- result = v4;
- }
- return result;
- }
- // 420150: using guessed type _DWORD __cdecl sub_420150(_DWORD, _DWORD, _DWORD);
- //----- (00420C00) --------------------------------------------------------
- signed int __cdecl sub_420C00(int a1, int a2, int a3, int a4)
- {
- signed int result; // eax@1
- signed int v5; // esi@2
- signed int v6; // esi@4
- char v7; // [sp+4h] [bp-10h]@1
- result = sub_41F810((int)&v7);
- if ( !result )
- {
- v5 = sub_420150(a1, a2, &v7);
- if ( v5 )
- {
- sub_41F860((int)&v7);
- result = v5;
- }
- else
- {
- v6 = sub_423700((int)&v7, a3, a4);
- sub_41F860((int)&v7);
- result = v6;
- }
- }
- return result;
- }
- // 420150: using guessed type _DWORD __cdecl sub_420150(_DWORD, _DWORD, _DWORD);
- //----- (00420C70) --------------------------------------------------------
- signed int __cdecl sub_420C70(int a1, int a2, int a3)
- {
- signed int result; // eax@1
- signed int v4; // esi@2
- signed int v5; // esi@4
- char v6; // [sp+4h] [bp-10h]@1
- result = sub_41F810((int)&v6);
- if ( !result )
- {
- v4 = sub_4202E0(a1, &v6);
- if ( v4 )
- {
- sub_41F860((int)&v6);
- result = v4;
- }
- else
- {
- v5 = sub_423700((int)&v6, a2, a3);
- sub_41F860((int)&v6);
- result = v5;
- }
- }
- return result;
- }
- // 4202E0: using guessed type _DWORD __cdecl sub_4202E0(_DWORD, _DWORD);
- //----- (00420CE0) --------------------------------------------------------
- signed int __cdecl sub_420CE0(int a1, int a2, int a3)
- {
- signed int result; // eax@5
- if ( *(_DWORD *)(a2 + 8) != 1 && *(_DWORD *)a2 )
- {
- if ( *(_DWORD *)a2 <= 0 || (**(_BYTE **)(a2 + 12) & 1) != 1 )
- result = sub_423780(a1, a2, a3);
- else
- result = sub_423C50(a1, a2, a3);
- }
- else
- {
- result = -3;
- }
- return result;
- }
- //----- (00420D30) --------------------------------------------------------
- signed int __cdecl sub_420D30(int a1, int a2)
- {
- int v2; // edx@1
- signed int result; // eax@2
- v2 = **(_DWORD **)(a1 + 12);
- if ( v2 & 1 )
- {
- *(_DWORD *)a2 = -((v2 + ((2 * v2 + 4) & 8))
- * (2 - v2 * (v2 + ((2 * v2 + 4) & 8)))
- * (2 - v2 * (v2 + ((2 * v2 + 4) & 8)) * (2 - v2 * (v2 + ((2 * v2 + 4) & 8))))
- * (2
- - v2
- * (v2 + ((2 * v2 + 4) & 8))
- * (2 - v2 * (v2 + ((2 * v2 + 4) & 8)))
- * (2 - v2 * (v2 + ((2 * v2 + 4) & 8)) * (2 - v2 * (v2 + ((2 * v2 + 4) & 8)))))) & 0xFFFFFFF;
- result = 0;
- }
- else
- {
- result = -3;
- }
- return result;
- }
- //----- (00420D90) --------------------------------------------------------
- signed int __cdecl sub_420D90(unsigned int a1, signed int *a2)
- {
- int v2; // edx@1
- signed int v3; // edi@1
- int v4; // esi@2
- signed int result; // eax@2
- int v6; // edi@5
- v2 = sub_41FA70((int)a2) % 28;
- v3 = v2;
- if ( *a2 <= 1 )
- {
- v4 = a1;
- sub_424010(a1, 1);
- v3 = 1;
- }
- else
- {
- v4 = a1;
- result = sub_41FB00(a1, v2 + 28 * *a2 - 29);
- if ( result )
- return result;
- }
- v6 = v3 - 1;
- if ( v6 >= 28 )
- {
- LABEL_10:
- result = 0;
- }
- else
- {
- while ( 1 )
- {
- result = sub_423F60(v4, v4);
- if ( result )
- break;
- if ( sub_421430(v4, (int)a2) != -1 )
- {
- result = sub_421850((signed int *)v4, a2, v4);
- if ( result )
- break;
- }
- ++v6;
- if ( v6 >= 28 )
- goto LABEL_10;
- }
- }
- return result;
- }
- //----- (00420E30) --------------------------------------------------------
- signed int __cdecl sub_420E30(int a1, int a2, int a3)
- {
- int v3; // ebx@1
- int v4; // edi@1
- signed int result; // eax@3
- int v6; // esi@4
- int v7; // eax@6
- int v8; // ecx@6
- int v9; // edi@7
- int v10; // edx@7
- int v11; // ebx@7
- int v12; // ebp@7
- unsigned __int64 v13; // kr08_8@8
- int v14; // ebp@10
- unsigned int v15; // ebp@10
- int v16; // [sp+Ch] [bp-Ch]@7
- int v17; // [sp+10h] [bp-8h]@7
- int i; // [sp+14h] [bp-4h]@6
- v3 = a2;
- v4 = 2 * *(_DWORD *)a2 + 1;
- if ( (unsigned int)v4 >= 0x200 || *(_DWORD *)a2 >= 0x100u )
- {
- v6 = a1;
- if ( *(_DWORD *)(a1 + 4) >= v4 || (result = sub_421250(a1, 2 * *(_DWORD *)a2 + 1)) == 0 )
- {
- *(_DWORD *)a1 = v4;
- v7 = *(_DWORD *)a2;
- v8 = 0;
- for ( i = 0; v8 < *(_DWORD *)a2; v7 = *(_DWORD *)a2 )
- {
- v9 = *(_DWORD *)(v6 + 12) + 4 * v8;
- v10 = *(_DWORD *)(v3 + 12);
- v11 = 0;
- v12 = a3 * *(_DWORD *)v9 & 0xFFFFFFF;
- v16 = v10;
- v17 = 0;
- if ( v7 > 0 )
- {
- do
- {
- v13 = *(_DWORD *)v16 * (unsigned __int64)(unsigned int)v12
- + (unsigned int)(*(_DWORD *)v16 * v12)
- + (unsigned int)v11;
- v16 += 4;
- v11 = unknown_libname_1(28);
- *(_DWORD *)v9 = v13 & 0xFFFFFFF;
- v9 += 4;
- ++v17;
- }
- while ( v17 < *(_DWORD *)a2 );
- if ( v11 )
- {
- do
- {
- v14 = *(_DWORD *)v9;
- v9 += 4;
- v15 = v11 + v14;
- *(_DWORD *)(v9 - 4) = v15;
- v11 = v15 >> 28;
- *(_DWORD *)(v9 - 4) = v15 & 0xFFFFFFF;
- }
- while ( v15 >> 28 );
- }
- v6 = a1;
- v8 = i;
- }
- ++v8;
- i = v8;
- v3 = a2;
- }
- sub_4212C0(v6);
- sub_423500(v6, *(_DWORD *)v3);
- if ( sub_421430(v6, v3) == -1 )
- result = 0;
- else
- result = sub_421850((signed int *)v6, (signed int *)v3, v6);
- }
- }
- else
- {
- result = sub_424040(a1, a2, a3);
- }
- return result;
- }
- // 413010: using guessed type int __thiscall unknown_libname_1(_DWORD);
- //----- (00420FA0) --------------------------------------------------------
- signed int __cdecl sub_420FA0(int a1, int a2, int a3, int a4)
- {
- signed int result; // eax@2
- signed int v5; // edi@5
- signed int v6; // edi@7
- signed int v7; // edi@9
- signed int v8; // esi@11
- int v9; // eax@14
- char v10; // [sp+Ch] [bp-20h]@4
- char v11; // [sp+1Ch] [bp-10h]@7
- if ( *(_DWORD *)(a3 + 8) == 1 )
- {
- result = -3;
- }
- else
- {
- if ( *(_DWORD *)(a2 + 8) == 1 )
- {
- result = sub_41F810((int)&v10);
- if ( !result )
- {
- v5 = sub_420CE0(a1, a3, (int)&v10);
- if ( v5 )
- {
- sub_41F860((int)&v10);
- result = v5;
- }
- else
- {
- v6 = sub_41F810((int)&v11);
- if ( v6 )
- {
- sub_41F860((int)&v10);
- result = v6;
- }
- else
- {
- v7 = sub_423640(a2, (int)&v11);
- if ( v7 )
- {
- sub_423670((int)&v10);
- result = v7;
- }
- else
- {
- v8 = sub_420FA0(&v10, &v11, a3, a4);
- sub_423670((int)&v10);
- result = v8;
- }
- }
- }
- }
- }
- else
- {
- if ( sub_424E00(a3) == 1 )
- {
- result = sub_4248B0(a1, a2, a3, a4, 1);
- }
- else
- {
- v9 = sub_424870(a3);
- if ( !v9 )
- v9 = 2 * sub_424810(a3);
- if ( *(_DWORD *)a3 > 0 && (**(_BYTE **)(a3 + 12) & 1) == 1 || v9 )
- result = sub_424250(a1, a2, a3, a4, v9);
- else
- result = sub_4248B0(a1, a2, a3, a4, 0);
- }
- }
- }
- return result;
- }
- // 420FA0: using guessed type _DWORD __cdecl sub_420FA0(_DWORD, _DWORD, _DWORD, _DWORD);
- //----- (00421130) --------------------------------------------------------
- signed int __cdecl sub_421130(int a1, signed int a2, int a3)
- {
- signed int v3; // eax@1
- bool v4; // zf@1
- bool v5; // sf@1
- int v6; // edi@1
- int v7; // ebp@3
- unsigned int *v8; // esi@3
- signed int result; // eax@6
- signed int v10; // edi@10
- signed int v11; // ebx@11
- int *v12; // esi@12
- char v13; // [sp+Ch] [bp-10h]@10
- v3 = a2;
- v4 = a2 == 0;
- v5 = a2 < 0;
- v6 = a3;
- *(_DWORD *)a3 = 0;
- if ( v5 | v4 || v3 > 256 )
- {
- result = -3;
- }
- else
- {
- v7 = a1;
- v8 = (unsigned int *)&unk_4381E4;
- do
- {
- if ( !sub_41FA40(v7, *v8) )
- {
- *(_DWORD *)v6 = 1;
- return 0;
- }
- ++v8;
- }
- while ( (signed int)v8 < (signed int)&unk_4385E4 );
- result = sub_424FF0(v7, (int)&a1);
- if ( !result )
- {
- if ( a1 == 1 )
- {
- result = 0;
- }
- else
- {
- result = sub_41F810((int)&v13);
- v10 = result;
- if ( !result )
- {
- v11 = 0;
- if ( a2 <= 0 )
- {
- LABEL_16:
- *(_DWORD *)a3 = 1;
- }
- else
- {
- v12 = (int *)&unk_4381E4;
- while ( 1 )
- {
- sub_424010((unsigned int)&v13, *v12);
- v10 = sub_424E40(v7, (int)&v13, (int)&a1);
- if ( v10 )
- break;
- if ( !a1 )
- break;
- ++v11;
- ++v12;
- if ( v11 >= a2 )
- goto LABEL_16;
- }
- }
- sub_41F860((int)&v13);
- result = v10;
- }
- }
- }
- }
- return result;
- }
- //----- (00421250) --------------------------------------------------------
- signed int __cdecl sub_421250(int a1, signed int a2)
- {
- int v2; // edi@2
- void *v3; // eax@2
- int v5; // eax@4
- if ( *(_DWORD *)(a1 + 4) < a2 )
- {
- v2 = 64 - a2 % 32 + a2;
- v3 = realloc(*(void **)(a1 + 12), 4 * (64 - a2 % 32 + a2));
- if ( !v3 )
- return -2;
- *(_DWORD *)(a1 + 12) = v3;
- v5 = *(_DWORD *)(a1 + 4);
- for ( *(_DWORD *)(a1 + 4) = v2; v5 < *(_DWORD *)(a1 + 4); *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * v5 - 4) = 0 )
- ++v5;
- }
- return 0;
- }
- //----- (004212C0) --------------------------------------------------------
- int __cdecl sub_4212C0(int a1)
- {
- int v1; // edx@2
- int v2; // eax@4
- int result; // eax@5
- if ( *(_DWORD *)a1 > 0 )
- {
- v1 = *(_DWORD *)(a1 + 12);
- do
- {
- if ( *(_DWORD *)(v1 + 4 * *(_DWORD *)a1 - 4) )
- break;
- v2 = *(_DWORD *)a1 - 1;
- *(_DWORD *)a1 = v2;
- }
- while ( v2 > 0 );
- }
- result = *(_DWORD *)a1;
- if ( !*(_DWORD *)a1 )
- *(_DWORD *)(a1 + 8) = 0;
- return result;
- }
- //----- (004212F0) --------------------------------------------------------
- signed int __cdecl sub_4212F0(int a1, signed int a2, int a3)
- {
- int v3; // ebx@1
- signed int result; // eax@2
- signed int v5; // esi@3
- int v6; // edx@7
- unsigned int *v7; // edi@8
- signed int v8; // ebp@8
- int v9; // ecx@8
- int v10; // edx@8
- int v11; // ebp@8
- unsigned int v12; // eax@11
- int v13; // esi@11
- int v14; // eax@11
- int v15; // [sp+10h] [bp+4h]@8
- int v16; // [sp+14h] [bp+8h]@7
- int v17; // [sp+18h] [bp+Ch]@8
- v3 = a3;
- if ( a1 == a3 || (result = sub_41F8F0(a1, a3)) == 0 )
- {
- v5 = a2;
- if ( *(_DWORD *)(a3 + 4) >= a2 / 28 + *(_DWORD *)a3 + 1
- || (result = sub_421250(a3, a2 / 28 + *(_DWORD *)a3 + 1)) == 0 )
- {
- if ( a2 < 28 || (result = sub_423560(a3, a2 / 28)) == 0 )
- {
- v6 = a2 % 28;
- v16 = a2 % 28;
- if ( v5 % 28 )
- {
- v7 = *(unsigned int **)(a3 + 12);
- v8 = 1 << v6;
- v9 = 28 - v6;
- v10 = 0;
- v17 = v9;
- v15 = 0;
- v11 = v8 - 1;
- if ( *(_DWORD *)v3 > 0 )
- {
- while ( 1 )
- {
- v12 = *v7;
- ++v7;
- v13 = v11 & (v12 >> v9);
- v14 = v10 | (v12 << v16);
- v10 = v13;
- *(v7 - 1) = v14 & 0xFFFFFFF;
- ++v15;
- if ( v15 >= *(_DWORD *)v3 )
- break;
- LOBYTE(v9) = v17;
- }
- if ( v13 )
- *(_DWORD *)(*(_DWORD *)(v3 + 12) + 4 * (*(_DWORD *)v3)++) = v13;
- }
- }
- sub_4212C0(v3);
- result = 0;
- }
- }
- }
- return result;
- }
- //----- (004213F0) --------------------------------------------------------
- int __cdecl sub_4213F0(unsigned int a1)
- {
- __int64 v1; // qax@1
- int v2; // esi@1
- int v3; // ecx@1
- v1 = a1;
- v2 = *(_DWORD *)(a1 + 4);
- v3 = *(_DWORD *)(a1 + 12);
- *(_DWORD *)(a1 + 8) = 0;
- *(_DWORD *)a1 = 0;
- if ( v2 > 0 )
- {
- do
- {
- *(_DWORD *)v3 = 0;
- v3 += 4;
- ++HIDWORD(v1);
- }
- while ( SHIDWORD(v1) < *(_DWORD *)(v1 + 4) );
- }
- return v1;
- }
- //----- (00421430) --------------------------------------------------------
- signed int __cdecl sub_421430(int a1, int a2)
- {
- int v2; // ecx@1
- signed int result; // eax@2
- int v4; // edi@5
- int v5; // eax@5
- int v6; // ebx@6
- unsigned int v7; // esi@7
- v2 = *(_DWORD *)a1;
- if ( *(_DWORD *)a1 > *(_DWORD *)a2 )
- return 1;
- if ( *(_DWORD *)a1 >= *(_DWORD *)a2 )
- {
- v4 = 0;
- v5 = *(_DWORD *)(a1 + 12) + 4 * v2 - 4;
- if ( v2 > 0 )
- {
- v6 = *(_DWORD *)(a2 + 12) + 4 * v2 - 4 - v5;
- do
- {
- v7 = *(_DWORD *)(v6 + v5);
- if ( *(_DWORD *)v5 > v7 )
- return 1;
- if ( *(_DWORD *)v5 < v7 )
- goto LABEL_4;
- ++v4;
- v5 -= 4;
- }
- while ( v4 < v2 );
- }
- result = 0;
- }
- else
- {
- LABEL_4:
- result = -1;
- }
- return result;
- }
- //----- (00421490) --------------------------------------------------------
- int __cdecl sub_421490(int a1, int a2)
- {
- int v2; // ecx@1
- int result; // eax@1
- char v4; // dl@2
- v2 = 0;
- for ( result = a2 - 1; v2 < result; --result )
- {
- v4 = *(_BYTE *)(v2 + a1);
- *(_BYTE *)(v2 + a1) = *(_BYTE *)(result + a1);
- *(_BYTE *)(result + a1) = v4;
- ++v2;
- }
- return result;
- }
- //----- (004214C0) --------------------------------------------------------
- signed int __cdecl sub_4214C0(int a1, int a2, unsigned int a3, int a4)
- {
- signed int result; // eax@2
- int v5; // ebx@3
- int v6; // ecx@6
- int v7; // eax@13
- int v8; // ecx@13
- unsigned __int64 v9; // qdi@13
- int v10; // eax@13
- unsigned __int64 v11; // qax@16
- unsigned int v12; // ebx@18
- int v13; // [sp+Ch] [bp-18h]@5
- unsigned int v14; // [sp+10h] [bp-14h]@16
- int v15; // [sp+14h] [bp-10h]@12
- int v16; // [sp+1Ch] [bp-8h]@13
- int v17; // [sp+20h] [bp-4h]@20
- if ( !a2 )
- return -3;
- v5 = a1;
- if ( a2 == 1 || !*(_DWORD *)a1 )
- {
- if ( a4 )
- *(_DWORD *)a4 = 0;
- if ( a3 )
- return sub_41F8F0(a1, a3);
- goto LABEL_26;
- }
- if ( sub_421680(a2, (int)&v13) == 1 )
- {
- v6 = v13;
- if ( a4 )
- *(_DWORD *)a4 = **(_DWORD **)(a1 + 12) & ((1 << v13) - 1);
- if ( a3 )
- return sub_4216E0(a1, v6, a3, 0);
- goto LABEL_26;
- }
- if ( a2 == 3 )
- return sub_425040(a1, a3, a4);
- result = sub_4235D0((int)&v15, *(_DWORD *)a1);
- if ( !result )
- {
- v7 = *(_DWORD *)a1;
- v8 = *(_DWORD *)(a1 + 8);
- v15 = v7;
- v9 = 0i64;
- v10 = v7 - 1;
- v16 = v8;
- v13 = v10;
- if ( v10 >= 0 )
- {
- while ( 1 )
- {
- v14 = *(_DWORD *)(*(_DWORD *)(v5 + 12) + 4 * v10);
- v11 = v9 << 28;
- v9 = (v9 << 28) | v14;
- if ( HIDWORD(v11) <= 0 && (unsigned int)v9 < a2 )
- {
- v12 = 0;
- }
- else
- {
- v12 = v9 / (unsigned int)a2;
- v9 -= v12 * (unsigned __int64)(unsigned int)a2;
- }
- *(_DWORD *)(v17 + 4 * v13--) = v12;
- if ( v13 < 0 )
- break;
- v5 = a1;
- v10 = v13;
- }
- }
- if ( a4 )
- *(_DWORD *)a4 = v9;
- if ( a3 )
- {
- sub_4212C0((int)&v15);
- sub_4234B0((int)&v15, a3);
- }
- sub_41F860((int)&v15);
- LABEL_26:
- result = 0;
- }
- return result;
- }
- //----- (00421680) --------------------------------------------------------
- signed int __cdecl sub_421680(int a1, int a2)
- {
- signed int v2; // ecx@1
- v2 = 1;
- while ( a1 != 1 << v2 )
- {
- ++v2;
- if ( v2 >= 28 )
- return 0;
- }
- *(_DWORD *)a2 = v2;
- return 1;
- }
- //----- (004216B0) --------------------------------------------------------
- signed int __cdecl sub_4216B0(int a1, int a2)
- {
- signed int result; // eax@1
- result = sub_41F810(a1);
- if ( !result )
- result = sub_41F8F0(a2, a1);
- return result;
- }
- //----- (004216E0) --------------------------------------------------------
- signed int __cdecl sub_4216E0(int a1, int a2, unsigned int a3, unsigned int a4)
- {
- int v4; // edi@1
- signed int v5; // esi@2
- signed int result; // eax@4
- signed int v7; // esi@7
- int v8; // esi@9
- signed int v9; // ebx@9
- int v10; // ecx@13
- char v11; // dl@14
- int v12; // edi@14
- int v13; // ebp@14
- int v14; // ebx@14
- unsigned int v15; // eax@17
- unsigned int v16; // esi@17
- int v17; // eax@17
- char v18; // [sp+Ch] [bp-10h]@5
- int v19; // [sp+20h] [bp+4h]@15
- int v20; // [sp+24h] [bp+8h]@13
- v4 = a2;
- if ( a2 > 0 )
- {
- result = sub_41F810((int)&v18);
- if ( !result )
- {
- if ( a4 && (v7 = sub_425160(a1, a2, (unsigned int)&v18)) != 0 )
- {
- sub_41F860((int)&v18);
- result = v7;
- }
- else
- {
- v8 = a3;
- v9 = sub_41F8F0(a1, a3);
- if ( v9 )
- {
- sub_41F860((int)&v18);
- result = v9;
- }
- else
- {
- if ( a2 >= 28 )
- sub_423500(a3, a2 / 28);
- v10 = a2 % 28;
- v20 = a2 % 28;
- if ( v4 % 28 )
- {
- v11 = 28 - v10;
- v12 = *(_DWORD *)(a3 + 12) + 4 * *(_DWORD *)a3 - 4;
- v13 = 0;
- v14 = (1 << v10) - 1;
- if ( *(_DWORD *)a3 - 1 >= 0 )
- {
- v19 = *(_DWORD *)a3;
- while ( 1 )
- {
- v15 = *(_DWORD *)v12;
- v12 -= 4;
- v16 = v15;
- v17 = (v13 << v11) | (v15 >> v10);
- v13 = v14 & v16;
- *(_DWORD *)(v12 + 4) = v17;
- --v19;
- if ( !v19 )
- break;
- LOBYTE(v10) = v20;
- }
- v8 = a3;
- }
- }
- sub_4212C0(v8);
- if ( a4 )
- sub_4234B0((int)&v18, a4);
- sub_41F860((int)&v18);
- result = 0;
- }
- }
- }
- }
- else
- {
- v5 = sub_41F8F0(a1, a3);
- if ( a4 )
- sub_4213F0(a4);
- result = v5;
- }
- return result;
- }
- //----- (00421850) --------------------------------------------------------
- signed int __cdecl sub_421850(signed int *a1, signed int *a2, int a3)
- {
- signed int *v3; // ebx@1
- int v4; // ebp@1
- signed int v5; // esi@1
- signed int *v6; // edi@1
- signed int result; // eax@2
- signed int v8; // edx@3
- signed int v9; // ebx@3
- void *v10; // edi@3
- unsigned int v11; // esi@3
- signed int v12; // ecx@3
- signed int v13; // ecx@4
- int v14; // eax@5
- int v15; // eax@5
- unsigned int v16; // eax@5
- int v17; // ebx@8
- int v18; // ecx@9
- unsigned int v19; // ecx@9
- signed int v20; // [sp+14h] [bp+4h]@1
- signed int v21; // [sp+18h] [bp+8h]@1
- int v22; // [sp+1Ch] [bp+Ch]@3
- v3 = a1;
- v4 = a3;
- v5 = *a1;
- v6 = a2;
- v20 = v5;
- v21 = *a2;
- if ( *(_DWORD *)(a3 + 4) >= v5 || (result = sub_421250(a3, v5)) == 0 )
- {
- v22 = *(_DWORD *)a3;
- *(_DWORD *)v4 = v5;
- v8 = v3[3];
- v9 = v6[3];
- v10 = *(void **)(v4 + 12);
- v11 = 0;
- v12 = 0;
- if ( v21 > 0 )
- {
- v13 = v21;
- do
- {
- v14 = *(_DWORD *)v8;
- v8 += 4;
- v15 = v14 - *(_DWORD *)v9;
- v9 += 4;
- v10 = (char *)v10 + 4;
- v16 = v15 - v11;
- *((_DWORD *)v10 - 1) = v16;
- *((_DWORD *)v10 - 1) = v16 & 0xFFFFFFF;
- v11 = v16 >> 31;
- --v13;
- }
- while ( v13 );
- v12 = v21;
- }
- if ( v12 < v20 )
- {
- v17 = v20 - v12;
- do
- {
- v18 = *(_DWORD *)v8;
- v8 += 4;
- v19 = v18 - v11;
- *(_DWORD *)v10 = v19;
- *(_DWORD *)v10 = v19 & 0xFFFFFFF;
- v10 = (char *)v10 + 4;
- --v17;
- v11 = v19 >> 31;
- }
- while ( v17 );
- }
- if ( *(_DWORD *)v4 < v22 )
- memset(v10, 0, 4 * (v22 - *(_DWORD *)v4));
- sub_4212C0(v4);
- result = 0;
- }
- return result;
- }
- //----- (00421920) --------------------------------------------------------
- signed int __cdecl sub_421920(int a1, int a2, int a3)
- {
- int v3; // ebx@1
- int v4; // eax@1
- int v5; // edi@1
- int v6; // ebp@4
- signed int result; // eax@5
- int v8; // ecx@6
- int v9; // esi@6
- int v10; // ebx@6
- int v11; // edi@6
- int v12; // ecx@6
- unsigned int v13; // eax@6
- int v14; // edx@6
- int v15; // ecx@8
- int v16; // ecx@8
- unsigned int v17; // ecx@8
- unsigned int v18; // eax@12
- void *v19; // edi@13
- int v20; // [sp+10h] [bp-8h]@2
- int v21; // [sp+14h] [bp-4h]@6
- int v22; // [sp+1Ch] [bp+4h]@2
- int v23; // [sp+20h] [bp+8h]@2
- int v24; // [sp+24h] [bp+Ch]@7
- v3 = a1;
- v4 = *(_DWORD *)a1;
- v5 = a2;
- if ( *(_DWORD *)a1 <= *(_DWORD *)a2 )
- {
- v22 = *(_DWORD *)a1;
- v23 = *(_DWORD *)a2;
- v20 = v5;
- }
- else
- {
- v22 = *(_DWORD *)a2;
- v23 = v4;
- v20 = v3;
- }
- v6 = a3;
- if ( *(_DWORD *)(a3 + 4) >= v23 + 1 || (result = sub_421250(a3, v23 + 1)) == 0 )
- {
- v8 = *(_DWORD *)a3;
- *(_DWORD *)a3 = v23 + 1;
- v9 = *(_DWORD *)(v5 + 12);
- v10 = *(_DWORD *)(v3 + 12);
- v11 = *(_DWORD *)(a3 + 12);
- v21 = v8;
- v12 = v22;
- v13 = 0;
- v14 = 0;
- if ( v22 > 0 )
- {
- v24 = v22;
- v14 = v22;
- do
- {
- v15 = *(_DWORD *)v9;
- v9 += 4;
- v16 = *(_DWORD *)v10 + v15;
- v10 += 4;
- v11 += 4;
- v17 = v13 + v16;
- *(_DWORD *)(v11 - 4) = v17;
- *(_DWORD *)(v11 - 4) = v17 & 0xFFFFFFF;
- v13 = v17 >> 28;
- --v24;
- }
- while ( v24 );
- v12 = v22;
- }
- if ( v12 != v23 && v14 < v23 )
- {
- do
- {
- v11 += 4;
- v18 = *(_DWORD *)(*(_DWORD *)(v20 + 12) + 4 * v14) + v13;
- *(_DWORD *)(v11 - 4) = v18;
- *(_DWORD *)(v11 - 4) &= 0xFFFFFFFu;
- v13 = v18 >> 28;
- ++v14;
- }
- while ( v14 < v23 );
- }
- *(_DWORD *)v11 = v13;
- v19 = (void *)(v11 + 4);
- if ( *(_DWORD *)v6 < v21 )
- memset(v19, 0, 4 * (v21 - *(_DWORD *)v6));
- sub_4212C0(v6);
- result = 0;
- }
- return result;
- }
- //----- (00421A30) --------------------------------------------------------
- signed int __cdecl sub_421A30(int a1, int a2, int a3, signed int a4)
- {
- int v4; // ebp@1
- int v5; // esi@1
- unsigned int v6; // eax@2
- signed int result; // eax@5
- unsigned int v8; // eax@7
- signed int v9; // ecx@7
- bool v10; // zf@7
- bool v11; // sf@7
- signed int v12; // edx@8
- signed int v13; // eax@10
- int v14; // ebx@10
- int v15; // edi@12
- int v16; // esi@12
- signed int v17; // edx@12
- int v18; // ecx@14
- signed int v19; // [sp+Ch] [bp-28h]@8
- signed int v20; // [sp+10h] [bp-24h]@13
- signed int v21; // [sp+14h] [bp-20h]@7
- int v22; // [sp+18h] [bp-1Ch]@12
- signed int v23; // [sp+1Ch] [bp-18h]@13
- unsigned int v24; // [sp+20h] [bp-14h]@7
- int v25; // [sp+24h] [bp-10h]@6
- int v26; // [sp+30h] [bp-4h]@12
- v4 = a2;
- v5 = a1;
- if ( (unsigned int)a4 >= 0x200 )
- goto LABEL_22;
- v6 = *(_DWORD *)a1;
- if ( *(_DWORD *)a1 >= *(_DWORD *)a2 )
- v6 = *(_DWORD *)a2;
- if ( v6 >= 0x100 )
- {
- LABEL_22:
- result = sub_4235D0((int)&v25, a4);
- if ( !result )
- {
- v8 = *(_DWORD *)a1;
- v9 = 0;
- v10 = *(_DWORD *)a1 == 0;
- v11 = *(_DWORD *)a1 < 0;
- v25 = a4;
- v24 = v8;
- v21 = 0;
- if ( !(v11 | v10) )
- {
- v12 = a4;
- v19 = a4;
- while ( 1 )
- {
- v13 = *(_DWORD *)v4;
- v14 = 0;
- if ( *(_DWORD *)v4 >= v12 )
- v13 = v12;
- v15 = *(_DWORD *)(v4 + 12);
- v22 = *(_DWORD *)(*(_DWORD *)(v5 + 12) + 4 * v9);
- v16 = v26 + 4 * v9;
- v17 = 0;
- if ( v13 > 0 )
- {
- v20 = v13;
- v23 = v13;
- do
- {
- v18 = *(_DWORD *)v15;
- v15 += 4;
- *(_DWORD *)v16 = (v14 + *(_DWORD *)v16 + v18 * v22) & 0xFFFFFFF;
- v16 += 4;
- v14 = unknown_libname_1(28);
- --v20;
- }
- while ( v20 );
- v4 = a2;
- v9 = v21;
- v17 = v23;
- }
- if ( v9 + v17 < a4 )
- *(_DWORD *)v16 = v14;
- ++v9;
- v21 = v9;
- --v19;
- if ( v9 >= (signed int)v24 )
- break;
- v12 = v19;
- v5 = a1;
- }
- }
- sub_4212C0((int)&v25);
- sub_4234B0((int)&v25, a3);
- sub_41F860((int)&v25);
- result = 0;
- }
- }
- else
- {
- result = sub_421B90(a1, a2, a3, a4);
- }
- return result;
- }
- // 413010: using guessed type int __thiscall unknown_libname_1(_DWORD);
- //----- (00421B90) --------------------------------------------------------
- signed int __cdecl sub_421B90(int a1, int a2, int a3, signed int a4)
- {
- int v4; // esi@1
- signed int result; // eax@2
- int v6; // edx@3
- int v7; // ecx@3
- signed int v8; // eax@3
- int v9; // ebp@6
- int v10; // ebx@6
- int v11; // ecx@7
- int v12; // edx@11
- int v13; // edi@11
- int v14; // eax@11
- int v15; // esi@11
- int v16; // ecx@14
- unsigned int v17; // eax@15
- unsigned int v18; // edx@16
- int v19; // ebx@18
- void *v20; // edx@18
- int v21; // edi@18
- int v22; // eax@18
- void *v23; // edi@19
- signed int v24; // [sp+8h] [bp-820h]@4
- char *v25; // [sp+Ch] [bp-81Ch]@7
- unsigned int v26; // [sp+14h] [bp-814h]@6
- int v27; // [sp+18h] [bp-810h]@7
- int v28; // [sp+1Ch] [bp-80Ch]@7
- int v29; // [sp+20h] [bp-808h]@3
- int v30; // [sp+24h] [bp-804h]@7
- char v31; // [sp+28h] [bp-800h]@7
- v4 = a3;
- if ( *(_DWORD *)(a3 + 4) >= a4 || (result = sub_421250(a3, a4)) == 0 )
- {
- v6 = *(_DWORD *)a1;
- v7 = *(_DWORD *)a2;
- v29 = *(_DWORD *)a1;
- v8 = *(_DWORD *)a2 + *(_DWORD *)a1;
- if ( a4 >= *(_DWORD *)a2 + *(_DWORD *)a1 )
- {
- v24 = v7 + v6;
- }
- else
- {
- v8 = a4;
- v24 = a4;
- }
- v9 = 0;
- v10 = 0;
- v26 = 0;
- if ( v8 > 0 )
- {
- v11 = v7 - 1;
- v27 = v11;
- v30 = *(_DWORD *)(a1 + 12);
- v28 = *(_DWORD *)(a2 + 12);
- v25 = &v31;
- while ( 1 )
- {
- if ( v11 >= v9 )
- v11 = v9;
- v12 = v6 - (v9 - v11);
- v13 = v30 + 4 * (v9 - v11);
- v14 = v11 + 1;
- v15 = v28 + 4 * v11;
- if ( v12 < v11 + 1 )
- v14 = v12;
- if ( v14 > 0 )
- {
- v16 = v14;
- do
- {
- v17 = (*(_DWORD *)v13 * (unsigned __int64)*(_DWORD *)v15 + __PAIR__(v26, v10)) >> 32;
- v10 += *(_DWORD *)v13 * *(_DWORD *)v15;
- v15 -= 4;
- v13 += 4;
- --v16;
- v26 = v17;
- }
- while ( v16 );
- }
- *(_DWORD *)v25 = v10 & 0xFFFFFFF;
- v10 = unknown_libname_1(28);
- v8 = v24;
- ++v9;
- v26 = v18;
- v25 += 4;
- if ( v9 >= v24 )
- break;
- v6 = v29;
- v11 = v27;
- }
- v4 = a3;
- }
- v19 = *(_DWORD *)v4;
- v20 = *(void **)(v4 + 12);
- *(_DWORD *)v4 = v8;
- v21 = 0;
- v22 = v8 + 1;
- if ( v22 > 0 )
- {
- v23 = v20;
- v20 = (char *)v20 + 4 * v22;
- memcpy(v23, &v31, 4 * v22);
- v4 = a3;
- v21 = v22;
- }
- if ( v21 < v19 )
- memset(v20, 0, 4 * (v19 - v21));
- sub_4212C0(v4);
- result = 0;
- }
- return result;
- }
- // 413010: using guessed type int __thiscall unknown_libname_1(_DWORD);
- //----- (00421CF0) --------------------------------------------------------
- signed int __cdecl sub_421CF0(int a1, int a2, int a3)
- {
- int v3; // ebp@1
- signed int v4; // esi@1
- signed int v5; // edi@1
- int v6; // esi@3
- int v7; // edx@10
- int v8; // edi@10
- int v9; // ecx@10
- int v10; // eax@10
- int v11; // ecx@10
- int v12; // ebp@12
- int v13; // edx@14
- int v14; // edi@15
- int v15; // eax@16
- int j; // edx@16
- int v17; // edi@17
- int v19; // [sp+10h] [bp-7Ch]@11
- int i; // [sp+10h] [bp-7Ch]@14
- signed int v21; // [sp+14h] [bp-78h]@1
- char v22; // [sp+1Ch] [bp-70h]@7
- int v23; // [sp+2Ch] [bp-60h]@3
- int v24; // [sp+38h] [bp-54h]@10
- int v25; // [sp+3Ch] [bp-50h]@5
- int v26; // [sp+48h] [bp-44h]@10
- char v27; // [sp+4Ch] [bp-40h]@9
- int v28; // [sp+5Ch] [bp-30h]@6
- int v29; // [sp+68h] [bp-24h]@16
- int v30; // [sp+6Ch] [bp-20h]@4
- int v31; // [sp+78h] [bp-14h]@14
- char v32; // [sp+7Ch] [bp-10h]@8
- v3 = a2;
- v4 = *(_DWORD *)a2;
- v5 = -2;
- v21 = -2;
- if ( *(_DWORD *)a1 < *(_DWORD *)a2 )
- v4 = *(_DWORD *)a1;
- v6 = v4 >> 1;
- if ( !sub_4235D0((int)&v23, v6) )
- {
- if ( !sub_4235D0((int)&v30, *(_DWORD *)a1 - v6) )
- {
- if ( !sub_4235D0((int)&v25, v6) )
- {
- if ( !sub_4235D0((int)&v28, *(_DWORD *)a2 - v6) )
- {
- if ( !sub_4235D0((int)&v22, 2 * v6) )
- {
- if ( !sub_4235D0((int)&v32, 2 * v6) )
- {
- if ( !sub_4235D0((int)&v27, 2 * v6) )
- {
- v7 = v24;
- v8 = v26;
- v9 = *(_DWORD *)a2 - v6;
- v30 = *(_DWORD *)a1 - v6;
- v10 = *(_DWORD *)(a1 + 12);
- v28 = v9;
- v11 = *(_DWORD *)(a2 + 12);
- v25 = v6;
- v23 = v6;
- if ( v6 > 0 )
- {
- v19 = v6;
- do
- {
- v12 = *(_DWORD *)v10;
- v10 += 4;
- *(_DWORD *)v7 = v12;
- *(_DWORD *)v8 = *(_DWORD *)v11;
- v7 += 4;
- v8 += 4;
- v11 += 4;
- --v19;
- }
- while ( v19 );
- v3 = a2;
- }
- v13 = v31;
- for ( i = v6; i < *(_DWORD *)a1; ++i )
- {
- v14 = *(_DWORD *)v10;
- v10 += 4;
- *(_DWORD *)v13 = v14;
- v13 += 4;
- }
- v15 = v29;
- for ( j = v6; j < *(_DWORD *)v3; ++j )
- {
- v17 = *(_DWORD *)v11;
- v11 += 4;
- *(_DWORD *)v15 = v17;
- v15 += 4;
- }
- sub_4212C0((int)&v23);
- sub_4212C0((int)&v25);
- if ( !sub_420150(&v23, &v25, &v32)
- && !sub_420150(&v30, &v28, &v27)
- && !sub_421920((int)&v30, (int)&v23, (int)&v22)
- && !sub_421920((int)&v28, (int)&v25, (int)&v23)
- && !sub_420150(&v22, &v23, &v22)
- && !sub_41FE40((int)&v32, (int)&v27, (int)&v23)
- && !sub_421850((signed int *)&v22, &v23, (int)&v22)
- && !sub_423560((int)&v22, v6)
- && !sub_423560((int)&v27, 2 * v6)
- && !sub_41FE40((int)&v32, (int)&v22, (int)&v22)
- && !sub_41FE40((int)&v22, (int)&v27, a3) )
- v21 = 0;
- sub_41F860((int)&v27);
- }
- sub_41F860((int)&v32);
- }
- sub_41F860((int)&v22);
- }
- sub_41F860((int)&v28);
- v5 = v21;
- }
- sub_41F860((int)&v25);
- }
- sub_41F860((int)&v30);
- }
- sub_41F860((int)&v23);
- }
- return v5;
- }
- // 420150: using guessed type _DWORD __cdecl sub_420150(_DWORD, _DWORD, _DWORD);
- //----- (00422020) --------------------------------------------------------
- signed int __cdecl sub_422020(int a1, int a2, int a3)
- {
- signed int result; // eax@1
- signed int v4; // ecx@2
- int v5; // edi@4
- signed int v6; // esi@4
- int v7; // ebx@7
- char v8; // [sp+0h] [bp-D4h]@12
- char v9; // [sp+10h] [bp-C4h]@16
- char v10; // [sp+20h] [bp-B4h]@34
- char v11; // [sp+30h] [bp-A4h]@29
- char v12; // [sp+40h] [bp-94h]@20
- int v13; // [sp+50h] [bp-84h]@4
- char v14; // [sp+54h] [bp-80h]@8
- char v15; // [sp+64h] [bp-70h]@5
- char v16; // [sp+74h] [bp-60h]@11
- char v17; // [sp+84h] [bp-50h]@6
- char v18; // [sp+94h] [bp-40h]@9
- char v19; // [sp+A4h] [bp-30h]@7
- char v20; // [sp+B4h] [bp-20h]@4
- char v21; // [sp+C4h] [bp-10h]@1
- result = sub_4236A0((int)&v21);
- if ( !result )
- {
- v4 = *(_DWORD *)a2;
- if ( *(_DWORD *)a1 < *(_DWORD *)a2 )
- v4 = *(_DWORD *)a1;
- v13 = v4 / 3;
- v5 = 28 * v4 / 3;
- v6 = sub_425160(a1, 28 * v4 / 3, (unsigned int)&v20);
- if ( !v6 )
- {
- v6 = sub_41F8F0(a1, (int)&v15);
- if ( !v6 )
- {
- sub_423500((unsigned int)&v15, v13);
- sub_425160((int)&v15, v5, (unsigned int)&v15);
- v6 = sub_41F8F0(a1, (int)&v17);
- if ( !v6 )
- {
- v7 = v13;
- sub_423500((unsigned int)&v17, 2 * v13);
- v6 = sub_425160(a2, v5, (unsigned int)&v19);
- if ( !v6 )
- {
- v6 = sub_41F8F0(a2, (int)&v14);
- if ( !v6 )
- {
- sub_423500((unsigned int)&v14, v7);
- sub_425160((int)&v14, v5, (unsigned int)&v14);
- v6 = sub_41F8F0(a2, (int)&v18);
- if ( !v6 )
- {
- sub_423500((unsigned int)&v18, 2 * v7);
- v6 = sub_420150(&v20, &v19, &v21);
- if ( !v6 )
- {
- v6 = sub_420150(&v17, &v18, &v16);
- if ( !v6 )
- {
- v6 = sub_423F60((int)&v20, (int)&v8);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v8, (int)&v15, (int)&v8);
- if ( !v6 )
- {
- v6 = sub_423F60((int)&v8, (int)&v8);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v8, (int)&v17, (int)&v8);
- if ( !v6 )
- {
- v6 = sub_423F60((int)&v19, (int)&v9);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v9, (int)&v14, (int)&v9);
- if ( !v6 )
- {
- v6 = sub_423F60((int)&v9, (int)&v9);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v9, (int)&v18, (int)&v9);
- if ( !v6 )
- {
- v6 = sub_420150(&v8, &v9, &v12);
- if ( !v6 )
- {
- v6 = sub_423F60((int)&v17, (int)&v8);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v8, (int)&v15, (int)&v8);
- if ( !v6 )
- {
- v6 = sub_423F60((int)&v8, (int)&v8);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v8, (int)&v20, (int)&v8);
- if ( !v6 )
- {
- v6 = sub_423F60((int)&v18, (int)&v9);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v9, (int)&v14, (int)&v9);
- if ( !v6 )
- {
- v6 = sub_423F60((int)&v9, (int)&v9);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v9, (int)&v19, (int)&v9);
- if ( !v6 )
- {
- v6 = sub_420150(&v8, &v9, &v11);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v17, (int)&v15, (int)&v8);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v8, (int)&v20, (int)&v8);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v18, (int)&v14, (int)&v9);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v9, (int)&v19, (int)&v9);
- if ( !v6 )
- {
- v6 = sub_420150(&v8, &v9, &v10);
- if ( !v6 )
- {
- v6 = sub_41FFD0((int)&v12, (int)&v16, (int)&v12);
- if ( !v6 )
- {
- v6 = sub_41FFD0((int)&v11, (int)&v21, (int)&v11);
- if ( !v6 )
- {
- v6 = sub_420890((int)&v12, (int)&v12);
- if ( !v6 )
- {
- v6 = sub_420890((int)&v11, (int)&v11);
- if ( !v6 )
- {
- v6 = sub_41FFD0(
- (int)&v10,
- (int)&v21,
- (int)&v10);
- if ( !v6 )
- {
- v6 = sub_41FFD0(
- (int)&v10,
- (int)&v16,
- (int)&v10);
- if ( !v6 )
- {
- v6 = sub_41FFD0(
- (int)&v12,
- (int)&v10,
- (int)&v12);
- if ( !v6 )
- {
- v6 = sub_41FFD0(
- (int)&v11,
- (int)&v10,
- (int)&v11);
- if ( !v6 )
- {
- v6 = sub_4212F0(
- (int)&v21,
- 3,
- (int)&v8);
- if ( !v6 )
- {
- v6 = sub_41FFD0(
- (int)&v12,
- (int)&v8,
- (int)&v12);
- if ( !v6 )
- {
- v6 = sub_4212F0(
- (int)&v16,
- 3,
- (int)&v8);
- if ( !v6 )
- {
- v6 = sub_41FFD0(
- (int)&v11,
- (int)&v8,
- (int)&v11);
- if ( !v6 )
- {
- v6 = sub_420220(
- (int)&v10,
- 3,
- (int)&v10);
- if ( !v6 )
- {
- v6 = sub_41FFD0(
- (int)&v10,
- (int)&v12,
- (int)&v10);
- if ( !v6 )
- {
- v6 = sub_41FFD0(
- (int)&v10,
- (int)&v11,
- (int)&v10);
- if ( !v6 )
- {
- v6 = sub_41FFD0((int)&v12, (int)&v10, (int)&v12);
- if ( !v6 )
- {
- v6 = sub_41FFD0((int)&v11, (int)&v10, (int)&v11);
- if ( !v6 )
- {
- v6 = sub_425040((int)&v12, (int)&v12, 0);
- if ( !v6 )
- {
- v6 = sub_425040((int)&v11, (int)&v11, 0);
- if ( !v6 )
- {
- v6 = sub_423560((int)&v12, v7);
- if ( !v6 )
- {
- v6 = sub_423560((int)&v10, 2 * v7);
- if ( !v6 )
- {
- v6 = sub_423560((int)&v11, 3 * v7);
- if ( !v6 )
- {
- v6 = sub_423560((int)&v16, 4 * v7);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v21, (int)&v12, a3);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v10, (int)&v11, (int)&v8);
- if ( !v6 )
- {
- v6 = sub_41FE40((int)&v16, (int)&v8, (int)&v8);
- if ( !v6 )
- v6 = sub_41FE40((int)&v8, a3, a3);
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- sub_423670((int)&v21);
- result = v6;
- }
- return result;
- }
- // 420150: using guessed type _DWORD __cdecl sub_420150(_DWORD, _DWORD, _DWORD);
- //----- (004228C0) --------------------------------------------------------
- signed int __cdecl sub_4228C0(int a1, int a2)
- {
- int v2; // esi@1
- signed int result; // eax@1
- int v4; // ebp@3
- signed int v5; // ebx@3
- int v6; // esi@3
- int v7; // edi@5
- int v8; // esi@5
- int i; // [sp+8h] [bp-24h]@3
- int v10; // [sp+Ch] [bp-20h]@1
- int v11; // [sp+10h] [bp-1Ch]@3
- signed int v12; // [sp+14h] [bp-18h]@3
- int v13; // [sp+18h] [bp-14h]@5
- int v14; // [sp+1Ch] [bp-10h]@1
- int v15; // [sp+28h] [bp-4h]@5
- v2 = *(_DWORD *)a1;
- v10 = *(_DWORD *)a1;
- result = sub_4235D0((int)&v14, 2 * *(_DWORD *)a1 + 1);
- if ( !result )
- {
- v14 = 2 * v2 + 1;
- if ( v2 > 0 )
- {
- v4 = 0;
- v5 = 1;
- v6 = 0;
- v12 = 1;
- v11 = 0;
- for ( i = 0; ; v6 = i )
- {
- *(_DWORD *)(v15 + v4) = (*(_DWORD *)(v15 + v4)
- + *(_DWORD *)(*(_DWORD *)(a1 + 12) + v6) * *(_DWORD *)(*(_DWORD *)(a1 + 12) + v6)) & 0xFFFFFFF;
- v7 = unknown_libname_1(28);
- v13 = *(_DWORD *)(*(_DWORD *)(a1 + 12) + v6);
- v8 = v15 + v4 + 4;
- if ( v5 < v10 )
- {
- do
- {
- *(_DWORD *)v8 = (v7 + *(_DWORD *)v8 + 2 * *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * v5) * v13) & 0xFFFFFFF;
- v8 += 4;
- v7 = unknown_libname_1(28);
- ++v5;
- }
- while ( v5 < v10 );
- v5 = v12;
- v4 = v11;
- }
- for ( ; v7; v7 = unknown_libname_1(28) )
- {
- *(_DWORD *)v8 = (v7 + *(_DWORD *)v8) & 0xFFFFFFF;
- v8 += 4;
- }
- v4 += 8;
- ++v5;
- i += 4;
- v11 = v4;
- v12 = v5;
- if ( v5 - 1 >= v10 )
- break;
- }
- }
- sub_4212C0((int)&v14);
- sub_4234B0((int)&v14, a2);
- sub_41F860((int)&v14);
- result = 0;
- }
- return result;
- }
- // 413010: using guessed type int __thiscall unknown_libname_1(_DWORD);
- //----- (00422A50) --------------------------------------------------------
- signed int __cdecl sub_422A50(int a1, int a2)
- {
- int v2; // ebp@1
- int v3; // edi@1
- signed int v4; // esi@1
- signed int result; // eax@2
- int v6; // ecx@2
- signed int v7; // ebx@5
- int v8; // edx@6
- int v9; // ebp@6
- int v10; // ecx@8
- int v11; // esi@10
- int v12; // edx@10
- int v13; // edi@10
- int v14; // ecx@12
- unsigned int v15; // ecx@15
- unsigned int v16; // ebp@15
- unsigned __int64 v17; // kr08_8@16
- int v18; // esi@19
- int v19; // edx@24
- signed int v20; // ebx@24
- void *v21; // edi@24
- signed int v22; // edx@24
- char *v23; // eax@25
- int v24; // ecx@26
- char *v25; // [sp+Ch] [bp-824h]@6
- int v26; // [sp+10h] [bp-820h]@6
- int v27; // [sp+14h] [bp-81Ch]@15
- int v28; // [sp+18h] [bp-818h]@5
- int v29; // [sp+20h] [bp-810h]@8
- int v30; // [sp+24h] [bp-80Ch]@8
- int v31; // [sp+28h] [bp-808h]@6
- int v32; // [sp+2Ch] [bp-804h]@1
- char v33; // [sp+30h] [bp-800h]@6
- v2 = a2;
- v3 = a1;
- v4 = 2 * *(_DWORD *)a1;
- v32 = 2 * *(_DWORD *)a1;
- if ( *(_DWORD *)(a2 + 4) >= v4 )
- {
- v6 = 0;
- }
- else
- {
- result = sub_421250(a2, v4);
- v6 = 0;
- if ( result )
- return result;
- }
- v7 = 0;
- v28 = v6;
- if ( v4 > v6 )
- {
- v8 = *(_DWORD *)a1;
- v9 = *(_DWORD *)(a1 + 12);
- v31 = *(_DWORD *)a1;
- v26 = *(_DWORD *)(a1 + 12);
- v25 = &v33;
- while ( 1 )
- {
- v29 = v6;
- v30 = v6;
- v10 = v8 - 1;
- if ( v8 - 1 >= v7 )
- v10 = v7;
- v11 = v9 + 4 * v10;
- v12 = v8 - (v7 - v10);
- v13 = v9 + 4 * (v7 - v10);
- if ( v12 >= v10 + 1 )
- v12 = v10 + 1;
- v14 = (v10 - (v7 - v10) + 1) >> 1;
- if ( v12 >= v14 )
- v12 = v14;
- if ( v12 <= 0 )
- {
- v15 = v29;
- }
- else
- {
- v15 = v29;
- v16 = v30;
- v27 = v12;
- do
- {
- v17 = *(_DWORD *)v13 * (unsigned __int64)*(_DWORD *)v11 + __PAIR__(v16, v15);
- v16 = (*(_DWORD *)v13 * (unsigned __int64)*(_DWORD *)v11 + __PAIR__(v16, v15)) >> 32;
- v15 = v17;
- v11 -= 4;
- v13 += 4;
- --v27;
- }
- while ( v27 );
- }
- v18 = v28 + 2 * v15;
- if ( v7 & 1 )
- {
- v9 = v26;
- }
- else
- {
- v9 = v26;
- v18 += *(_DWORD *)(v26 + 4 * (v7 >> 1)) * *(_DWORD *)(v26 + 4 * (v7 >> 1));
- }
- *(_DWORD *)v25 = v18 & 0xFFFFFFF;
- v4 = v32;
- ++v7;
- v28 = unknown_libname_1(28);
- v25 += 4;
- if ( v7 >= v32 )
- break;
- v8 = v31;
- v6 = 0;
- }
- v2 = a2;
- v3 = a1;
- v6 = 0;
- }
- v19 = *(_DWORD *)v3;
- v20 = *(_DWORD *)v2;
- v21 = *(void **)(v2 + 12);
- *(_DWORD *)v2 = 2 * v19;
- v22 = 0;
- if ( v4 > v6 )
- {
- v23 = &v33;
- v22 = v4;
- do
- {
- v21 = (char *)v21 + 4;
- v24 = *(_DWORD *)v23 & 0xFFFFFFF;
- v23 += 4;
- *((_DWORD *)v21 - 1) = v24;
- --v4;
- }
- while ( v4 );
- }
- if ( v22 < v20 )
- memset(v21, 0, 4 * (v20 - v22));
- sub_4212C0(v2);
- return 0;
- }
- // 413010: using guessed type int __thiscall unknown_libname_1(_DWORD);
- //----- (00422C10) --------------------------------------------------------
- signed int __cdecl sub_422C10(int a1, int a2)
- {
- signed int v2; // ebp@1
- int v3; // esi@1
- int v4; // eax@7
- int v5; // ecx@7
- int v6; // edx@8
- int v7; // ebp@9
- int v8; // ecx@11
- int v9; // edx@11
- int v10; // ebp@12
- int v11; // ecx@14
- char v13; // [sp+10h] [bp-60h]@3
- int v14; // [sp+20h] [bp-50h]@1
- int v15; // [sp+2Ch] [bp-44h]@7
- char v16; // [sp+30h] [bp-40h]@6
- int v17; // [sp+40h] [bp-30h]@2
- int v18; // [sp+4Ch] [bp-24h]@11
- char v19; // [sp+50h] [bp-20h]@5
- char v20; // [sp+60h] [bp-10h]@4
- v2 = -2;
- v3 = *(_DWORD *)a1 >> 1;
- if ( !sub_4235D0((int)&v14, v3) )
- {
- if ( !sub_4235D0((int)&v17, *(_DWORD *)a1 - v3) )
- {
- if ( !sub_4235D0((int)&v13, 2 * *(_DWORD *)a1) )
- {
- if ( !sub_4235D0((int)&v20, 2 * *(_DWORD *)a1) )
- {
- if ( !sub_4235D0((int)&v19, 2 * v3) )
- {
- if ( !sub_4235D0((int)&v16, 2 * (*(_DWORD *)a1 - v3)) )
- {
- v4 = *(_DWORD *)(a1 + 12);
- v5 = v15;
- if ( v3 > 0 )
- {
- v6 = v3;
- do
- {
- v7 = *(_DWORD *)v4;
- v4 += 4;
- *(_DWORD *)v5 = v7;
- v5 += 4;
- --v6;
- }
- while ( v6 );
- v2 = -2;
- }
- v8 = v18;
- v9 = v3;
- if ( v3 < *(_DWORD *)a1 )
- {
- do
- {
- v10 = *(_DWORD *)v4;
- v4 += 4;
- *(_DWORD *)v8 = v10;
- v8 += 4;
- ++v9;
- }
- while ( v9 < *(_DWORD *)a1 );
- v2 = -2;
- }
- v11 = *(_DWORD *)a1 - v3;
- v14 = v3;
- v17 = v11;
- sub_4212C0((int)&v14);
- if ( !sub_4202E0(&v14, &v19)
- && !sub_4202E0(&v17, &v16)
- && !sub_421920((int)&v17, (int)&v14, (int)&v13)
- && !sub_4202E0(&v13, &v13)
- && !sub_421920((int)&v19, (int)&v16, (int)&v20)
- && !sub_421850((signed int *)&v13, (signed int *)&v20, (int)&v13)
- && !sub_423560((int)&v13, v3)
- && !sub_423560((int)&v16, 2 * v3)
- && !sub_41FE40((int)&v19, (int)&v13, (int)&v13)
- && !sub_41FE40((int)&v13, (int)&v16, a2) )
- v2 = 0;
- sub_41F860((int)&v16);
- }
- sub_41F860((int)&v19);
- }
- sub_41F860((int)&v20);
- }
- sub_41F860((int)&v13);
- }
- sub_41F860((int)&v17);
- }
- sub_41F860((int)&v14);
- }
- return v2;
- }
- // 4202E0: using guessed type _DWORD __cdecl sub_4202E0(_DWORD, _DWORD);
- //----- (00422E70) --------------------------------------------------------
- signed int __cdecl sub_422E70(int a1, int a2)
- {
- signed int result; // eax@1
- int v3; // ebp@2
- signed int v4; // esi@2
- char v5; // [sp+0h] [bp-90h]@7
- char v6; // [sp+10h] [bp-80h]@19
- char v7; // [sp+20h] [bp-70h]@16
- char v8; // [sp+30h] [bp-60h]@11
- char v9; // [sp+40h] [bp-50h]@3
- char v10; // [sp+50h] [bp-40h]@6
- char v11; // [sp+60h] [bp-30h]@4
- char v12; // [sp+70h] [bp-20h]@2
- char v13; // [sp+80h] [bp-10h]@1
- result = sub_4236A0((int)&v13);
- if ( !result )
- {
- v3 = *(_DWORD *)a1 / 3;
- v4 = sub_425160(a1, 28 * v3, (unsigned int)&v12);
- if ( !v4 )
- {
- v4 = sub_41F8F0(a1, (int)&v9);
- if ( !v4 )
- {
- sub_423500((unsigned int)&v9, v3);
- sub_425160((int)&v9, 28 * v3, (unsigned int)&v9);
- v4 = sub_41F8F0(a1, (int)&v11);
- if ( !v4 )
- {
- sub_423500((unsigned int)&v11, 2 * v3);
- v4 = sub_4202E0(&v12, &v13);
- if ( !v4 )
- {
- v4 = sub_4202E0(&v11, &v10);
- if ( !v4 )
- {
- v4 = sub_423F60((int)&v12, (int)&v5);
- if ( !v4 )
- {
- v4 = sub_41FE40((int)&v5, (int)&v9, (int)&v5);
- if ( !v4 )
- {
- v4 = sub_423F60((int)&v5, (int)&v5);
- if ( !v4 )
- {
- v4 = sub_41FE40((int)&v5, (int)&v11, (int)&v5);
- if ( !v4 )
- {
- v4 = sub_4202E0(&v5, &v8);
- if ( !v4 )
- {
- v4 = sub_423F60((int)&v11, (int)&v5);
- if ( !v4 )
- {
- v4 = sub_41FE40((int)&v5, (int)&v9, (int)&v5);
- if ( !v4 )
- {
- v4 = sub_423F60((int)&v5, (int)&v5);
- if ( !v4 )
- {
- v4 = sub_41FE40((int)&v5, (int)&v12, (int)&v5);
- if ( !v4 )
- {
- v4 = sub_4202E0(&v5, &v7);
- if ( !v4 )
- {
- v4 = sub_41FE40((int)&v11, (int)&v9, (int)&v5);
- if ( !v4 )
- {
- v4 = sub_41FE40((int)&v5, (int)&v12, (int)&v5);
- if ( !v4 )
- {
- v4 = sub_4202E0(&v5, &v6);
- if ( !v4 )
- {
- v4 = sub_41FFD0((int)&v8, (int)&v10, (int)&v8);
- if ( !v4 )
- {
- v4 = sub_41FFD0((int)&v7, (int)&v13, (int)&v7);
- if ( !v4 )
- {
- v4 = sub_420890((int)&v8, (int)&v8);
- if ( !v4 )
- {
- v4 = sub_420890((int)&v7, (int)&v7);
- if ( !v4 )
- {
- v4 = sub_41FFD0((int)&v6, (int)&v13, (int)&v6);
- if ( !v4 )
- {
- v4 = sub_41FFD0((int)&v6, (int)&v10, (int)&v6);
- if ( !v4 )
- {
- v4 = sub_41FFD0((int)&v8, (int)&v6, (int)&v8);
- if ( !v4 )
- {
- v4 = sub_41FFD0((int)&v7, (int)&v6, (int)&v7);
- if ( !v4 )
- {
- v4 = sub_4212F0((int)&v13, 3, (int)&v5);
- if ( !v4 )
- {
- v4 = sub_41FFD0((int)&v8, (int)&v5, (int)&v8);
- if ( !v4 )
- {
- v4 = sub_4212F0((int)&v10, 3, (int)&v5);
- if ( !v4 )
- {
- v4 = sub_41FFD0((int)&v7, (int)&v5, (int)&v7);
- if ( !v4 )
- {
- v4 = sub_420220((int)&v6, 3, (int)&v6);
- if ( !v4 )
- {
- v4 = sub_41FFD0((int)&v6, (int)&v8, (int)&v6);
- if ( !v4 )
- {
- v4 = sub_41FFD0((int)&v6, (int)&v7, (int)&v6);
- if ( !v4 )
- {
- v4 = sub_41FFD0((int)&v8, (int)&v6, (int)&v8);
- if ( !v4 )
- {
- v4 = sub_41FFD0((int)&v7, (int)&v6, (int)&v7);
- if ( !v4 )
- {
- v4 = sub_425040((int)&v8, (int)&v8, 0);
- if ( !v4 )
- {
- v4 = sub_425040((int)&v7, (int)&v7, 0);
- if ( !v4 )
- {
- v4 = sub_423560((int)&v8, v3);
- if ( !v4 )
- {
- v4 = sub_423560((int)&v6, 2 * v3);
- if ( !v4 )
- {
- v4 = sub_423560((int)&v7, 3 * v3);
- if ( !v4 )
- {
- v4 = sub_423560((int)&v10, 4 * v3);
- if ( !v4 )
- {
- v4 = sub_41FE40(
- (int)&v13,
- (int)&v8,
- a2);
- if ( !v4 )
- {
- v4 = sub_41FE40(
- (int)&v6,
- (int)&v7,
- (int)&v5);
- if ( !v4 )
- {
- v4 = sub_41FE40(
- (int)&v10,
- (int)&v5,
- (int)&v5);
- if ( !v4 )
- v4 = sub_41FE40(
- (int)&v5,
- a2,
- a2);
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- sub_423670((int)&v13);
- result = v4;
- }
- return result;
- }
- // 4202E0: using guessed type _DWORD __cdecl sub_4202E0(_DWORD, _DWORD);
- //----- (004234B0) --------------------------------------------------------
- int __cdecl sub_4234B0(int a1, int a2)
- {
- int result; // eax@1
- int v3; // edx@1
- int v4; // esi@1
- int v5; // edi@1
- int v6; // ST1C_4@1
- result = a1;
- v3 = *(_DWORD *)a1;
- v4 = *(_DWORD *)(a1 + 4);
- v5 = *(_DWORD *)(a1 + 8);
- v6 = *(_DWORD *)(a1 + 12);
- *(_DWORD *)a1 = *(_DWORD *)a2;
- *(_DWORD *)(a1 + 4) = *(_DWORD *)(a2 + 4);
- *(_DWORD *)(a1 + 8) = *(_DWORD *)(a2 + 8);
- *(_DWORD *)(a1 + 12) = *(_DWORD *)(a2 + 12);
- *(_DWORD *)a2 = v3;
- *(_DWORD *)(a2 + 4) = v4;
- *(_DWORD *)(a2 + 8) = v5;
- *(_DWORD *)(a2 + 12) = v6;
- return result;
- }
- //----- (00423500) --------------------------------------------------------
- void __cdecl sub_423500(unsigned int a1, int a2)
- {
- int v2; // eax@4
- int v3; // ecx@4
- int i; // esi@4
- int v5; // edi@5
- if ( a2 > 0 )
- {
- if ( *(_DWORD *)a1 > a2 )
- {
- v2 = *(_DWORD *)(a1 + 12);
- v3 = 0;
- for ( i = v2 + 4 * a2; v3 < *(_DWORD *)a1 - a2; ++v3 )
- {
- v5 = *(_DWORD *)i;
- i += 4;
- *(_DWORD *)v2 = v5;
- v2 += 4;
- }
- for ( ; v3 < *(_DWORD *)a1; ++v3 )
- {
- *(_DWORD *)v2 = 0;
- v2 += 4;
- }
- *(_DWORD *)a1 -= a2;
- }
- else
- {
- sub_4213F0(a1);
- }
- }
- }
- //----- (00423560) --------------------------------------------------------
- signed int __cdecl sub_423560(int a1, int a2)
- {
- signed int result; // eax@2
- int v3; // edx@5
- int v4; // eax@5
- int v5; // ecx@5
- int v6; // edi@5
- int v7; // eax@5
- int v8; // edx@5
- int v9; // eax@6
- int v10; // edi@7
- if ( a2 > 0 )
- {
- if ( *(_DWORD *)(a1 + 4) >= a2 + *(_DWORD *)a1 || (result = sub_421250(a1, a2 + *(_DWORD *)a1)) == 0 )
- {
- v3 = *(_DWORD *)(a1 + 12);
- v4 = a2 + *(_DWORD *)a1;
- *(_DWORD *)a1 = v4;
- v5 = v3 + 4 * v4 - 4;
- v6 = v4 - a2;
- v7 = v4 - 1;
- v8 = v3 + 4 * v6 - 4;
- if ( v7 >= a2 )
- {
- v9 = v7 - a2 + 1;
- do
- {
- v10 = *(_DWORD *)v8;
- v8 -= 4;
- *(_DWORD *)v5 = v10;
- v5 -= 4;
- --v9;
- }
- while ( v9 );
- }
- if ( a2 > 0 )
- memset(*(void **)(a1 + 12), 0, 4 * a2);
- result = 0;
- }
- }
- else
- {
- result = 0;
- }
- return result;
- }
- //----- (004235D0) --------------------------------------------------------
- signed int __cdecl sub_4235D0(int a1, signed int a2)
- {
- int v2; // esi@1
- void *v3; // eax@1
- signed int result; // eax@2
- int v5; // eax@3
- v2 = 64 - a2 % 32 + a2;
- v3 = malloc(4 * v2);
- *(_DWORD *)(a1 + 12) = v3;
- if ( v3 )
- {
- v5 = 0;
- *(_DWORD *)a1 = 0;
- *(_DWORD *)(a1 + 4) = v2;
- for ( *(_DWORD *)(a1 + 8) = 0; v5 < v2; *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * v5 - 4) = 0 )
- ++v5;
- result = 0;
- }
- else
- {
- result = -2;
- }
- return result;
- }
- //----- (00423640) --------------------------------------------------------
- signed int __cdecl sub_423640(int a1, int a2)
- {
- signed int result; // eax@2
- if ( a1 == a2 || (result = sub_41F8F0(a1, a2)) == 0 )
- {
- *(_DWORD *)(a2 + 8) = 0;
- result = 0;
- }
- return result;
- }
- //----- (00423670) --------------------------------------------------------
- int __cdecl sub_423670(int a1)
- {
- int result; // eax@1
- int *v2; // esi@2
- result = a1;
- if ( a1 )
- {
- v2 = &a1;
- do
- {
- sub_41F860(result);
- result = v2[1];
- ++v2;
- }
- while ( result );
- }
- return result;
- }
- //----- (004236A0) --------------------------------------------------------
- signed int __cdecl sub_4236A0(int a1)
- {
- int v1; // ebx@1
- int v2; // esi@1
- int v3; // eax@1
- int *v4; // edi@2
- signed int result; // eax@5
- int v6; // ecx@6
- int v7; // esi@6
- int v8; // eax@6
- int *v9; // edi@7
- int v10; // esi@7
- v1 = a1;
- v2 = 0;
- v3 = a1;
- if ( a1 )
- {
- v4 = &a1;
- while ( !sub_41F810(v3) )
- {
- v3 = v4[1];
- ++v4;
- ++v2;
- if ( !v3 )
- goto LABEL_5;
- }
- v6 = v2;
- v7 = v2 - 1;
- v8 = v1;
- if ( v6 )
- {
- v9 = &a1;
- v10 = v7 + 1;
- do
- {
- sub_41F860(v8);
- v8 = v9[1];
- ++v9;
- --v10;
- }
- while ( v10 );
- }
- result = -2;
- }
- else
- {
- LABEL_5:
- result = 0;
- }
- return result;
- }
- //----- (00423700) --------------------------------------------------------
- signed int __cdecl sub_423700(int a1, int a2, int a3)
- {
- signed int result; // eax@1
- signed int v4; // esi@2
- char v5; // [sp+8h] [bp-10h]@1
- int v6; // [sp+10h] [bp-8h]@3
- result = sub_41F810((int)&v5);
- if ( !result )
- {
- v4 = sub_420370(a1, a2, 0, (int)&v5);
- if ( !v4 )
- {
- if ( v6 == *(_DWORD *)(a2 + 8) )
- {
- v4 = 0;
- sub_4234B0((int)&v5, a3);
- }
- else
- {
- v4 = sub_41FE40(a2, (int)&v5, a3);
- }
- }
- sub_41F860((int)&v5);
- result = v4;
- }
- return result;
- }
- //----- (00423780) --------------------------------------------------------
- signed int __cdecl sub_423780(int a1, int a2, int a3)
- {
- signed int result; // eax@3
- signed int v4; // esi@4
- int v5; // [sp+4h] [bp-80h]@29
- int v6; // [sp+10h] [bp-74h]@30
- int v7; // [sp+14h] [bp-70h]@13
- int v8; // [sp+20h] [bp-64h]@32
- int v9; // [sp+24h] [bp-60h]@13
- int v10; // [sp+30h] [bp-54h]@18
- int v11; // [sp+34h] [bp-50h]@12
- int v12; // [sp+40h] [bp-44h]@27
- int v13; // [sp+44h] [bp-40h]@11
- int v14; // [sp+50h] [bp-34h]@15
- int v15; // [sp+54h] [bp-30h]@19
- int v16; // [sp+60h] [bp-24h]@20
- int v17; // [sp+64h] [bp-20h]@5
- int v18; // [sp+70h] [bp-14h]@9
- int v19; // [sp+74h] [bp-10h]@3
- int v20; // [sp+80h] [bp-4h]@7
- if ( *(_DWORD *)(a2 + 8) != 1 && *(_DWORD *)a2 )
- {
- result = sub_4236A0((int)&v19);
- if ( !result )
- {
- v4 = sub_423700(a1, a2, (int)&v19);
- if ( !v4 )
- {
- v4 = sub_41F8F0(a2, (int)&v17);
- if ( !v4 )
- {
- if ( v19 <= 0 || *(_BYTE *)v20 & 1 || v17 <= 0 || *(_BYTE *)v18 & 1 )
- {
- v4 = sub_41F8F0((int)&v19, (int)&v13);
- if ( !v4 )
- {
- v4 = sub_41F8F0((int)&v17, (int)&v11);
- if ( !v4 )
- {
- sub_424010((unsigned int)&v9, 1);
- sub_424010((unsigned int)&v7, 1);
- do
- {
- while ( v13 > 0 && !(*(_BYTE *)v14 & 1) )
- {
- v4 = sub_420890((int)&v13, (int)&v13);
- if ( !v4 )
- {
- if ( (v9 <= 0 || (*(_BYTE *)v10 & 1) != 1) && (v15 <= 0 || (*(_BYTE *)v16 & 1) != 1)
- || (v4 = sub_41FE40((int)&v9, (int)&v17, (int)&v9)) == 0
- && (v4 = sub_41FFD0((int)&v15, (int)&v19, (int)&v15)) == 0 )
- {
- v4 = sub_420890((int)&v9, (int)&v9);
- if ( !v4 )
- {
- v4 = sub_420890((int)&v15, (int)&v15);
- if ( !v4 )
- continue;
- }
- }
- }
- goto LABEL_56;
- }
- while ( v11 > 0 && !(*(_BYTE *)v12 & 1) )
- {
- v4 = sub_420890((int)&v11, (int)&v11);
- if ( !v4 )
- {
- if ( (v5 <= 0 || (*(_BYTE *)v6 & 1) != 1) && (v7 <= 0 || (*(_BYTE *)v8 & 1) != 1)
- || (v4 = sub_41FE40((int)&v5, (int)&v17, (int)&v5)) == 0
- && (v4 = sub_41FFD0((int)&v7, (int)&v19, (int)&v7)) == 0 )
- {
- v4 = sub_420890((int)&v5, (int)&v5);
- if ( !v4 )
- {
- v4 = sub_420890((int)&v7, (int)&v7);
- if ( !v4 )
- continue;
- }
- }
- }
- goto LABEL_56;
- }
- if ( sub_41FA00((int)&v13, (int)&v11) == -1 )
- {
- v4 = sub_41FFD0((int)&v11, (int)&v13, (int)&v11);
- if ( v4
- || (v4 = sub_41FFD0((int)&v5, (int)&v9, (int)&v5)) != 0
- || (v4 = sub_41FFD0((int)&v7, (int)&v15, (int)&v7)) != 0 )
- goto LABEL_56;
- }
- else
- {
- v4 = sub_41FFD0((int)&v13, (int)&v11, (int)&v13);
- if ( v4
- || (v4 = sub_41FFD0((int)&v9, (int)&v5, (int)&v9)) != 0
- || (v4 = sub_41FFD0((int)&v15, (int)&v7, (int)&v15)) != 0 )
- goto LABEL_56;
- }
- }
- while ( v13 );
- if ( sub_41FA40((int)&v11, 1u) )
- {
- v4 = -3;
- }
- else
- {
- if ( sub_41FA40((int)&v5, 0) == -1 )
- {
- while ( 1 )
- {
- v4 = sub_41FE40((int)&v5, a2, (int)&v5);
- if ( v4 )
- break;
- if ( sub_41FA40((int)&v5, 0) != -1 )
- goto LABEL_52;
- }
- }
- else
- {
- LABEL_52:
- if ( sub_421430((int)&v5, a2) == -1 )
- {
- LABEL_55:
- sub_4234B0((int)&v5, a3);
- v4 = 0;
- }
- else
- {
- while ( 1 )
- {
- v4 = sub_41FFD0((int)&v5, a2, (int)&v5);
- if ( v4 )
- break;
- if ( sub_421430((int)&v5, a2) == -1 )
- goto LABEL_55;
- }
- }
- }
- }
- }
- }
- }
- else
- {
- v4 = -3;
- }
- }
- }
- LABEL_56:
- sub_423670((int)&v19);
- result = v4;
- }
- }
- else
- {
- result = -3;
- }
- return result;
- }
- //----- (00423C50) --------------------------------------------------------
- signed int __cdecl sub_423C50(int a1, int a2, int a3)
- {
- signed int result; // eax@3
- signed int v4; // esi@5
- int v5; // edi@35
- int v6; // [sp+4h] [bp-60h]@9
- int v7; // [sp+Ch] [bp-58h]@35
- int v8; // [sp+10h] [bp-54h]@22
- int v9; // [sp+14h] [bp-50h]@8
- int v10; // [sp+20h] [bp-44h]@19
- int v11; // [sp+24h] [bp-40h]@7
- int v12; // [sp+30h] [bp-34h]@11
- int v13; // [sp+34h] [bp-30h]@13
- int v14; // [sp+40h] [bp-24h]@14
- char v15; // [sp+44h] [bp-20h]@4
- char v16; // [sp+54h] [bp-10h]@6
- if ( *(_DWORD *)a2 <= 0 || **(_BYTE **)(a2 + 12) & 1 )
- {
- result = sub_4236A0((int)&v15);
- if ( !result )
- {
- v4 = sub_41F8F0(a2, (int)&v15);
- if ( !v4 )
- {
- v4 = sub_423700(a1, a2, (int)&v16);
- if ( !v4 )
- {
- v4 = sub_41F8F0((int)&v15, (int)&v11);
- if ( !v4 )
- {
- v4 = sub_41F8F0((int)&v16, (int)&v9);
- if ( !v4 )
- {
- sub_424010((unsigned int)&v6, 1);
- do
- {
- while ( v11 > 0 && !(*(_BYTE *)v12 & 1) )
- {
- v4 = sub_420890((int)&v11, (int)&v11);
- if ( !v4 )
- {
- if ( v13 <= 0 || (*(_BYTE *)v14 & 1) != 1 || (v4 = sub_41FFD0((int)&v13, (int)&v15, (int)&v13)) == 0 )
- {
- v4 = sub_420890((int)&v13, (int)&v13);
- if ( !v4 )
- continue;
- }
- }
- goto LABEL_39;
- }
- while ( v9 > 0 && !(*(_BYTE *)v10 & 1) )
- {
- v4 = sub_420890((int)&v9, (int)&v9);
- if ( !v4 )
- {
- if ( v6 <= 0 || (*(_BYTE *)v8 & 1) != 1 || (v4 = sub_41FFD0((int)&v6, (int)&v15, (int)&v6)) == 0 )
- {
- v4 = sub_420890((int)&v6, (int)&v6);
- if ( !v4 )
- continue;
- }
- }
- goto LABEL_39;
- }
- if ( sub_41FA00((int)&v11, (int)&v9) == -1 )
- {
- v4 = sub_41FFD0((int)&v9, (int)&v11, (int)&v9);
- if ( v4 || (v4 = sub_41FFD0((int)&v6, (int)&v13, (int)&v6)) != 0 )
- goto LABEL_39;
- }
- else
- {
- v4 = sub_41FFD0((int)&v11, (int)&v9, (int)&v11);
- if ( v4 || (v4 = sub_41FFD0((int)&v13, (int)&v6, (int)&v13)) != 0 )
- goto LABEL_39;
- }
- }
- while ( v11 );
- if ( sub_41FA40((int)&v9, 1u) )
- {
- v4 = -3;
- }
- else
- {
- v5 = *(_DWORD *)(a1 + 8);
- if ( v7 == 1 )
- {
- while ( 1 )
- {
- v4 = sub_41FE40((int)&v6, a2, (int)&v6);
- if ( v4 )
- break;
- if ( v7 != 1 )
- goto LABEL_38;
- }
- }
- else
- {
- LABEL_38:
- sub_4234B0((int)&v6, a3);
- *(_DWORD *)(a3 + 8) = v5;
- v4 = 0;
- }
- }
- }
- }
- }
- }
- LABEL_39:
- sub_423670((int)&v15);
- result = v4;
- }
- }
- else
- {
- result = -3;
- }
- return result;
- }
- //----- (00423F60) --------------------------------------------------------
- signed int __cdecl sub_423F60(int a1, int a2)
- {
- int v2; // ebp@1
- signed int result; // eax@2
- int v4; // esi@3
- unsigned int v5; // ebx@3
- int v6; // ecx@3
- unsigned int *v7; // edi@3
- unsigned int v8; // edx@4
- int v9; // eax@4
- unsigned int v10; // edx@4
- int v11; // edx@6
- int v12; // [sp+Ch] [bp+4h]@3
- v2 = a1;
- if ( *(_DWORD *)(a2 + 4) >= *(_DWORD *)a1 + 1 || (result = sub_421250(a2, *(_DWORD *)a1 + 1)) == 0 )
- {
- v12 = *(_DWORD *)a2;
- *(_DWORD *)a2 = *(_DWORD *)v2;
- v4 = *(_DWORD *)(a2 + 12);
- v5 = 0;
- v6 = 0;
- v7 = *(unsigned int **)(v2 + 12);
- if ( *(_DWORD *)v2 <= 0 )
- goto LABEL_13;
- do
- {
- v8 = *v7;
- v9 = v5 & 0xFFFFFFF | 2 * (*v7 & 0x7FFFFFF);
- ++v7;
- *(_DWORD *)v4 = v9;
- v10 = v8 >> 27;
- v4 += 4;
- ++v6;
- v5 = v10;
- }
- while ( v6 < *(_DWORD *)v2 );
- if ( v10 )
- {
- v11 = a2;
- *(_DWORD *)v4 = 1;
- ++*(_DWORD *)v11;
- }
- else
- {
- LABEL_13:
- v11 = a2;
- }
- if ( *(_DWORD *)v11 < v12 )
- memset((void *)(*(_DWORD *)(v11 + 12) + 4 * *(_DWORD *)v11), 0, 4 * (v12 - *(_DWORD *)v11));
- *(_DWORD *)(v11 + 8) = *(_DWORD *)(v2 + 8);
- result = 0;
- }
- return result;
- }
- //----- (00424010) --------------------------------------------------------
- int __cdecl sub_424010(unsigned int a1, int a2)
- {
- int result; // eax@1
- sub_4213F0(a1);
- **(_DWORD **)(a1 + 12) = a2 & 0xFFFFFFF;
- result = **(_DWORD **)(a1 + 12) != 0;
- *(_DWORD *)a1 = result;
- return result;
- }
- //----- (00424040) --------------------------------------------------------
- signed int __cdecl sub_424040(int a1, int a2, int a3)
- {
- int v3; // ebx@1
- int v4; // ebp@1
- signed int result; // eax@2
- int v6; // ecx@3
- int v7; // eax@3
- int v8; // edi@3
- char *v9; // esi@3
- int v10; // edx@5
- int v11; // eax@6
- int v12; // edx@6
- int v13; // ecx@8
- char *v14; // ebp@9
- int v15; // ebx@11
- int v16; // edi@11
- char *v17; // esi@11
- unsigned __int64 v18; // qax@13
- __int64 v19; // qax@14
- char *v20; // edi@16
- int v21; // ecx@16
- char *v22; // esi@16
- int v23; // ebp@17
- __int64 v24; // qax@18
- void *v25; // edi@20
- char *v26; // ecx@20
- int v27; // edx@20
- int v28; // eax@21
- int v29; // [sp+8h] [bp-101Ch]@6
- int v30; // [sp+Ch] [bp-1018h]@12
- int v31; // [sp+10h] [bp-1014h]@9
- int v32; // [sp+14h] [bp-1010h]@9
- int v33; // [sp+18h] [bp-100Ch]@6
- int v34; // [sp+1Ch] [bp-1008h]@1
- int v35; // [sp+20h] [bp-1004h]@9
- char v36[4096]; // [sp+24h] [bp-1000h]@3
- v3 = a1;
- v4 = a2;
- v34 = *(_DWORD *)a1;
- if ( *(_DWORD *)(a1 + 4) >= *(_DWORD *)a2 + 1 || (result = sub_421250(a1, *(_DWORD *)a2 + 1)) == 0 )
- {
- v6 = *(_DWORD *)a1;
- v7 = *(_DWORD *)(a1 + 12);
- v8 = 0;
- v9 = v36;
- if ( *(_DWORD *)a1 > 0 )
- {
- v8 = *(_DWORD *)a1;
- do
- {
- v10 = *(_DWORD *)v7;
- v7 += 4;
- *(_DWORD *)v9 = v10;
- *((_DWORD *)v9 + 1) = 0;
- v9 += 8;
- --v6;
- }
- while ( v6 );
- }
- v11 = *(_DWORD *)a2;
- v29 = *(_DWORD *)a2;
- v12 = 2 * *(_DWORD *)a2 + 1;
- v33 = 2 * *(_DWORD *)a2 + 1;
- if ( v8 < v12 )
- {
- *(_DWORD *)v9 = 0;
- *((_DWORD *)v9 + 1) = 0;
- memcpy(v9 + 8, v9, 4 * ((unsigned int)(8 * (v12 - v8) - 5) >> 2));
- }
- v13 = 0;
- if ( v11 > 0 )
- {
- v14 = v36;
- v32 = *(_DWORD *)(a2 + 12);
- v31 = v11;
- v35 = v11;
- while ( 1 )
- {
- v15 = v32;
- v16 = a3 * *(_DWORD *)v14 & 0xFFFFFFF;
- v17 = v14;
- if ( v11 > 0 )
- {
- v30 = v11;
- do
- {
- v18 = *(_DWORD *)v15 * (unsigned __int64)(unsigned int)v16;
- *(_DWORD *)v17 += v18;
- v15 += 4;
- *((_DWORD *)v17 + 1) = (v18 + *(_QWORD *)v17) >> 32;
- v17 += 8;
- --v30;
- }
- while ( v30 );
- }
- LODWORD(v19) = unknown_libname_1(28);
- *((_QWORD *)v14 + 1) += v19;
- v14 += 8;
- --v31;
- if ( !v31 )
- break;
- v11 = v29;
- }
- v3 = a1;
- v13 = v35;
- v11 = v29;
- v12 = v33;
- v4 = a2;
- }
- v20 = &v36[8 * v13];
- v21 = v13 + 1;
- v22 = &v36[8 * v21];
- if ( v21 <= v12 )
- {
- v23 = v12 - v21 + 1;
- do
- {
- LODWORD(v24) = unknown_libname_1(28);
- *(_DWORD *)v22 += v24;
- v20 += 8;
- *((_DWORD *)v22 + 1) = (unsigned __int64)(v24 + *(_QWORD *)v22) >> 32;
- v22 += 8;
- --v23;
- }
- while ( v23 );
- v11 = v29;
- v4 = a2;
- }
- v25 = *(void **)(v3 + 12);
- v26 = &v36[8 * v11];
- v27 = 0;
- if ( v11 + 1 > 0 )
- {
- do
- {
- v25 = (char *)v25 + 4;
- v28 = *(_DWORD *)v26 & 0xFFFFFFF;
- v26 += 8;
- *((_DWORD *)v25 - 1) = v28;
- ++v27;
- }
- while ( v27 < *(_DWORD *)v4 + 1 );
- }
- if ( v27 < v34 )
- memset(v25, 0, 4 * (v34 - v27));
- *(_DWORD *)v3 = *(_DWORD *)v4 + 1;
- sub_4212C0(v3);
- if ( sub_421430(v3, v4) == -1 )
- result = 0;
- else
- result = sub_421850((signed int *)v3, (signed int *)v4, v3);
- }
- return result;
- }
- // 413010: using guessed type int __thiscall unknown_libname_1(_DWORD);
- // 424040: using guessed type char var_1000[4096];
- //----- (00424250) --------------------------------------------------------
- signed int __cdecl sub_424250(int a1, int a2, int a3, int a4, int a5)
- {
- int v5; // eax@1
- signed int result; // eax@12
- signed int v7; // ebx@13
- int v8; // esi@13
- int v9; // edi@14
- signed int v10; // ebx@15
- int v11; // ebp@19
- signed int v12; // esi@19
- int v13; // esi@24
- int v14; // edi@24
- int v15; // ebx@43
- char *v16; // edi@44
- signed int v17; // edi@48
- int v18; // edx@48
- int v19; // edx@48
- int v20; // ebx@48
- unsigned int v21; // eax@52
- int v22; // ebx@55
- int j; // edi@55
- void *v24; // edi@71
- bool v25; // zf@72
- int v26; // edi@82
- int v27; // ebx@82
- int v28; // [sp+0h] [bp-1034h]@19
- void *v29; // [sp+4h] [bp-1030h]@22
- int v30; // [sp+8h] [bp-102Ch]@39
- int v31; // [sp+Ch] [bp-1028h]@2
- int v32; // [sp+10h] [bp-1024h]@13
- int v33; // [sp+14h] [bp-1020h]@48
- int i; // [sp+18h] [bp-101Ch]@39
- char v35; // [sp+1Ch] [bp-1018h]@32
- int v36; // [sp+2Ch] [bp-1008h]@13
- unsigned int v37; // [sp+30h] [bp-1004h]@48
- char v38[16]; // [sp+34h] [bp-1000h]@14
- char v39; // [sp+44h] [bp-FF0h]@12
- v5 = sub_41FA70(a2);
- if ( v5 > 7 )
- {
- if ( v5 > 36 )
- {
- if ( v5 > 140 )
- {
- if ( v5 > 450 )
- {
- if ( v5 > 1303 )
- v31 = (v5 > 3529) + 7;
- else
- v31 = 6;
- }
- else
- {
- v31 = 5;
- }
- }
- else
- {
- v31 = 4;
- }
- }
- else
- {
- v31 = 3;
- }
- }
- else
- {
- v31 = 2;
- }
- result = sub_41F810((int)&v39);
- if ( !result )
- {
- v7 = 1 << (v31 - 1);
- v8 = v7;
- v36 = 1 << (v31 - 1);
- v32 = 1 << v31;
- if ( v7 >= 1 << v31 )
- goto LABEL_18;
- v9 = (int)&v38[16 * v7];
- do
- {
- v10 = sub_41F810(v9);
- if ( v10 )
- {
- if ( v36 < v8 )
- {
- v13 = v8 - v36;
- v14 = (int)&v38[16 * v36];
- do
- {
- sub_41F860(v14);
- v14 += 16;
- --v13;
- }
- while ( v13 );
- }
- sub_41F860((int)&v39);
- return v10;
- }
- ++v8;
- v9 += 16;
- }
- while ( v8 < v32 );
- v7 = v36;
- LABEL_18:
- if ( a5 )
- {
- if ( a5 == 1 )
- {
- v11 = a3;
- sub_425470(a3, (int)&v28);
- v29 = sub_425380;
- }
- else
- {
- v11 = a3;
- v12 = sub_4252F0(a3, (int)&v28);
- if ( v12 )
- goto LABEL_81;
- v29 = sub_425230;
- }
- }
- else
- {
- v11 = a3;
- v12 = sub_420D30(a3, (int)&v28);
- if ( v12 )
- goto LABEL_81;
- if ( (unsigned int)(2 * *(_DWORD *)a3 + 1) >= 0x200 || *(_DWORD *)a3 >= 0x100u )
- v29 = sub_420E30;
- else
- v29 = sub_424040;
- }
- v12 = sub_41F810((int)&v35);
- if ( !v12 )
- {
- if ( a5 )
- {
- sub_424010((unsigned int)&v35, 1);
- v12 = sub_423700(a1, v11, (int)&v39);
- if ( v12 )
- goto LABEL_80;
- }
- else
- {
- v12 = sub_420D90((unsigned int)&v35, (signed int *)v11);
- if ( v12 || (v12 = sub_420C00(a1, (int)&v35, v11, (int)&v39)) != 0 )
- goto LABEL_80;
- }
- v12 = sub_41F8F0((int)&v39, (int)&v38[16 * v7]);
- if ( v12 )
- goto LABEL_80;
- v30 = 0;
- for ( i = v31 - 1; v30 < i; ++v30 )
- {
- v12 = sub_4202E0(&v38[16 * v7], &v38[16 * v7]);
- if ( !v12 )
- {
- v12 = ((int (__cdecl *)(char *, int, int))v29)(&v38[16 * v7], v11, v28);
- if ( !v12 )
- continue;
- }
- goto LABEL_80;
- }
- v15 = v7 + 1;
- if ( v15 < v32 )
- {
- v16 = &v38[16 * v15];
- do
- {
- v12 = sub_420150(v16 - 16, &v39, v16);
- if ( v12 || (v12 = ((int (__cdecl *)(char *, int, int))v29)(v16, v11, v28)) != 0 )
- goto LABEL_79;
- ++v15;
- v16 += 16;
- }
- while ( v15 < v32 );
- }
- v17 = 0;
- v30 = 1;
- v37 = 0;
- v18 = *(_DWORD *)a2;
- v33 = 0;
- v19 = v18 - 1;
- v20 = 0;
- i = v19;
- while ( 1 )
- {
- --v30;
- if ( !v30 )
- {
- if ( v19 == -1 )
- {
- if ( v17 != 2 || v20 <= 0 )
- {
- LABEL_76:
- if ( a5 || (v12 = ((int (__cdecl *)(char *, _DWORD, _DWORD))v29)(&v35, v11, v28)) == 0 )
- {
- sub_4234B0((int)&v35, a4);
- v12 = 0;
- }
- }
- else
- {
- v30 = 0;
- while ( 1 )
- {
- v12 = sub_4202E0(&v35, &v35);
- if ( v12 )
- break;
- v24 = v29;
- v12 = ((int (__cdecl *)(char *, int, int))v29)(&v35, v11, v28);
- if ( v12 )
- break;
- v25 = (v32 & 2 * v33) == 0;
- v33 *= 2;
- if ( !v25 )
- {
- v12 = sub_420150(&v35, &v39, &v35);
- if ( v12 )
- break;
- v12 = ((int (__cdecl *)(char *, int, int))v24)(&v35, v11, v28);
- if ( v12 )
- break;
- }
- ++v30;
- if ( v30 >= v20 )
- goto LABEL_76;
- }
- }
- LABEL_79:
- v7 = v36;
- LABEL_80:
- sub_41F860((int)&v35);
- break;
- }
- --v19;
- i = v19;
- v30 = 28;
- v37 = *(_DWORD *)(*(_DWORD *)(a2 + 12) + 4 * v19 + 4);
- }
- v21 = (v37 >> 27) & 1;
- v37 *= 2;
- if ( v17 )
- {
- if ( v17 == 1 && !v21 )
- {
- v12 = sub_4202E0(&v35, &v35);
- if ( v12 || (v12 = ((int (__cdecl *)(_DWORD, _DWORD, _DWORD))v29)(&v35, v11, v28)) != 0 )
- goto LABEL_79;
- v19 = i;
- continue;
- }
- }
- else
- {
- if ( !v21 )
- continue;
- }
- ++v20;
- v17 = 2;
- v33 |= v21 << (v31 - v20);
- if ( v20 == v31 )
- {
- v22 = v31;
- for ( j = 0; j < v22; ++j )
- {
- v12 = sub_4202E0(&v35, &v35);
- if ( v12 )
- goto LABEL_79;
- v12 = ((int (__cdecl *)(_DWORD, _DWORD, _DWORD))v29)(&v35, v11, v28);
- if ( v12 )
- goto LABEL_79;
- }
- v12 = sub_420150(&v35, &v38[16 * v33], &v35);
- v20 = 0;
- if ( v12 || (v12 = ((int (__cdecl *)(_DWORD, _DWORD, _DWORD))v29)(&v35, v11, v28)) != 0 )
- goto LABEL_79;
- v19 = i;
- v33 = 0;
- v17 = 1;
- }
- }
- }
- LABEL_81:
- sub_41F860((int)&v39);
- if ( v7 < v32 )
- {
- v26 = (int)&v38[16 * v7];
- v27 = v32 - v7;
- do
- {
- sub_41F860(v26);
- v26 += 16;
- --v27;
- }
- while ( v27 );
- }
- result = v12;
- }
- return result;
- }
- // 420150: using guessed type _DWORD __cdecl sub_420150(_DWORD, _DWORD, _DWORD);
- // 4202E0: using guessed type _DWORD __cdecl sub_4202E0(_DWORD, _DWORD);
- // 424250: using guessed type char var_1000[16];
- //----- (00424810) --------------------------------------------------------
- signed int __cdecl sub_424810(int a1)
- {
- signed int v1; // eax@1
- int v3; // eax@5
- signed int v4; // edi@5
- signed int v5; // ecx@5
- int v6; // edx@6
- v1 = *(_DWORD *)a1;
- if ( !*(_DWORD *)a1 )
- return 0;
- if ( v1 != 1 )
- {
- if ( v1 > 1 )
- {
- v3 = sub_41FA70(a1);
- v4 = 28;
- v5 = 1;
- if ( v3 > 28 )
- {
- v6 = *(_DWORD *)(a1 + 12) + 4;
- while ( v5 & *(_DWORD *)v6 )
- {
- v5 *= 2;
- if ( (unsigned int)v5 > 0xFFFFFFF )
- {
- v6 += 4;
- v5 = 1;
- }
- ++v4;
- if ( v4 >= v3 )
- return 1;
- }
- return 0;
- }
- }
- }
- return 1;
- }
- //----- (00424870) --------------------------------------------------------
- signed int __cdecl sub_424870(int a1)
- {
- signed int v1; // edx@1
- signed int v3; // ecx@3
- int v4; // eax@4
- v1 = *(_DWORD *)a1;
- if ( *(_DWORD *)a1 < 2 )
- return 0;
- v3 = 1;
- if ( v1 > 1 )
- {
- v4 = *(_DWORD *)(a1 + 12) + 4;
- while ( *(_DWORD *)v4 == 268435455 )
- {
- ++v3;
- v4 += 4;
- if ( v3 >= v1 )
- return 1;
- }
- return 0;
- }
- return 1;
- }
- //----- (004248B0) --------------------------------------------------------
- signed int __cdecl sub_4248B0(int a1, int a2, int a3, int a4, int a5)
- {
- int v5; // eax@1
- signed int result; // eax@12
- int v7; // ebp@13
- signed int v8; // ebx@13
- signed int v9; // esi@13
- int v10; // edi@14
- signed int v11; // ebx@15
- signed int v12; // esi@18
- int v13; // esi@23
- int v14; // edi@23
- char *v15; // edi@29
- int i; // ebx@30
- int v17; // ebx@34
- char *v18; // edi@35
- int v19; // ebp@39
- signed int v20; // edi@40
- int v21; // esi@40
- int v22; // esi@40
- int v23; // ebx@40
- unsigned int v24; // eax@44
- int j; // edi@47
- int v26; // edi@61
- bool v27; // zf@64
- int v28; // edi@73
- int v29; // ebx@73
- int v30; // [sp+0h] [bp-1040h]@2
- void *v31; // [sp+4h] [bp-103Ch]@21
- signed int v32; // [sp+8h] [bp-1038h]@13
- signed int v33; // [sp+Ch] [bp-1034h]@13
- int v34; // [sp+10h] [bp-1030h]@40
- char v35; // [sp+14h] [bp-102Ch]@39
- int v36; // [sp+24h] [bp-101Ch]@40
- unsigned int v37; // [sp+28h] [bp-1018h]@40
- int v38; // [sp+2Ch] [bp-1014h]@40
- char v39; // [sp+30h] [bp-1010h]@18
- char v40[16]; // [sp+40h] [bp-1000h]@14
- char v41; // [sp+50h] [bp-FF0h]@12
- v5 = sub_41FA70(a2);
- if ( v5 > 7 )
- {
- if ( v5 > 36 )
- {
- if ( v5 > 140 )
- {
- if ( v5 > 450 )
- {
- if ( v5 > 1303 )
- v30 = (v5 > 3529) + 7;
- else
- v30 = 6;
- }
- else
- {
- v30 = 5;
- }
- }
- else
- {
- v30 = 4;
- }
- }
- else
- {
- v30 = 3;
- }
- }
- else
- {
- v30 = 2;
- }
- result = sub_41F810((int)&v41);
- if ( !result )
- {
- v7 = v30 - 1;
- v8 = 1 << (v30 - 1);
- v9 = v8;
- v33 = 1 << (v30 - 1);
- v32 = 1 << v30;
- if ( v8 >= 1 << v30 )
- goto LABEL_18;
- v10 = (int)&v40[16 * v8];
- do
- {
- v11 = sub_41F810(v10);
- if ( v11 )
- {
- if ( v33 < v9 )
- {
- v13 = v9 - v33;
- v14 = (int)&v40[16 * v33];
- do
- {
- sub_41F860(v14);
- v14 += 16;
- --v13;
- }
- while ( v13 );
- }
- sub_41F860((int)&v41);
- return v11;
- }
- ++v9;
- v10 += 16;
- }
- while ( v9 < v32 );
- v8 = 1 << (v30 - 1);
- LABEL_18:
- v12 = sub_41F810((int)&v39);
- if ( !v12 )
- {
- if ( a5 )
- {
- v12 = sub_425550(a3, (int)&v39);
- if ( v12 )
- goto LABEL_71;
- v31 = sub_425490;
- }
- else
- {
- v12 = sub_425720((unsigned int)&v39, a3);
- if ( v12 )
- goto LABEL_71;
- v31 = sub_4255B0;
- }
- v12 = sub_423700(a1, a3, (int)&v41);
- if ( !v12 )
- {
- v15 = &v40[16 * v8];
- v12 = sub_41F8F0((int)&v41, (int)&v40[16 * v8]);
- if ( !v12 )
- {
- for ( i = 0; i < v7; ++i )
- {
- v12 = sub_4202E0(v15, v15);
- if ( !v12 )
- {
- v12 = ((int (__cdecl *)(char *, int, char *))v31)(v15, a3, &v39);
- if ( !v12 )
- continue;
- }
- goto LABEL_70;
- }
- v17 = v33 + 1;
- if ( v33 + 1 < v32 )
- {
- v18 = &v40[16 * v17];
- do
- {
- v12 = sub_420150(v18 - 16, &v41, v18);
- if ( v12 || (v12 = ((int (__cdecl *)(char *, int, char *))v31)(v18, a3, &v39)) != 0 )
- goto LABEL_70;
- ++v17;
- v18 += 16;
- }
- while ( v17 < v32 );
- }
- v12 = sub_41F810((int)&v35);
- v19 = 0;
- if ( v12 )
- goto LABEL_70;
- sub_424010((unsigned int)&v35, 1);
- v20 = 0;
- v36 = 1;
- v21 = *(_DWORD *)a2;
- v37 = 0;
- v22 = v21 - 1;
- v23 = 0;
- v38 = v22;
- v34 = 0;
- while ( 1 )
- {
- --v36;
- if ( !v36 )
- {
- if ( v22 == -1 )
- {
- if ( v20 != 2 || v23 <= 0 || (v26 = 0, v23 <= 0) )
- {
- LABEL_68:
- sub_4234B0((int)&v35, a4);
- v12 = 0;
- }
- else
- {
- while ( 1 )
- {
- v12 = sub_4202E0(&v35, &v35);
- if ( v12 )
- break;
- v12 = ((int (__cdecl *)(char *, int, char *))v31)(&v35, a3, &v39);
- if ( v12 )
- break;
- v27 = (v32 & 2 * v34) == 0;
- v34 *= 2;
- if ( !v27 )
- {
- v12 = sub_420150(&v35, &v41, &v35);
- if ( v12 )
- break;
- v12 = ((int (__cdecl *)(char *, _DWORD, _DWORD))v31)(&v35, a3, &v39);
- if ( v12 )
- break;
- }
- ++v26;
- if ( v26 >= v23 )
- goto LABEL_68;
- }
- }
- LABEL_69:
- sub_41F860((int)&v35);
- LABEL_70:
- v8 = 1 << (v30 - 1);
- break;
- }
- --v22;
- v38 = v22;
- v36 = 28;
- v37 = *(_DWORD *)(*(_DWORD *)(a2 + 12) + 4 * v22 + 4);
- }
- v24 = (v37 >> 27) & 1;
- v37 *= 2;
- if ( v20 )
- {
- if ( v20 == 1 && !v24 )
- {
- v12 = sub_4202E0(&v35, &v35);
- if ( v12 || (v12 = ((int (__cdecl *)(_DWORD, _DWORD, _DWORD))v31)(&v35, a3, &v39)) != 0 )
- goto LABEL_69;
- v22 = v38;
- continue;
- }
- }
- else
- {
- if ( !v24 )
- continue;
- }
- ++v23;
- v20 = 2;
- v19 |= v24 << (v30 - v23);
- v34 = v19;
- if ( v23 == v30 )
- {
- for ( j = 0; j < v30; ++j )
- {
- v12 = sub_4202E0(&v35, &v35);
- if ( v12 )
- goto LABEL_69;
- v12 = ((int (__cdecl *)(_DWORD, _DWORD, _DWORD))v31)(&v35, a3, &v39);
- if ( v12 )
- goto LABEL_69;
- }
- v12 = sub_420150(&v35, &v40[16 * v19], &v35);
- v23 = 0;
- if ( v12 || (v12 = ((int (__cdecl *)(_DWORD, _DWORD, _DWORD))v31)(&v35, a3, &v39)) != 0 )
- goto LABEL_69;
- v22 = v38;
- v34 = 0;
- v20 = 1;
- v19 = 0;
- }
- }
- }
- }
- LABEL_71:
- sub_41F860((int)&v39);
- }
- sub_41F860((int)&v41);
- if ( v8 < v32 )
- {
- v28 = (int)&v40[16 * v8];
- v29 = v32 - v8;
- do
- {
- sub_41F860(v28);
- v28 += 16;
- --v29;
- }
- while ( v29 );
- }
- result = v12;
- }
- return result;
- }
- // 420150: using guessed type _DWORD __cdecl sub_420150(_DWORD, _DWORD, _DWORD);
- // 4202E0: using guessed type _DWORD __cdecl sub_4202E0(_DWORD, _DWORD);
- // 4248B0: using guessed type char var_1000[16];
- //----- (00424E00) --------------------------------------------------------
- signed int __cdecl sub_424E00(int a1)
- {
- signed int result; // eax@1
- int v2; // esi@4
- int v3; // ecx@5
- signed int v4; // edx@5
- result = *(_DWORD *)a1;
- if ( !*(_DWORD *)a1 )
- goto LABEL_13;
- if ( result == 1 )
- return result;
- if ( result > 1 )
- {
- v2 = 0;
- if ( result > 0 )
- {
- v3 = *(_DWORD *)(a1 + 12);
- v4 = *(_DWORD *)a1;
- do
- {
- if ( *(_DWORD *)v3 == 268435455 )
- ++v2;
- v3 += 4;
- --v4;
- }
- while ( v4 );
- }
- result = v2 >= result / 2;
- }
- else
- {
- LABEL_13:
- result = 0;
- }
- return result;
- }
- //----- (00424E40) --------------------------------------------------------
- signed int __cdecl sub_424E40(int a1, int a2, int a3)
- {
- signed int result; // eax@2
- signed int v4; // esi@4
- int v5; // ebx@6
- signed int v6; // edi@11
- int v7; // ebx@11
- char v8; // [sp+8h] [bp-30h]@7
- char v9; // [sp+18h] [bp-20h]@3
- char v10; // [sp+28h] [bp-10h]@5
- *(_DWORD *)a3 = 0;
- if ( sub_41FA40(a2, 1u) == 1 )
- {
- result = sub_4216B0((int)&v9, a1);
- if ( !result )
- {
- v4 = sub_420040((int)&v9, 1, (int)&v9);
- if ( !v4 )
- {
- v4 = sub_4216B0((int)&v10, (int)&v9);
- if ( !v4 )
- {
- v5 = sub_41FAA0((int)&v10);
- v4 = sub_4216E0((int)&v10, v5, (unsigned int)&v10, 0);
- if ( !v4 )
- {
- v4 = sub_41F810((int)&v8);
- if ( !v4 )
- {
- v4 = sub_420FA0(a2, &v10, a1, &v8);
- if ( !v4 )
- {
- if ( !sub_41FA40((int)&v8, 1u) || !sub_41FA00((int)&v8, (int)&v9) )
- goto LABEL_23;
- v6 = 1;
- v7 = v5 - 1;
- if ( v7 >= 1 )
- {
- while ( sub_41FA00((int)&v8, (int)&v9) )
- {
- v4 = sub_420C70((int)&v8, a1, (int)&v8);
- if ( v4 || !sub_41FA40((int)&v8, 1u) )
- goto LABEL_18;
- ++v6;
- if ( v6 > v7 )
- break;
- }
- }
- if ( !sub_41FA00((int)&v8, (int)&v9) )
- LABEL_23:
- *(_DWORD *)a3 = 1;
- }
- LABEL_18:
- sub_41F860((int)&v8);
- }
- }
- sub_41F860((int)&v10);
- }
- }
- sub_41F860((int)&v9);
- result = v4;
- }
- }
- else
- {
- result = -3;
- }
- return result;
- }
- // 420FA0: using guessed type _DWORD __cdecl sub_420FA0(_DWORD, _DWORD, _DWORD, _DWORD);
- //----- (00424FF0) --------------------------------------------------------
- signed int __cdecl sub_424FF0(int a1, int a2)
- {
- int v2; // ebx@1
- int *v3; // esi@1
- signed int result; // eax@2
- v2 = a2;
- *(_DWORD *)a2 = 0;
- v3 = (int *)&unk_4381E4;
- while ( 1 )
- {
- result = sub_420930(a1, *v3, (int)&a2);
- if ( result )
- break;
- if ( !a2 )
- {
- *(_DWORD *)v2 = 1;
- return 0;
- }
- ++v3;
- if ( (signed int)v3 >= (signed int)&unk_4385E4 )
- return 0;
- }
- return result;
- }
- //----- (00425040) --------------------------------------------------------
- signed int __cdecl sub_425040(int a1, int a2, int a3)
- {
- int v3; // ebx@1
- signed int result; // eax@1
- int v5; // edx@2
- int v6; // ebp@2
- int v7; // esi@2
- int v8; // edi@2
- int v9; // ebp@2
- unsigned __int64 v10; // qax@5
- __int64 v11; // qax@7
- unsigned int v12; // ebp@7
- int v13; // ebx@7
- unsigned __int64 v14; // kr00_8@7
- unsigned __int8 v15; // cf@8
- int v16; // [sp+4h] [bp-1Ch]@2
- int v17; // [sp+10h] [bp-10h]@1
- int v18; // [sp+18h] [bp-8h]@2
- int v19; // [sp+1Ch] [bp-4h]@11
- v3 = a1;
- result = sub_4235D0((int)&v17, *(_DWORD *)a1);
- if ( !result )
- {
- v5 = *(_DWORD *)(a1 + 8);
- v6 = *(_DWORD *)a1;
- v17 = v6;
- v7 = 0;
- v8 = 0;
- v9 = v6 - 1;
- v18 = v5;
- v16 = v9;
- if ( v9 >= 0 )
- {
- while ( 1 )
- {
- v10 = __PAIR__(v8, v7) << 28;
- v7 = (v7 << 28) | *(_DWORD *)(*(_DWORD *)(v3 + 12) + 4 * v9--);
- v8 = HIDWORD(v10);
- if ( HIDWORD(v10) || (unsigned int)v7 >= 3 )
- {
- LODWORD(v11) = unknown_libname_1(28);
- v12 = HIDWORD(v11);
- v13 = v11;
- v14 = -3 * v11 + __PAIR__(v8, v7);
- v8 = (-3 * v11 + __PAIR__(v8, v7)) >> 32;
- v7 = v14;
- if ( __PAIR__(v8, (unsigned int)v14) >= 3 )
- {
- do
- {
- do
- {
- v12 = (__PAIR__(v12, v13++) + 1) >> 32;
- v15 = __CFADD__(v7, -3);
- v7 -= 3;
- v8 = v15 + v8 - 1;
- }
- while ( v8 );
- }
- while ( (unsigned int)v7 >= 3 );
- }
- v9 = v16;
- }
- else
- {
- v13 = 0;
- }
- v16 = v9;
- *(_DWORD *)(v19 + 4 * v9 + 4) = v13;
- if ( v9 < 0 )
- break;
- v3 = a1;
- }
- }
- if ( a3 )
- *(_DWORD *)a3 = v7;
- if ( a2 )
- {
- sub_4212C0((int)&v17);
- sub_4234B0((int)&v17, a2);
- }
- sub_41F860((int)&v17);
- result = 0;
- }
- return result;
- }
- // 413010: using guessed type int __thiscall unknown_libname_1(_DWORD);
- //----- (00425160) --------------------------------------------------------
- signed int __cdecl sub_425160(int a1, int a2, unsigned int a3)
- {
- signed int result; // eax@2
- int i; // edx@6
- int v5; // ebx@8
- if ( a2 > 0 )
- {
- if ( a2 < 28 * *(_DWORD *)a1 )
- {
- result = sub_41F8F0(a1, a3);
- if ( !result )
- {
- for ( i = a2 / 28 + (a2 % 28 != 0); i < *(_DWORD *)a3; *(_DWORD *)(*(_DWORD *)(a3 + 12) + 4 * i - 4) = 0 )
- ++i;
- v5 = *(_DWORD *)(a3 + 12) + 4 * a2 / 28;
- *(_DWORD *)v5 &= (1 << a2 % 0x1Cu) - 1;
- sub_4212C0(a3);
- result = 0;
- }
- }
- else
- {
- result = sub_41F8F0(a1, a3);
- }
- }
- else
- {
- sub_4213F0(a3);
- result = 0;
- }
- return result;
- }
- //----- (00425230) --------------------------------------------------------
- signed int __cdecl sub_425230(unsigned int a1, int a2, int a3)
- {
- signed int result; // eax@1
- int v4; // ebp@2
- signed int i; // edi@2
- char v6; // [sp+0h] [bp-10h]@1
- result = sub_41F810((int)&v6);
- if ( !result )
- {
- v4 = sub_41FA70(a2);
- for ( i = sub_4216E0(a1, v4, (unsigned int)&v6, a1); !i; i = sub_4216E0(a1, v4, (unsigned int)&v6, a1) )
- {
- if ( a3 != 1 )
- {
- i = sub_420220((int)&v6, a3, (int)&v6);
- if ( i )
- break;
- }
- i = sub_421920(a1, (int)&v6, a1);
- if ( i )
- break;
- if ( sub_421430(a1, a2) == -1 )
- break;
- sub_421850((signed int *)a1, (signed int *)a2, a1);
- }
- sub_41F860((int)&v6);
- result = i;
- }
- return result;
- }
- //----- (004252F0) --------------------------------------------------------
- signed int __cdecl sub_4252F0(int a1, int a2)
- {
- signed int result; // eax@1
- int v3; // eax@2
- signed int v4; // esi@2
- char v5; // [sp+8h] [bp-10h]@1
- int v6; // [sp+14h] [bp-4h]@5
- result = sub_41F810((int)&v5);
- if ( !result )
- {
- v3 = sub_41FA70(a1);
- v4 = sub_41FB00((unsigned int)&v5, v3);
- if ( v4 || (v4 = sub_421850((signed int *)&v5, (signed int *)a1, (int)&v5)) != 0 )
- {
- sub_41F860((int)&v5);
- result = v4;
- }
- else
- {
- *(_DWORD *)a2 = *(_DWORD *)v6;
- sub_41F860((int)&v5);
- result = 0;
- }
- }
- return result;
- }
- //----- (00425380) --------------------------------------------------------
- signed int __cdecl sub_425380(int a1, signed int *a2, int a3)
- {
- int v3; // ebp@1
- signed int v4; // edi@1
- signed int result; // eax@2
- int v6; // esi@3
- signed int v7; // eax@3
- int v8; // ebx@3
- int v9; // edi@3
- int v10; // ecx@5
- int v11; // esi@7
- int i; // eax@7
- signed int v13; // [sp+8h] [bp-8h]@1
- signed int v14; // [sp+Ch] [bp-4h]@4
- v3 = a1;
- v4 = *a2;
- v13 = *a2;
- if ( *(_DWORD *)(a1 + 4) >= 2 * *a2 || (result = sub_421250(a1, 2 * v4)) == 0 )
- {
- while ( 1 )
- {
- v6 = *(_DWORD *)(v3 + 12);
- v7 = v13;
- v8 = v6 + 4 * v4;
- v9 = 0;
- if ( v13 > 0 )
- {
- v14 = v13;
- do
- {
- v10 = *(_DWORD *)v8;
- v8 += 4;
- *(_DWORD *)v6 = (v9 + *(_DWORD *)v6 + v10 * a3) & 0xFFFFFFF;
- v6 += 4;
- v9 = unknown_libname_1(28);
- --v14;
- }
- while ( v14 );
- v3 = a1;
- v7 = v13;
- }
- *(_DWORD *)v6 = v9;
- v11 = v6 + 4;
- for ( i = v7 + 1; i < *(_DWORD *)v3; ++i )
- {
- *(_DWORD *)v11 = 0;
- v11 += 4;
- }
- sub_4212C0(v3);
- if ( sub_421430(v3, (int)a2) == -1 )
- break;
- sub_421850((signed int *)v3, a2, v3);
- v4 = v13;
- }
- result = 0;
- }
- return result;
- }
- // 413010: using guessed type int __thiscall unknown_libname_1(_DWORD);
- //----- (00425470) --------------------------------------------------------
- int __cdecl sub_425470(int a1, int a2)
- {
- int result; // eax@1
- result = a2;
- *(_DWORD *)a2 = 268435456 - **(_DWORD **)(a1 + 12);
- return result;
- }
- //----- (00425490) --------------------------------------------------------
- signed int __cdecl sub_425490(unsigned int a1, int a2, int a3)
- {
- signed int result; // eax@1
- int v4; // ebp@2
- signed int i; // edi@2
- char v6; // [sp+0h] [bp-10h]@1
- result = sub_41F810((int)&v6);
- if ( !result )
- {
- v4 = sub_41FA70(a2);
- for ( i = sub_4216E0(a1, v4, (unsigned int)&v6, a1); !i; i = sub_4216E0(a1, v4, (unsigned int)&v6, a1) )
- {
- i = sub_420150(&v6, a3, &v6);
- if ( i )
- break;
- i = sub_421920(a1, (int)&v6, a1);
- if ( i )
- break;
- if ( sub_421430(a1, a2) == -1 )
- break;
- sub_421850((signed int *)a1, (signed int *)a2, a1);
- }
- sub_41F860((int)&v6);
- result = i;
- }
- return result;
- }
- // 420150: using guessed type _DWORD __cdecl sub_420150(_DWORD, _DWORD, _DWORD);
- //----- (00425550) --------------------------------------------------------
- signed int __cdecl sub_425550(int a1, int a2)
- {
- signed int result; // eax@1
- int v3; // eax@2
- signed int v4; // esi@2
- char v5; // [sp+0h] [bp-10h]@1
- result = sub_41F810((int)&v5);
- if ( !result )
- {
- v3 = sub_41FA70(a1);
- v4 = sub_41FB00((unsigned int)&v5, v3);
- if ( !v4 )
- v4 = sub_421850((signed int *)&v5, (signed int *)a1, a2);
- sub_41F860((int)&v5);
- result = v4;
- }
- return result;
- }
- //----- (004255B0) --------------------------------------------------------
- signed int __cdecl sub_4255B0(unsigned int a1, signed int *a2, int a3)
- {
- int v3; // ebx@1
- signed int result; // eax@1
- signed int v5; // esi@3
- int v6; // ebx@6
- char v7; // [sp+Ch] [bp-10h]@1
- v3 = *a2;
- result = sub_4216B0((int)&v7, a1);
- if ( !result )
- {
- sub_423500((unsigned int)&v7, v3 - 1);
- if ( (unsigned int)v3 <= 0x8000000 )
- {
- v5 = sub_425760((int)&v7, a3, (int)&v7, v3);
- if ( !v5 )
- goto LABEL_6;
- }
- else
- {
- v5 = sub_420150(&v7, a3, &v7);
- if ( !v5 )
- {
- LABEL_6:
- v6 = v3 + 1;
- sub_423500((unsigned int)&v7, v6);
- v5 = sub_425160(a1, 28 * v6, a1);
- if ( !v5 )
- {
- v5 = sub_421A30((int)&v7, (int)a2, (int)&v7, v6);
- if ( !v5 )
- {
- v5 = sub_41FFD0(a1, (int)&v7, a1);
- if ( !v5 )
- {
- if ( sub_41FA40(a1, 0) != -1
- || (sub_424010((unsigned int)&v7, 1), (v5 = sub_423560((int)&v7, v6)) == 0)
- && (v5 = sub_41FE40(a1, (int)&v7, a1)) == 0 )
- {
- if ( sub_41FA00(a1, (int)a2) != -1 )
- {
- do
- v5 = sub_421850((signed int *)a1, a2, a1);
- while ( !v5 && sub_41FA00(a1, (int)a2) != -1 );
- }
- }
- }
- }
- }
- goto LABEL_15;
- }
- }
- LABEL_15:
- sub_41F860((int)&v7);
- result = v5;
- }
- return result;
- }
- // 420150: using guessed type _DWORD __cdecl sub_420150(_DWORD, _DWORD, _DWORD);
- //----- (00425720) --------------------------------------------------------
- signed int __cdecl sub_425720(unsigned int a1, int a2)
- {
- signed int result; // eax@1
- result = sub_41FB00(a1, 56 * *(_DWORD *)a2);
- if ( !result )
- result = sub_420370(a1, a2, a1, 0);
- return result;
- }
- //----- (00425760) --------------------------------------------------------
- signed int __cdecl sub_425760(int a1, int a2, int a3, int a4)
- {
- int v4; // ebp@1
- int v5; // edi@1
- unsigned int v6; // eax@1
- signed int result; // eax@5
- int v8; // edx@7
- signed int v9; // eax@7
- int v10; // ecx@8
- int v11; // esi@8
- int v12; // ebx@10
- int v13; // esi@10
- int v14; // edi@10
- int v15; // ecx@12
- int v16; // [sp+8h] [bp-2Ch]@11
- signed int v17; // [sp+Ch] [bp-28h]@7
- int v18; // [sp+10h] [bp-24h]@8
- int v19; // [sp+14h] [bp-20h]@8
- int v20; // [sp+18h] [bp-1Ch]@10
- unsigned int v21; // [sp+1Ch] [bp-18h]@7
- unsigned int v22; // [sp+20h] [bp-14h]@7
- int v23; // [sp+24h] [bp-10h]@6
- int v24; // [sp+30h] [bp-4h]@10
- int v25; // [sp+44h] [bp+10h]@8
- v4 = a2;
- v5 = a1;
- v6 = *(_DWORD *)a1;
- if ( (unsigned int)(*(_DWORD *)a2 + *(_DWORD *)a1 + 1) >= 0x200 )
- goto LABEL_18;
- if ( (signed int)v6 >= *(_DWORD *)a2 )
- v6 = *(_DWORD *)a2;
- if ( v6 >= 0x100 )
- {
- LABEL_18:
- result = sub_4235D0((int)&v23, *(_DWORD *)a2 + *(_DWORD *)a1 + 1);
- if ( !result )
- {
- v8 = *(_DWORD *)a2;
- v22 = *(_DWORD *)a1;
- v21 = *(_DWORD *)a2;
- v23 = *(_DWORD *)a2 + *(_DWORD *)a1 + 1;
- v9 = 0;
- v17 = 0;
- if ( (signed int)v22 > 0 )
- {
- v10 = a4;
- v18 = a4;
- v11 = 4 * a4;
- v19 = 4 * a4;
- v25 = 4 * a4;
- while ( 1 )
- {
- v12 = 0;
- v20 = *(_DWORD *)(*(_DWORD *)(v5 + 12) + 4 * v9);
- v13 = v24 + v11;
- v14 = v25 + *(_DWORD *)(v4 + 12);
- if ( v10 < v8 )
- {
- v16 = v8 - v10;
- do
- {
- v15 = *(_DWORD *)v14;
- v14 += 4;
- *(_DWORD *)v13 = (v12 + *(_DWORD *)v13 + v15 * v20) & 0xFFFFFFF;
- v13 += 4;
- v12 = unknown_libname_1(28);
- --v16;
- }
- while ( v16 );
- v9 = v17;
- v8 = v21;
- v10 = v18;
- }
- *(_DWORD *)v13 = v12;
- ++v9;
- --v10;
- v17 = v9;
- v25 -= 4;
- v18 = v10;
- if ( v9 >= (signed int)v22 )
- break;
- v4 = a2;
- v5 = a1;
- v11 = v19;
- }
- }
- sub_4212C0((int)&v23);
- sub_4234B0((int)&v23, a3);
- sub_41F860((int)&v23);
- result = 0;
- }
- }
- else
- {
- result = sub_4258D0(a1, a2, a3, a4);
- }
- return result;
- }
- // 413010: using guessed type int __thiscall unknown_libname_1(_DWORD);
- //----- (004258D0) --------------------------------------------------------
- signed int __cdecl sub_4258D0(int a1, int a2, int a3, int a4)
- {
- int v4; // esi@1
- signed int result; // eax@2
- int v6; // edx@3
- int v7; // ebp@3
- int v8; // eax@3
- int v9; // ebx@3
- int v10; // ecx@4
- int v11; // edx@8
- int v12; // edi@8
- int v13; // eax@8
- int v14; // esi@8
- int v15; // ecx@11
- unsigned int v16; // eax@12
- unsigned int v17; // edx@13
- int v18; // edx@15
- int v19; // ebx@15
- void *v20; // edx@15
- int v21; // edi@15
- int v22; // eax@16
- int v23; // [sp+Ch] [bp-820h]@3
- char *v24; // [sp+10h] [bp-81Ch]@4
- unsigned int v25; // [sp+18h] [bp-814h]@3
- int v26; // [sp+1Ch] [bp-810h]@4
- int v27; // [sp+20h] [bp-80Ch]@4
- int v28; // [sp+24h] [bp-808h]@3
- int v29; // [sp+28h] [bp-804h]@4
- char v30[2048]; // [sp+2Ch] [bp-800h]@4
- v4 = a3;
- if ( *(_DWORD *)(a3 + 4) >= *(_DWORD *)a2 + *(_DWORD *)a1
- || (result = sub_421250(a3, *(_DWORD *)a2 + *(_DWORD *)a1)) == 0 )
- {
- v6 = *(_DWORD *)a1;
- v7 = a4;
- v8 = *(_DWORD *)a2 + *(_DWORD *)a1;
- v9 = 0;
- v28 = *(_DWORD *)a1;
- v23 = *(_DWORD *)a2 + *(_DWORD *)a1;
- v25 = 0;
- if ( a4 < *(_DWORD *)a2 + *(_DWORD *)a1 )
- {
- v10 = *(_DWORD *)a2 - 1;
- v29 = *(_DWORD *)(a1 + 12);
- v26 = *(_DWORD *)a2 - 1;
- v27 = *(_DWORD *)(a2 + 12);
- v24 = &v30[4 * a4];
- while ( 1 )
- {
- if ( v10 >= v7 )
- v10 = v7;
- v11 = v6 - (v7 - v10);
- v12 = v29 + 4 * (v7 - v10);
- v13 = v10 + 1;
- v14 = v27 + 4 * v10;
- if ( v11 < v10 + 1 )
- v13 = v11;
- if ( v13 > 0 )
- {
- v15 = v13;
- do
- {
- v16 = (*(_DWORD *)v12 * (unsigned __int64)*(_DWORD *)v14 + __PAIR__(v25, v9)) >> 32;
- v9 += *(_DWORD *)v12 * *(_DWORD *)v14;
- v14 -= 4;
- v12 += 4;
- --v15;
- v25 = v16;
- }
- while ( v15 );
- }
- *(_DWORD *)v24 = v9 & 0xFFFFFFF;
- v9 = unknown_libname_1(28);
- v8 = v23;
- ++v7;
- v25 = v17;
- v24 += 4;
- if ( v7 >= v23 )
- break;
- v6 = v28;
- v10 = v26;
- }
- v7 = a4;
- v4 = a3;
- }
- v18 = *(_DWORD *)(v4 + 12);
- v19 = *(_DWORD *)v4;
- *(_DWORD *)v4 = v8;
- v20 = (void *)(4 * v7 + v18);
- v21 = v7;
- if ( v7 <= v8 )
- {
- v22 = v8 - v7 + 1;
- memcpy(v20, &v30[4 * v7], 4 * v22);
- v4 = a3;
- v21 = v22 + v7;
- v20 = (char *)v20 + 4 * v22;
- }
- if ( v21 < v19 )
- memset(v20, 0, 4 * (v19 - v21));
- sub_4212C0(v4);
- result = 0;
- }
- return result;
- }
- // 413010: using guessed type int __thiscall unknown_libname_1(_DWORD);
- // 4258D0: using guessed type char var_800[2048];
- #error "There were 1 decompilation failure(s) on 231 function(s)"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement