libpurple/ntlm.c

Sun, 30 Dec 2012 19:23:57 -0800

author
Mark Doliner <mark@kingant.net>
date
Sun, 30 Dec 2012 19:23:57 -0800
changeset 33573
cf93d5926aaf
parent 33565
80a5d9ba1c1b
child 33583
5ecccdc2d618
permissions
-rw-r--r--

Try using /dev/urandom instead of rand() when creating an NTLM session key.

rand() is not great at creating random numbers for cryptographic purposes.
This was pointed out by static analysis of our code by Chris Wysopal and
Veracode.

My change is written such that if /dev/urandom fails then we'll fallback to
using rand(). This isn't perfect... I'm expecting /dev/urandom not to work
on Windows. It didn't seem necessary to wrap this in an autoconf check
since we'll just fallback to using rand... but if it turns out to become a
problem then we can wrap it.

If anyone is interested, I heard there's a Windows API call called
CryptGenRandom that we could maybe use there.

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
18265
9f26190d7f46 Move the define in internal.h instead.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15884
diff changeset
27 #include "internal.h"
9f26190d7f46 Move the define in internal.h instead.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15884
diff changeset
28
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
29 #include "util.h"
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
30 #include "ntlm.h"
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
31 #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
32 #include "debug.h"
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
33 #include <string.h>
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
34
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
35 #define NTLM_NEGOTIATE_NTLM2_KEY 0x00080000
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
36
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
37 struct type1_message {
11829
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
38 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
39 guint32 type; /* 0x00000001 */
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
40 guint32 flags; /* 0x0000b203 */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
41
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
42 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
43 guint16 dom_len2; /* domain string length */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
44 guint32 dom_off; /* domain string offset */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
45
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
46 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
47 guint16 host_len2; /* host string length */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
48 guint32 host_off; /* host string offset (always 0x00000020) */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
49
11829
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
50 #if 0
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
51 guint8 host[*]; /* host string (ASCII) */
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
52 guint8 dom[*]; /* domain string (ASCII) */
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
53 #endif
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
54 };
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
55
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
56 struct type2_message {
11829
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
57 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
58 guint32 type; /* 0x00000002 */
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
59
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
60 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
61 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
62 guint16 msg_len2; /* target name length */
26559
70c6a4491061 disapproval of revision 'd8cf7a583b30714030386f9f3897142b1b2ddcd2'
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26558
diff changeset
63
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
64 guint32 flags; /* 0x00008201 */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
65
11829
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
66 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
67 guint8 context[8];
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
68 };
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
69
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
70 struct type3_message {
11829
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
71 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
72 guint32 type; /* 0x00000003 */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
73
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
74 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
75 guint16 lm_resp_len2; /* LanManager response length (always 0x18)*/
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
76 guint32 lm_resp_off; /* LanManager response offset */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
77
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
78 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
79 guint16 nt_resp_len2; /* NT response length (always 0x18) */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
80 guint32 nt_resp_off; /* NT response offset */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
81
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
82 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
83 guint16 dom_len2; /* domain string length */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
84 guint32 dom_off; /* domain string offset (always 0x00000040) */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
85
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
86 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
87 guint16 user_len2; /* username string length */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
88 guint32 user_off; /* username string offset */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
89
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
90 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
91 guint16 host_len2; /* host string length */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
92 guint32 host_off; /* host string offset */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
93
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
94 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
95 guint16 sess_len2;
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
96 guint32 sess_off; /* message length */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
97
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
98 guint32 flags; /* 0x00008201 */
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
99 /* 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
100 /* guint32 flags3; */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
101
11829
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
102 #if 0
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
103 guint8 dom[*]; /* domain string (unicode UTF-16LE) */
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
104 guint8 user[*]; /* username string (unicode UTF-16LE) */
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
105 guint8 host[*]; /* host string (unicode UTF-16LE) */
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
106 guint8 lm_resp[*]; /* LanManager response */
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
107 guint8 nt_resp[*]; /* NT response */
8d89f3c00831 [gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents: 11586
diff changeset
108 #endif
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
109 };
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
110
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
111 gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
112 purple_ntlm_gen_type1(const gchar *hostname, const gchar *domain)
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
113 {
32017
2710edaebd02 Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents: 30857
diff changeset
114 int hostnamelen,host_off;
2710edaebd02 Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents: 30857
diff changeset
115 int domainlen,dom_off;
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
116 unsigned char *msg;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
117 struct type1_message *tmsg;
13706
0490d9ee869a [gaim-migrate @ 16107]
Mark Doliner <markdoliner@pidgin.im>
parents: 13701
diff changeset
118 gchar *tmp;
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
119
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
120 hostnamelen = strlen(hostname);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
121 domainlen = strlen(domain);
32017
2710edaebd02 Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents: 30857
diff changeset
122 host_off = sizeof(struct type1_message);
2710edaebd02 Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents: 30857
diff changeset
123 dom_off = sizeof(struct type1_message) + hostnamelen;
13725
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);
32017
2710edaebd02 Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents: 30857
diff changeset
137 tmsg->dom_off = GUINT32_TO_LE(dom_off);
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
138 tmsg->host_len1 = tmsg->host_len2 = GUINT16_TO_LE(hostnamelen);
32017
2710edaebd02 Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents: 30857
diff changeset
139 tmsg->host_off = GUINT32_TO_LE(host_off);
2710edaebd02 Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents: 30857
diff changeset
140 memcpy(msg + host_off, hostname, hostnamelen);
2710edaebd02 Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents: 30857
diff changeset
141 memcpy(msg + 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);
30857
1a7e2da2ab01 Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents: 28981
diff changeset
157 if (tmsg != NULL && retlen >= (sizeof(struct type2_message) - 1)) {
1a7e2da2ab01 Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents: 28981
diff changeset
158 memcpy(nonce, tmsg->nonce, 8);
1a7e2da2ab01 Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents: 28981
diff changeset
159 if (flags != NULL)
1a7e2da2ab01 Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents: 28981
diff changeset
160 *flags = GUINT16_FROM_LE(tmsg->flags);
1a7e2da2ab01 Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents: 28981
diff changeset
161 } else {
1a7e2da2ab01 Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents: 28981
diff changeset
162 purple_debug_error("ntlm", "Unable to parse type2 message - returning empty nonce.\n");
1a7e2da2ab01 Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents: 28981
diff changeset
163 memset(nonce, 0, 8);
1a7e2da2ab01 Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents: 28981
diff changeset
164 }
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
165 g_free(tmsg);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
166
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
167 return nonce;
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
168 }
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
169
13701
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
170 /**
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
171 * 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
172 * a parity bit after every 7th bit.
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
173 */
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
174 static void
13701
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
175 setup_des_key(const guint8 key_56[], guint8 *key)
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
176 {
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
177 key[0] = key_56[0];
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
178 key[1] = ((key_56[0] << 7) & 0xFF) | (key_56[1] >> 1);
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
179 key[2] = ((key_56[1] << 6) & 0xFF) | (key_56[2] >> 2);
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
180 key[3] = ((key_56[2] << 5) & 0xFF) | (key_56[3] >> 3);
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
181 key[4] = ((key_56[3] << 4) & 0xFF) | (key_56[4] >> 4);
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
182 key[5] = ((key_56[4] << 3) & 0xFF) | (key_56[5] >> 5);
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
183 key[6] = ((key_56[5] << 2) & 0xFF) | (key_56[6] >> 6);
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
184 key[7] = (key_56[6] << 1) & 0xFF;
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
185 }
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
186
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
187 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
188 * helper function for purple cipher.c
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
189 */
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
190 static void
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
191 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
192 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
193 PurpleCipher *cipher;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
194 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
195 size_t outlen;
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
196
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
197 cipher = purple_ciphers_find_cipher("des");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
198 context = purple_cipher_context_new(cipher, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
199 purple_cipher_context_set_key(context, key);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
200 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
201 purple_cipher_context_destroy(context);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
202 }
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
203
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
204 /*
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
205 * 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
206 * 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
207 * bytes are stored in the results array.
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
208 */
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
209 static void
13701
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
210 calc_resp(guint8 *keys, const guint8 *plaintext, unsigned char *results)
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
211 {
13701
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
212 guint8 key[8];
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
213 setup_des_key(keys, key);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
214 des_ecb_encrypt(plaintext, results, key);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
215
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
216 setup_des_key(keys + 7, key);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
217 des_ecb_encrypt(plaintext, results + 8, key);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
218
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
219 setup_des_key(keys + 14, key);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
220 des_ecb_encrypt(plaintext, results + 16, key);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
221 }
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
222
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
223 static void
33565
80a5d9ba1c1b Remove unused parameter.
Mark Doliner <mark@kingant.net>
parents: 32017
diff changeset
224 gensesskey(char *buffer)
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
225 {
33573
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
226 int fd;
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
227 int i;
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
228 ssize_t red = 0;
33565
80a5d9ba1c1b Remove unused parameter.
Mark Doliner <mark@kingant.net>
parents: 32017
diff changeset
229
33573
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
230 fd = open("/dev/urandom", O_RDONLY);
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
231 if (fd >= 0) {
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
232 red = read(fd, buffer, 16);
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
233 if (red < 0) {
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
234 purple_debug_warning("ntlm", "Error reading from /dev/urandom: %s."
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
235 " Falling back to inferior method.\n", g_strerror(errno));
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
236 red = 0;
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
237 } else if (red < 16) {
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
238 purple_debug_warning("ntlm", "Tried reading 16 bytes from "
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
239 "/dev/urandom but only got %zd. Falling back to "
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
240 "inferior method\n", red);
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
241 }
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
242 } else {
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
243 purple_debug_warning("ntlm", "Error opening /dev/urandom: %s."
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
244 " Falling back to inferior method.\n", g_strerror(errno));
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
245 }
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
246
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
247 for (i = red; i < 16; i++) {
33565
80a5d9ba1c1b Remove unused parameter.
Mark Doliner <mark@kingant.net>
parents: 32017
diff changeset
248 buffer[i] = (char)(rand() & 0xff);
13088
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
249 }
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
250 }
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
251
13089
e1ab8bfba211 [gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents: 13088
diff changeset
252 gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
253 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
254 {
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
255 char lm_pw[14];
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
256 unsigned char lm_hpw[21];
13088
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
257 char sesskey[16];
13701
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
258 guint8 key[8];
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
259 int domainlen;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
260 int usernamelen;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
261 int hostnamelen;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
262 int msglen;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
263 struct type3_message *tmsg;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
264 int passwlen, lennt;
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
265 unsigned char lm_resp[24], nt_resp[24];
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
266 unsigned char magic[] = { 0x4B, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 };
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
267 unsigned char nt_hpw[21];
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
268 char nt_pw[128];
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
269 PurpleCipher *cipher;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
270 PurpleCipherContext *context;
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
271 char *tmp;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
272 int idx;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
273 gchar *ucs2le;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
274
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
275 domainlen = strlen(domain) * 2;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
276 usernamelen = strlen(username) * 2;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
277 hostnamelen = strlen(hostname) * 2;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
278 msglen = sizeof(struct type3_message) + domainlen +
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
279 usernamelen + hostnamelen + 0x18 + 0x18 + ((flags) ? 0x10 : 0);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
280 tmsg = g_malloc0(msglen);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
281 passwlen = strlen(passw);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
282
13089
e1ab8bfba211 [gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents: 13088
diff changeset
283 /* type3 message initialization */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
284 tmsg->protocol[0] = 'N';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
285 tmsg->protocol[1] = 'T';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
286 tmsg->protocol[2] = 'L';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
287 tmsg->protocol[3] = 'M';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
288 tmsg->protocol[4] = 'S';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
289 tmsg->protocol[5] = 'S';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
290 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
291 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
292 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
293 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
294 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
295 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
296
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
297 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
298 tmsg->dom_off = GUINT32_TO_LE(sizeof(struct type3_message));
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
299
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
300 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
301 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
302
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
303 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
304 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
305
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
306 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
307 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
308 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
309 }
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
310
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
311 tmsg->flags = GUINT32_TO_LE(0x00008201);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
312
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
313 tmp = (char *)tmsg + sizeof(struct type3_message);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
314
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
315 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
316 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
317 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
318 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
319 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
320 } 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
321 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
322 }
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
323
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
324 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
325 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
326 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
327 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
328 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
329 } 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
330 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
331 }
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
332
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
333 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
334 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
335 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
336 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
337 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
338 } 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
339 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
340 }
13089
e1ab8bfba211 [gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents: 13088
diff changeset
341
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
342 /* LM */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
343 if (passwlen > 14)
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
344 passwlen = 14;
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
345
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
346 for (idx = 0; idx < passwlen; idx++)
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
347 lm_pw[idx] = g_ascii_toupper(passw[idx]);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
348 for (; idx < 14; idx++)
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
349 lm_pw[idx] = 0;
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
350
13701
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
351 setup_des_key((unsigned char*)lm_pw, key);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
352 des_ecb_encrypt(magic, lm_hpw, key);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
353
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
354 setup_des_key((unsigned char*)(lm_pw + 7), key);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
355 des_ecb_encrypt(magic, lm_hpw + 8, key);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
356
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
357 memset(lm_hpw + 16, 0, 5);
13700
ad7bca3b4240 [gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents: 13679
diff changeset
358 calc_resp(lm_hpw, nonce, lm_resp);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
359 memcpy(tmp, lm_resp, 0x18);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
360 tmp += 0x18;
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
361
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
362 /* 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
363 /* Convert the password to UTF-16LE */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
364 lennt = strlen(passw);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
365 for (idx = 0; idx < lennt; idx++)
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
366 {
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
367 nt_pw[2 * idx] = passw[idx];
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
368 nt_pw[2 * idx + 1] = 0;
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
369 }
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
370
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
371 cipher = purple_ciphers_find_cipher("md4");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
372 context = purple_cipher_context_new(cipher, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
373 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
374 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
375 purple_cipher_context_destroy(context);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
376
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
377 memset(nt_hpw + 16, 0, 5);
13700
ad7bca3b4240 [gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents: 13679
diff changeset
378 calc_resp(nt_hpw, nonce, nt_resp);
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
379 memcpy(tmp, nt_resp, 0x18);
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
380 tmp += 0x18;
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
381
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
382 /* LCS Stuff */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
383 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
384 tmsg->flags = GUINT32_TO_LE(0x409082d4);
33565
80a5d9ba1c1b Remove unused parameter.
Mark Doliner <mark@kingant.net>
parents: 32017
diff changeset
385 gensesskey(sesskey);
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
386 memcpy(tmp, sesskey, 0x10);
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
387 }
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
388
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
389 /*tmsg->flags2 = 0x0a280105;
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
390 tmsg->flags3 = 0x0f000000;*/
13089
e1ab8bfba211 [gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents: 13088
diff changeset
391
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
392 tmp = purple_base64_encode((guchar *)tmsg, msglen);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
393 g_free(tmsg);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
394
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
395 return tmp;
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
396 }

mercurial