libpurple/ntlm.c

Fri, 18 Jan 2013 03:51:05 -0500

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Fri, 18 Jan 2013 03:51:05 -0500
changeset 33643
6f7deddb8850
parent 33583
5ecccdc2d618
child 33884
3fd1628aa718
permissions
-rw-r--r--

Move blist loading into purple_core_init.

The comments say we want to move this into purple_blist_init, but that
seems like it would be problematic. We need the UI ops to be set, which
moves blist init after UI init. But stuff needs blist signals to be
registered before UI init, etc., etc. It seemed like a pain to work that
all out. I made purple_blist_boot for purple_core_init to call after the
UI init happened. It could have been called _load, but I didn't want
people to accidentally continue calling it.

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
33583
5ecccdc2d618 Document a potential improvement in ntlm random numbers.
Mark Doliner <mark@kingant.net>
parents: 33573
diff changeset
223 /*
5ecccdc2d618 Document a potential improvement in ntlm random numbers.
Mark Doliner <mark@kingant.net>
parents: 33573
diff changeset
224 * TODO: We think we should be using cryptographically secure random numbers
5ecccdc2d618 Document a potential improvement in ntlm random numbers.
Mark Doliner <mark@kingant.net>
parents: 33573
diff changeset
225 * here. We think the rand() function is probably bad. We think
5ecccdc2d618 Document a potential improvement in ntlm random numbers.
Mark Doliner <mark@kingant.net>
parents: 33573
diff changeset
226 * /dev/urandom is a step up, but using a random function from an SSL
5ecccdc2d618 Document a potential improvement in ntlm random numbers.
Mark Doliner <mark@kingant.net>
parents: 33573
diff changeset
227 * library would probably be best. In Windows we could possibly also
5ecccdc2d618 Document a potential improvement in ntlm random numbers.
Mark Doliner <mark@kingant.net>
parents: 33573
diff changeset
228 * use CryptGenRandom.
5ecccdc2d618 Document a potential improvement in ntlm random numbers.
Mark Doliner <mark@kingant.net>
parents: 33573
diff changeset
229 */
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
230 static void
33565
80a5d9ba1c1b Remove unused parameter.
Mark Doliner <mark@kingant.net>
parents: 32017
diff changeset
231 gensesskey(char *buffer)
13679
77a58c7c93af [gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents: 13089
diff changeset
232 {
33573
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
233 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
234 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
235 ssize_t red = 0;
33565
80a5d9ba1c1b Remove unused parameter.
Mark Doliner <mark@kingant.net>
parents: 32017
diff changeset
236
33573
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
237 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
238 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
239 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
240 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
241 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
242 " 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
243 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
244 } 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
245 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
246 "/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
247 "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
248 }
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
249 } else {
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
250 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
251 " 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
252 }
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
253
cf93d5926aaf Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents: 33565
diff changeset
254 for (i = red; i < 16; i++) {
33565
80a5d9ba1c1b Remove unused parameter.
Mark Doliner <mark@kingant.net>
parents: 32017
diff changeset
255 buffer[i] = (char)(rand() & 0xff);
13088
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
256 }
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
257 }
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
258
13089
e1ab8bfba211 [gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents: 13088
diff changeset
259 gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
260 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
261 {
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
262 char lm_pw[14];
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
263 unsigned char lm_hpw[21];
13088
6254abd3dec1 [gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13085
diff changeset
264 char sesskey[16];
13701
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
265 guint8 key[8];
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
266 int domainlen;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
267 int usernamelen;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
268 int hostnamelen;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
269 int msglen;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
270 struct type3_message *tmsg;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
271 int passwlen, lennt;
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
272 unsigned char lm_resp[24], nt_resp[24];
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
273 unsigned char magic[] = { 0x4B, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 };
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
274 unsigned char nt_hpw[21];
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
275 char nt_pw[128];
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
276 PurpleCipher *cipher;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
277 PurpleCipherContext *context;
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
278 char *tmp;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
279 int idx;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
280 gchar *ucs2le;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
281
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
282 domainlen = strlen(domain) * 2;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
283 usernamelen = strlen(username) * 2;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
284 hostnamelen = strlen(hostname) * 2;
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
285 msglen = sizeof(struct type3_message) + domainlen +
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
286 usernamelen + hostnamelen + 0x18 + 0x18 + ((flags) ? 0x10 : 0);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
287 tmsg = g_malloc0(msglen);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
288 passwlen = strlen(passw);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
289
13089
e1ab8bfba211 [gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents: 13088
diff changeset
290 /* type3 message initialization */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
291 tmsg->protocol[0] = 'N';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
292 tmsg->protocol[1] = 'T';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
293 tmsg->protocol[2] = 'L';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
294 tmsg->protocol[3] = 'M';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
295 tmsg->protocol[4] = 'S';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
296 tmsg->protocol[5] = 'S';
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
297 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
298 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
299 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
300 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
301 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
302 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
303
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
304 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
305 tmsg->dom_off = GUINT32_TO_LE(sizeof(struct type3_message));
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
306
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->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
308 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
309
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
310 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
311 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
312
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
313 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
314 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
315 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
316 }
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
317
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
318 tmsg->flags = GUINT32_TO_LE(0x00008201);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
319
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
320 tmp = (char *)tmsg + sizeof(struct type3_message);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
321
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
322 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
323 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
324 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
325 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
326 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
327 } 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
328 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
329 }
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
330
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
331 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
332 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
333 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
334 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
335 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
336 } 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
337 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
338 }
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
339
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
340 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
341 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
342 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
343 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
344 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
345 } 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
346 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
347 }
13089
e1ab8bfba211 [gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents: 13088
diff changeset
348
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
349 /* LM */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
350 if (passwlen > 14)
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
351 passwlen = 14;
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
352
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
353 for (idx = 0; idx < passwlen; idx++)
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
354 lm_pw[idx] = g_ascii_toupper(passw[idx]);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
355 for (; idx < 14; idx++)
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
356 lm_pw[idx] = 0;
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
357
13701
5f9ab32a6306 [gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents: 13700
diff changeset
358 setup_des_key((unsigned char*)lm_pw, key);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
359 des_ecb_encrypt(magic, lm_hpw, key);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
360
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
361 setup_des_key((unsigned char*)(lm_pw + 7), key);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
362 des_ecb_encrypt(magic, lm_hpw + 8, key);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
363
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
364 memset(lm_hpw + 16, 0, 5);
13700
ad7bca3b4240 [gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents: 13679
diff changeset
365 calc_resp(lm_hpw, nonce, lm_resp);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
366 memcpy(tmp, lm_resp, 0x18);
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
367 tmp += 0x18;
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
368
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
369 /* 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
370 /* Convert the password to UTF-16LE */
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
371 lennt = strlen(passw);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
372 for (idx = 0; idx < lennt; idx++)
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
373 {
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
374 nt_pw[2 * idx] = passw[idx];
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
375 nt_pw[2 * idx + 1] = 0;
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
376 }
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
377
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
378 cipher = purple_ciphers_find_cipher("md4");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
379 context = purple_cipher_context_new(cipher, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
380 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
381 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
382 purple_cipher_context_destroy(context);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
383
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
384 memset(nt_hpw + 16, 0, 5);
13700
ad7bca3b4240 [gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents: 13679
diff changeset
385 calc_resp(nt_hpw, nonce, nt_resp);
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
386 memcpy(tmp, nt_resp, 0x18);
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
387 tmp += 0x18;
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 /* LCS Stuff */
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
390 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
391 tmsg->flags = GUINT32_TO_LE(0x409082d4);
33565
80a5d9ba1c1b Remove unused parameter.
Mark Doliner <mark@kingant.net>
parents: 32017
diff changeset
392 gensesskey(sesskey);
13085
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
393 memcpy(tmp, sesskey, 0x10);
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
394 }
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
395
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
396 /*tmsg->flags2 = 0x0a280105;
c80913901342 [gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11829
diff changeset
397 tmsg->flags3 = 0x0f000000;*/
13089
e1ab8bfba211 [gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents: 13088
diff changeset
398
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
399 tmp = purple_base64_encode((guchar *)tmsg, msglen);
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
400 g_free(tmsg);
13725
b14241732980 [gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents: 13706
diff changeset
401
11375
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
402 return tmp;
765ec911f25d [gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
403 }

mercurial