libpurple/ntlm.c

Wed, 13 May 2009 20:29:03 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Wed, 13 May 2009 20:29:03 +0000
changeset 27110
05ca719b901b
parent 26578
41a9f4b89956
child 28981
4e3922ab4844
permissions
-rw-r--r--

Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.

11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
1 /**
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
2 * @file ntlm.c
20147
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 19985
diff changeset
3 */
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 19985
diff changeset
4
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 19985
diff changeset
5 /* purple
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
6 *
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
7 * Copyright (C) 2005 Thomas Butter <butter@uni-mannheim.de>
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
8 *
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
9 * hashing done according to description of NTLM on
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
10 * http://www.innovation.ch/java/ntlm.html
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
11 *
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
12 * This program is free software; you can redistribute it and/or modify
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
13 * it under the terms of the GNU General Public License as published by
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
14 * the Free Software Foundation; either version 2 of the License, or
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
15 * (at your option) any later version.
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
16 *
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
17 * This program is distributed in the hope that it will be useful,
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
20 * GNU General Public License for more details.
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
21 *
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
22 * You should have received a copy of the GNU General Public License
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
23 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18265
diff changeset
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
25 */
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
26
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
27 #include <glib.h>
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
28 #include <stdlib.h>
18265
9f26190d7f46 Move the define in internal.h instead.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15884
diff changeset
29 #include "internal.h"
9f26190d7f46 Move the define in internal.h instead.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15884
diff changeset
30
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
31 #include "util.h"
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
32 #include "ntlm.h"
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
33 #include "cipher.h"
22596
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
34 #include "debug.h"
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
35 #include <string.h>
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
36
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
37 #define NTLM_NEGOTIATE_NTLM2_KEY 0x00080000
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
38
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
39 struct type1_message {
11829
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
40 guint8 protocol[8]; /* 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0' */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
41 guint32 type; /* 0x00000001 */
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
42 guint32 flags; /* 0x0000b203 */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
43
26577
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
44 guint16 dom_len1; /* domain string length */
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
45 guint16 dom_len2; /* domain string length */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
46 guint32 dom_off; /* domain string offset */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
47
26577
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
48 guint16 host_len1; /* host string length */
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
49 guint16 host_len2; /* host string length */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
50 guint32 host_off; /* host string offset (always 0x00000020) */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
51
11829
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
52 #if 0
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
53 guint8 host[*]; /* host string (ASCII) */
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
54 guint8 dom[*]; /* domain string (ASCII) */
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
55 #endif
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
56 };
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
57
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
58 struct type2_message {
11829
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
59 guint8 protocol[8]; /* 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0'*/
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
60 guint32 type; /* 0x00000002 */
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
61
26577
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
62 guint32 zero;
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
63 guint16 msg_len1; /* target name length */
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
64 guint16 msg_len2; /* target name length */
26559
70c6a4491061 disapproval of revision 'd8cf7a583b30714030386f9f3897142b1b2ddcd2'
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26558
diff changeset
65
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
66 guint32 flags; /* 0x00008201 */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
67
11829
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
68 guint8 nonce[8]; /* nonce */
26577
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
69 guint8 context[8];
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
70 };
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
71
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
72 struct type3_message {
11829
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
73 guint8 protocol[8]; /* 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0'*/
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
74 guint32 type; /* 0x00000003 */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
75
26577
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
76 guint16 lm_resp_len1; /* LanManager response length (always 0x18)*/
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
77 guint16 lm_resp_len2; /* LanManager response length (always 0x18)*/
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
78 guint32 lm_resp_off; /* LanManager response offset */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
79
26577
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
80 guint16 nt_resp_len1; /* NT response length (always 0x18) */
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
81 guint16 nt_resp_len2; /* NT response length (always 0x18) */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
82 guint32 nt_resp_off; /* NT response offset */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
83
26577
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
84 guint16 dom_len1; /* domain string length */
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
85 guint16 dom_len2; /* domain string length */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
86 guint32 dom_off; /* domain string offset (always 0x00000040) */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
87
26577
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
88 guint16 user_len1; /* username string length */
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
89 guint16 user_len2; /* username string length */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
90 guint32 user_off; /* username string offset */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
91
26577
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
92 guint16 host_len1; /* host string length */
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
93 guint16 host_len2; /* host string length */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
94 guint32 host_off; /* host string offset */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
95
26577
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
96 guint16 sess_len1;
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
97 guint16 sess_len2;
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
98 guint32 sess_off; /* message length */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
99
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
100 guint32 flags; /* 0x00008201 */
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
101 /* guint32 flags2; */ /* unknown, used in windows messenger */
26577
f8ba97d5d719 Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26559
diff changeset
102 /* guint32 flags3; */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
103
11829
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
104 #if 0
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
105 guint8 dom[*]; /* domain string (unicode UTF-16LE) */
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
106 guint8 user[*]; /* username string (unicode UTF-16LE) */
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
107 guint8 host[*]; /* host string (unicode UTF-16LE) */
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
108 guint8 lm_resp[*]; /* LanManager response */
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
109 guint8 nt_resp[*]; /* NT response */
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
110 #endif
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
111 };
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
112
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
113 gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
114 purple_ntlm_gen_type1(const gchar *hostname, const gchar *domain)
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
115 {
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
116 int hostnamelen;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
117 int domainlen;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
118 unsigned char *msg;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
119 struct type1_message *tmsg;
13706
0490d9ee869a [gaim-migrate @ 16107]
Mark Doliner <markdoliner@pidgin.im>
parents: 13701
diff changeset
120 gchar *tmp;
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
121
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
122 hostnamelen = strlen(hostname);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
123 domainlen = strlen(domain);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
124 msg = g_malloc0(sizeof(struct type1_message) + hostnamelen + domainlen);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
125 tmsg = (struct type1_message*)msg;
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
126 tmsg->protocol[0] = 'N';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
127 tmsg->protocol[1] = 'T';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
128 tmsg->protocol[2] = 'L';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
129 tmsg->protocol[3] = 'M';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
130 tmsg->protocol[4] = 'S';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
131 tmsg->protocol[5] = 'S';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
132 tmsg->protocol[6] = 'P';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
133 tmsg->protocol[7] = '\0';
26578
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
134 tmsg->type = GUINT32_TO_LE(0x00000001);
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
135 tmsg->flags = GUINT32_TO_LE(0x0000b203);
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
136 tmsg->dom_len1 = tmsg->dom_len2 = GUINT16_TO_LE(domainlen);
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
137 tmsg->dom_off = GUINT32_TO_LE(sizeof(struct type1_message) + hostnamelen);
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
138 tmsg->host_len1 = tmsg->host_len2 = GUINT16_TO_LE(hostnamelen);
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
139 tmsg->host_off = GUINT32_TO_LE(sizeof(struct type1_message));
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
140 memcpy(msg + tmsg->host_off, hostname, hostnamelen);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
141 memcpy(msg + tmsg->dom_off, domain, domainlen);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
142
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
143 tmp = purple_base64_encode(msg, sizeof(struct type1_message) + hostnamelen + domainlen);
13706
0490d9ee869a [gaim-migrate @ 16107]
Mark Doliner <markdoliner@pidgin.im>
parents: 13701
diff changeset
144 g_free(msg);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
145
13706
0490d9ee869a [gaim-migrate @ 16107]
Mark Doliner <markdoliner@pidgin.im>
parents: 13701
diff changeset
146 return tmp;
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
147 }
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
148
13700
ad7bca3b4240 [gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents: 13679
diff changeset
149 guint8 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
150 purple_ntlm_parse_type2(const gchar *type2, guint32 *flags)
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
151 {
11586
9e221fc0e2f8 [gaim-migrate @ 13856]
Nathan Walp <nwalp@pidgin.im>
parents: 11427
diff changeset
152 gsize retlen;
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
153 struct type2_message *tmsg;
13700
ad7bca3b4240 [gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents: 13679
diff changeset
154 static guint8 nonce[8];
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
155
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
156 tmsg = (struct type2_message*)purple_base64_decode(type2, &retlen);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
157 memcpy(nonce, tmsg->nonce, 8);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
158 if (flags != NULL)
26578
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
159 *flags = GUINT16_FROM_LE(tmsg->flags);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
160 g_free(tmsg);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
161
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
162 return nonce;
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
163 }
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
164
13701
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
165 /**
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
166 * Create a 64bit DES key by taking a 56bit key and adding
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
167 * a parity bit after every 7th bit.
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
168 */
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
169 static void
13701
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
170 setup_des_key(const guint8 key_56[], guint8 *key)
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
171 {
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
172 key[0] = key_56[0];
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
173 key[1] = ((key_56[0] << 7) & 0xFF) | (key_56[1] >> 1);
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
174 key[2] = ((key_56[1] << 6) & 0xFF) | (key_56[2] >> 2);
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
175 key[3] = ((key_56[2] << 5) & 0xFF) | (key_56[3] >> 3);
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
176 key[4] = ((key_56[3] << 4) & 0xFF) | (key_56[4] >> 4);
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
177 key[5] = ((key_56[4] << 3) & 0xFF) | (key_56[5] >> 5);
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
178 key[6] = ((key_56[5] << 2) & 0xFF) | (key_56[6] >> 6);
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
179 key[7] = (key_56[6] << 1) & 0xFF;
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
180 }
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
181
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
182 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
183 * helper function for purple cipher.c
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
184 */
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
185 static void
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
186 des_ecb_encrypt(const guint8 *plaintext, guint8 *result, const guint8 *key)
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
187 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
188 PurpleCipher *cipher;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
189 PurpleCipherContext *context;
21695
8cea10362afd purple_cipher_context_encrypt() wants a pointer to a size_t, not a gsize
Evan Schoenberg <evands@pidgin.im>
parents: 20147
diff changeset
190 size_t outlen;
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
191
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
192 cipher = purple_ciphers_find_cipher("des");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
193 context = purple_cipher_context_new(cipher, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
194 purple_cipher_context_set_key(context, key);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
195 purple_cipher_context_encrypt(context, plaintext, 8, result, &outlen);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
196 purple_cipher_context_destroy(context);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
197 }
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
198
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
199 /*
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
200 * takes a 21 byte array and treats it as 3 56-bit DES keys. The
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
201 * 8 byte plaintext is encrypted with each key and the resulting 24
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
202 * bytes are stored in the results array.
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
203 */
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
204 static void
13701
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
205 calc_resp(guint8 *keys, const guint8 *plaintext, unsigned char *results)
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
206 {
13701
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
207 guint8 key[8];
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
208 setup_des_key(keys, key);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
209 des_ecb_encrypt(plaintext, results, key);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
210
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
211 setup_des_key(keys + 7, key);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
212 des_ecb_encrypt(plaintext, results + 8, key);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
213
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
214 setup_des_key(keys + 14, key);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
215 des_ecb_encrypt(plaintext, results + 16, key);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
216 }
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
217
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
218 static void
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
219 gensesskey(char *buffer, const char *oldkey)
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
220 {
13088
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
221 int i = 0;
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
222 if(oldkey == NULL) {
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
223 for(i=0; i<16; i++) {
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
224 buffer[i] = (char)(rand() & 0xff);
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
225 }
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
226 } else {
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
227 memcpy(buffer, oldkey, 16);
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
228 }
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
229 }
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
230
13089
e1ab8bfba211 [gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents: 13088
diff changeset
231 gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
232 purple_ntlm_gen_type3(const gchar *username, const gchar *passw, const gchar *hostname, const gchar *domain, const guint8 *nonce, guint32 *flags)
13089
e1ab8bfba211 [gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents: 13088
diff changeset
233 {
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
234 char lm_pw[14];
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
235 unsigned char lm_hpw[21];
13088
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
236 char sesskey[16];
13701
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
237 guint8 key[8];
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
238 int domainlen;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
239 int usernamelen;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
240 int hostnamelen;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
241 int msglen;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
242 struct type3_message *tmsg;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
243 int passwlen, lennt;
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
244 unsigned char lm_resp[24], nt_resp[24];
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
245 unsigned char magic[] = { 0x4B, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 };
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
246 unsigned char nt_hpw[21];
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
247 char nt_pw[128];
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
248 PurpleCipher *cipher;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
249 PurpleCipherContext *context;
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
250 char *tmp;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
251 int idx;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
252 gchar *ucs2le;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
253
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
254 domainlen = strlen(domain) * 2;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
255 usernamelen = strlen(username) * 2;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
256 hostnamelen = strlen(hostname) * 2;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
257 msglen = sizeof(struct type3_message) + domainlen +
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
258 usernamelen + hostnamelen + 0x18 + 0x18 + ((flags) ? 0x10 : 0);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
259 tmsg = g_malloc0(msglen);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
260 passwlen = strlen(passw);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
261
13089
e1ab8bfba211 [gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents: 13088
diff changeset
262 /* type3 message initialization */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
263 tmsg->protocol[0] = 'N';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
264 tmsg->protocol[1] = 'T';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
265 tmsg->protocol[2] = 'L';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
266 tmsg->protocol[3] = 'M';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
267 tmsg->protocol[4] = 'S';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
268 tmsg->protocol[5] = 'S';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
269 tmsg->protocol[6] = 'P';
26578
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
270 tmsg->type = GUINT32_TO_LE(0x00000003);
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
271 tmsg->lm_resp_len1 = tmsg->lm_resp_len2 = GUINT16_TO_LE(0x18);
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
272 tmsg->lm_resp_off = GUINT32_TO_LE(sizeof(struct type3_message) + domainlen + usernamelen + hostnamelen);
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
273 tmsg->nt_resp_len1 = tmsg->nt_resp_len2 = GUINT16_TO_LE(0x18);
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
274 tmsg->nt_resp_off = GUINT32_TO_LE(sizeof(struct type3_message) + domainlen + usernamelen + hostnamelen + 0x18);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
275
26578
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
276 tmsg->dom_len1 = tmsg->dom_len2 = GUINT16_TO_LE(domainlen);
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
277 tmsg->dom_off = GUINT32_TO_LE(sizeof(struct type3_message));
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
278
26578
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
279 tmsg->user_len1 = tmsg->user_len2 = GUINT16_TO_LE(usernamelen);
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
280 tmsg->user_off = GUINT32_TO_LE(sizeof(struct type3_message) + domainlen);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
281
26578
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
282 tmsg->host_len1 = tmsg->host_len2 = GUINT16_TO_LE(hostnamelen);
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
283 tmsg->host_off = GUINT32_TO_LE(sizeof(struct type3_message) + domainlen + usernamelen);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
284
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
285 if(flags) {
26578
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
286 tmsg->sess_off = GUINT32_TO_LE(sizeof(struct type3_message) + domainlen + usernamelen + hostnamelen + 0x18 + 0x18);
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
287 tmsg->sess_len1 = tmsg->sess_len2 = GUINT16_TO_LE(0x0010);
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
288 }
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
289
26578
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
290 tmsg->flags = GUINT32_TO_LE(0x00008201);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
291
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
292 tmp = (char *)tmsg + sizeof(struct type3_message);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
293
22596
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
294 ucs2le = g_convert(domain, -1, "UTF-16LE", "UTF-8", NULL, NULL, NULL);
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
295 if (ucs2le != NULL) {
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
296 memcpy(tmp, ucs2le, domainlen);
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
297 g_free(ucs2le);
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
298 tmp += domainlen;
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
299 } else {
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
300 purple_debug_info("ntlm", "Unable to encode domain in UTF-16LE.\n");
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
301 }
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
302
22596
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
303 ucs2le = g_convert(username, -1, "UTF-16LE", "UTF-8", NULL, NULL, NULL);
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
304 if (ucs2le != NULL) {
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
305 memcpy(tmp, ucs2le, usernamelen);
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
306 g_free(ucs2le);
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
307 tmp += usernamelen;
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
308 } else {
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
309 purple_debug_info("ntlm", "Unable to encode username in UTF-16LE.\n");
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
310 }
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
311
22596
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
312 ucs2le = g_convert(hostname, -1, "UTF-16LE", "UTF-8", NULL, NULL, NULL);
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
313 if (ucs2le != NULL) {
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
314 memcpy(tmp, ucs2le, hostnamelen);
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
315 g_free(ucs2le);
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
316 tmp += hostnamelen;
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
317 } else {
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
318 purple_debug_info("ntlm", "Unable to encode hostname in UTF-16LE.\n");
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
319 }
13089
e1ab8bfba211 [gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents: 13088
diff changeset
320
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
321 /* LM */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
322 if (passwlen > 14)
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
323 passwlen = 14;
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
324
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
325 for (idx = 0; idx < passwlen; idx++)
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
326 lm_pw[idx] = g_ascii_toupper(passw[idx]);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
327 for (; idx < 14; idx++)
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
328 lm_pw[idx] = 0;
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
329
13701
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
330 setup_des_key((unsigned char*)lm_pw, key);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
331 des_ecb_encrypt(magic, lm_hpw, key);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
332
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
333 setup_des_key((unsigned char*)(lm_pw + 7), key);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
334 des_ecb_encrypt(magic, lm_hpw + 8, key);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
335
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
336 memset(lm_hpw + 16, 0, 5);
13700
ad7bca3b4240 [gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents: 13679
diff changeset
337 calc_resp(lm_hpw, nonce, lm_resp);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
338 memcpy(tmp, lm_resp, 0x18);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
339 tmp += 0x18;
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
340
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
341 /* NTLM */
22596
0854ae660ef4 Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents: 21695
diff changeset
342 /* Convert the password to UTF-16LE */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
343 lennt = strlen(passw);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
344 for (idx = 0; idx < lennt; idx++)
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
345 {
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
346 nt_pw[2 * idx] = passw[idx];
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
347 nt_pw[2 * idx + 1] = 0;
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
348 }
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
349
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
350 cipher = purple_ciphers_find_cipher("md4");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
351 context = purple_cipher_context_new(cipher, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
352 purple_cipher_context_append(context, (guint8 *)nt_pw, 2 * lennt);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
353 purple_cipher_context_digest(context, 21, nt_hpw, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
354 purple_cipher_context_destroy(context);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
355
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
356 memset(nt_hpw + 16, 0, 5);
13700
ad7bca3b4240 [gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents: 13679
diff changeset
357 calc_resp(nt_hpw, nonce, nt_resp);
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
358 memcpy(tmp, nt_resp, 0x18);
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
359 tmp += 0x18;
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
360
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
361 /* LCS Stuff */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
362 if (flags) {
26578
41a9f4b89956 I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26577
diff changeset
363 tmsg->flags = GUINT32_TO_LE(0x409082d4);
13088
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
364 gensesskey(sesskey, NULL);
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
365 memcpy(tmp, sesskey, 0x10);
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
366 }
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
367
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
368 /*tmsg->flags2 = 0x0a280105;
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
369 tmsg->flags3 = 0x0f000000;*/
13089
e1ab8bfba211 [gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents: 13088
diff changeset
370
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
371 tmp = purple_base64_encode((guchar *)tmsg, msglen);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
372 g_free(tmsg);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
373
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
374 return tmp;
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
375 }

mercurial