1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
|
#ifndef __CRYPT_H__
#define __CRYPT_H__
#define KEYSIZE 256
#define NAMSIZE 512
#define DEFMSGS 4096
#define KEY_A_SIG 0x000000
#define KEY_B_SIG 0x010000
// struct to store all supported protocols
struct SupPro {
LPSTR name;
BOOL inspecting;
int split_on, tsplit_on;
int split_off, tsplit_off;
};
typedef SupPro *pSupPro;
// struct to store wainting messages
struct waitingMessage {
LPSTR Message;
WPARAM wParam;
waitingMessage *nextMessage;
};
typedef waitingMessage* pWM;
struct partitionMessage {
int id;
LPSTR *message; // array of message parts
partitionMessage *nextMessage;
};
typedef partitionMessage* pPM;
#define HEADER 0xABCD1234
#define FOOTER 0x9876FEDC
#define EMPTYH 0xF1E2D3C4
// memory struct for keys
struct UinKey
{
HANDLE hContact; // handle of contact
u_int header; // HEADER
pSupPro proto; // proto struct
BYTE mode,tmode; // mode: Native,PGP,GPG,RSA/AES,RSA [0..4]
BYTE status,tstatus; // status: Disabled,Enabled,AlwaysTry [0..2] for Native mode
LPSTR msgSplitted; // message to combine
pPM msgPart; // parts of message
pWM msgQueue; // last messages not sended or to resend;
BOOL sendQueue; // èäåò îòñûëêà î÷åðåäè - íå îáðàáàòûâàþòñÿ ñîîáùåíèÿ
BOOL offlineKey;
char waitForExchange; // 0 - ñáðîñèòü î÷åðåäü
// 1 - îæèäàåì
// 2 - äîñëàòü ñ øèôðîâàíèåì
// 3 - äîñëàòü áåç øèôðîâàíèÿ ñ âîïðîñîì
BOOL decoded; // false on decode error
short features;
HANDLE cntx; // crypto context
BYTE keyLoaded; // ( 1-PGP, 2-GPG ) | 1-RSA
BYTE gpgMode,tgpgMode; // 0-UTF8, 1-ANSI
char *lastFileRecv;
char *lastFileSend;
char **fileSend;
BOOL finFileRecv;
BOOL finFileSend;
LPSTR tmp; // tmp text string
u_int footer; // FOOTER
};
typedef UinKey* pUinKey;
struct TFakeAckParams {
inline TFakeAckParams( HANDLE p1, HANDLE p2, LONG p3, LPCSTR p4 ) :
hEvent( p1 ),
hContact( p2 ),
id( p3 ),
msg( p4 )
{}
HANDLE hEvent;
HANDLE hContact;
LONG id;
LPCSTR msg;
};
struct TWaitForExchange {
inline TWaitForExchange( HANDLE p1, HANDLE p2 ) :
hEvent( p1 ),
hContact( p2 )
{}
HANDLE hEvent;
HANDLE hContact;
};
extern char szUIN[NAMSIZE];
extern char szName[NAMSIZE];
extern LIST<SupPro> arProto;
extern LIST<UinKey> arClist;
// crypt_lists.cpp
void loadContactList();
void freeContactList();
pUinKey addContact(HANDLE hContact);
void delContact(HANDLE hContact);
pSupPro getSupPro(HANDLE);
pUinKey findUinKey(HANDLE hContact);
pUinKey getUinKey(HANDLE hContact);
pUinKey getUinCtx(HANDLE);
void addMsg2Queue(pUinKey,WPARAM,LPSTR);
void getContactName(HANDLE hContact, LPSTR szName);
void getContactNameA(HANDLE hContact, LPSTR szName);
void getContactUin(HANDLE hContact, LPSTR szUIN);
void getContactUinA(HANDLE hContact, LPSTR szUIN);
// crypt_check.cpp
int getContactStatus(HANDLE);
bool isSecureProtocol(HANDLE hContact);
BYTE isContactSecured(HANDLE hContact);
bool isClientMiranda(pUinKey ptr, BOOL emptyMirverAsMiranda=FALSE);
bool isClientMiranda(HANDLE hContact, BOOL emptyMirverAsMiranda=FALSE);
bool isProtoSmallPackets(HANDLE);
bool isContactInvisible(HANDLE);
bool isNotOnList(HANDLE);
bool isContactNewPG(HANDLE);
bool isContactPGP(HANDLE);
bool isContactGPG(HANDLE);
bool isContactRSAAES(HANDLE);
bool isContactRSA(HANDLE);
bool isChatRoom(HANDLE);
bool isFileExist(LPCSTR);
bool isSecureIM(pUinKey ptr, BOOL emptyMirverAsSecureIM=FALSE);
bool isSecureIM(HANDLE hContact, BOOL emptyMirverAsSecureIM=FALSE);
// crypt_icons.cpp
HICON mode2icon(int,int);
HANDLE mode2clicon(int mode, int type);
void RefreshContactListIcons(void);
void ShowStatusIcon(HANDLE,UINT);
void ShowStatusIcon(HANDLE);
void ShowStatusIconNotify(HANDLE);
// crypt_popups.cpp
//static int CALLBACK PopupDlgProc(HWND,UINT,WPARAM,LPARAM);
void showPopUp(LPCSTR,HANDLE,HICON,UINT);
void showPopUpEC(HANDLE);
void showPopUpDCmsg(HANDLE,LPCSTR);
void showPopUpDC(HANDLE);
void showPopUpKS(HANDLE);
void showPopUpKRmsg(HANDLE,LPCSTR);
void showPopUpKR(HANDLE);
void showPopUpSM(HANDLE);
void showPopUpRM(HANDLE);
// crypt_meta.cpp
BOOL isProtoMetaContacts(HANDLE);
BOOL isDefaultSubContact(HANDLE);
HANDLE getMetaContact(HANDLE);
HANDLE getMostOnline(HANDLE);
void DeinitMetaContact(HANDLE);
// crypt_dll.cpp
LPSTR InitKeyA(pUinKey,int);
int InitKeyB(pUinKey,LPCSTR);
void InitKeyX(pUinKey,BYTE*);
BOOL CalculateKeyX(pUinKey,HANDLE);
LPSTR encodeMsg(pUinKey,LPARAM);
LPSTR decodeMsg(pUinKey,LPARAM,LPSTR);
BOOL LoadKeyPGP(pUinKey);
BOOL LoadKeyGPG(pUinKey);
// crypt_misc.cpp
unsigned __stdcall sttFakeAck(LPVOID);
unsigned __stdcall sttWaitForExchange(LPVOID);
void waitForExchange(pUinKey ptr, int flag = 1);
#endif
|