Sat, 17 Dec 2005 02:24:05 +0000
[gaim-migrate @ 14820]
patch from Simon Wilkinson to add Cyrus SASL support for jabber
Give him credit if it works flawlessly. Blame me if it doesn't, as the
patch was against 1.3.1 (yeah, I've been sitting on it for that long), and
I had to merge it to HEAD, and clean up a bunch of warnings
committer: Nathan Walp <nwalp@pidgin.im>
|
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 |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
3 | * |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
4 | * gaim |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
5 | * |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
6 | * Copyright (C) 2005 Thomas Butter <butter@uni-mannheim.de> |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
7 | * |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
8 | * hashing done according to description of NTLM on |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
9 | * http://www.innovation.ch/java/ntlm.html |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
10 | * |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
11 | * 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
|
12 | * 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
|
13 | * the Free Software Foundation; either version 2 of the License, or |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
14 | * (at your option) any later version. |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
15 | * |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
16 | * 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
|
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
19 | * GNU General Public License for more details. |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
20 | * |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
21 | * 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
|
22 | * along with this program; if not, write to the Free Software |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
24 | */ |
|
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 | #include <glib.h> |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
27 | #include <stdlib.h> |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
28 | #include "util.h" |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
29 | #include "ntlm.h" |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
30 | #include "cipher.h" |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
31 | #include <string.h> |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
32 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
33 | struct type1_message { |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
34 | guint8 protocol[8]; /* 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0' */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
35 | guint8 type; /* 0x01 */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
36 | guint8 zero1[3]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
37 | short flags; /* 0xb203 */ |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
38 | guint8 zero2[2]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
39 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
40 | short dom_len1; /* domain string length */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
41 | short dom_len2; /* domain string length */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
42 | short dom_off; /* domain string offset */ |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
43 | guint8 zero3[2]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
44 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
45 | short host_len1; /* host string length */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
46 | short host_len2; /* host string length */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
47 | short host_off; /* host string offset (always 0x20) */ |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
48 | guint8 zero4[2]; |
|
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'*/ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
58 | guint8 type; /* 0x02 */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
59 | guint8 zero1[7]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
60 | short msg_len; /* 0x28 */ |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
61 | guint8 zero2[2]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
62 | short flags; /* 0x8201 */ |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
63 | guint8 zero3[2]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
64 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
65 | guint8 nonce[8]; /* nonce */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
66 | guint8 zero[8]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
67 | }; |
|
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 | struct type3_message { |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
70 | guint8 protocol[8]; /* 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0'*/ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
71 | guint8 type; /* 0x03 */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
72 | guint8 zero1[3]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
73 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
74 | short lm_resp_len1; /* LanManager response length (always 0x18)*/ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
75 | short lm_resp_len2; /* LanManager response length (always 0x18)*/ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
76 | short lm_resp_off; /* LanManager response offset */ |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
77 | guint8 zero2[2]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
78 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
79 | short nt_resp_len1; /* NT response length (always 0x18) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
80 | short nt_resp_len2; /* NT response length (always 0x18) */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
81 | short nt_resp_off; /* NT response offset */ |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
82 | guint8 zero3[2]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
83 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
84 | short dom_len1; /* domain string length */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
85 | short dom_len2; /* domain string length */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
86 | short dom_off; /* domain string offset (always 0x40) */ |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
87 | guint8 zero4[2]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
88 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
89 | short user_len1; /* username string length */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
90 | short user_len2; /* username string length */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
91 | short user_off; /* username string offset */ |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
92 | guint8 zero5[2]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
93 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
94 | short host_len1; /* host string length */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
95 | short host_len2; /* host string length */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
96 | short host_off; /* host string offset */ |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
97 | guint8 zero6[6]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
98 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
99 | short msg_len; /* message length */ |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
100 | guint8 zero7[2]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
101 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
102 | short flags; /* 0x8201 */ |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
103 | guint8 zero8[2]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
104 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
105 | #if 0 |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
106 | guint8 dom[*]; /* domain string (unicode UTF-16LE) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
107 | guint8 user[*]; /* username string (unicode UTF-16LE) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
108 | guint8 host[*]; /* host string (unicode UTF-16LE) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
109 | guint8 lm_resp[*]; /* LanManager response */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
110 | guint8 nt_resp[*]; /* NT response */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
111 | #endif |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
112 | }; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
113 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
114 | gchar *gaim_ntlm_gen_type1(gchar *hostname, gchar *domain) { |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
115 | char *msg = g_malloc0(sizeof(struct type1_message) + strlen(hostname) + strlen(domain)); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
116 | struct type1_message *tmsg = (struct type1_message*)msg; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
117 | tmsg->protocol[0] = 'N'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
118 | tmsg->protocol[1] = 'T'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
119 | tmsg->protocol[2] = 'L'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
120 | tmsg->protocol[3] = 'M'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
121 | tmsg->protocol[4] = 'S'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
122 | tmsg->protocol[5] = 'S'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
123 | tmsg->protocol[6] = 'P'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
124 | tmsg->protocol[7] = '\0'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
125 | tmsg->type= 0x01; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
126 | tmsg->flags = 0xb202; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
127 | tmsg->dom_len1 = tmsg->dom_len2 = strlen(domain); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
128 | tmsg->dom_off = 32+strlen(hostname); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
129 | tmsg->host_len1 = tmsg->host_len2 = strlen(hostname); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
130 | tmsg->host_off= 32; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
131 | memcpy(msg+sizeof(struct type1_message),hostname,strlen(hostname)); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
132 | memcpy(msg+sizeof(struct type1_message)+strlen(hostname),domain,strlen(domain)); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
133 | |
|
11427
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
134 | return gaim_base64_encode((guchar*)msg, sizeof(struct type1_message) + strlen(hostname) + strlen(domain)); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
135 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
136 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
137 | gchar *gaim_ntlm_parse_type2(gchar *type2) { |
| 11586 | 138 | gsize retlen; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
139 | static gchar nonce[8]; |
|
11427
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
140 | struct type2_message *tmsg = (struct type2_message*)gaim_base64_decode((char*)type2, &retlen); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
141 | memcpy(nonce, tmsg->nonce, 8); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
142 | g_free(tmsg); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
143 | return nonce; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
144 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
145 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
146 | static void setup_des_key(unsigned char key_56[], char *key) |
|
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 | key[0] = key_56[0]; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
149 | key[1] = ((key_56[0] << 7) & 0xFF) | (key_56[1] >> 1); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
150 | key[2] = ((key_56[1] << 6) & 0xFF) | (key_56[2] >> 2); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
151 | key[3] = ((key_56[2] << 5) & 0xFF) | (key_56[3] >> 3); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
152 | key[4] = ((key_56[3] << 4) & 0xFF) | (key_56[4] >> 4); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
153 | key[5] = ((key_56[4] << 3) & 0xFF) | (key_56[5] >> 5); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
154 | key[6] = ((key_56[5] << 2) & 0xFF) | (key_56[6] >> 6); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
155 | key[7] = (key_56[6] << 1) & 0xFF; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
156 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
157 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
158 | /* |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
159 | * helper function for gaim cipher.c |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
160 | */ |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
161 | static void des_ecb_encrypt(char *plaintext, char *result, char *key) { |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
162 | GaimCipher *cipher; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
163 | GaimCipherContext *context; |
| 11586 | 164 | gsize outlen; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
165 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
166 | cipher = gaim_ciphers_find_cipher("des"); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
167 | context = gaim_cipher_context_new(cipher, NULL); |
|
11427
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
168 | gaim_cipher_context_set_key(context, (guchar*)key); |
|
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
169 | gaim_cipher_context_encrypt(context, (guchar*)plaintext, 8, (guchar*)result, &outlen); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
170 | gaim_cipher_context_destroy(context); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
171 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
172 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
173 | /* |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
174 | * 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
|
175 | * 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
|
176 | * bytes are stored in the results array. |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
177 | */ |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
178 | static void calc_resp(unsigned char *keys, unsigned char *plaintext, unsigned char *results) |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
179 | { |
|
11427
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
180 | guchar key[8]; |
|
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
181 | setup_des_key(keys, (char*)key); |
|
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
182 | des_ecb_encrypt((char*)plaintext, (char*)results, (char*)key); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
183 | |
|
11427
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
184 | setup_des_key(keys+7, (char*)key); |
|
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
185 | des_ecb_encrypt((char*)plaintext, (char*)(results+8), (char*)key); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
186 | |
|
11427
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
187 | setup_des_key(keys+14, (char*)key); |
|
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
188 | des_ecb_encrypt((char*)plaintext, (char*)(results+16), (char*)key); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
189 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
190 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
191 | gchar *gaim_ntlm_gen_type3(gchar *username, gchar *passw, gchar *hostname, gchar *domain, gchar *nonce) { |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
192 | char lm_pw[14]; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
193 | unsigned char lm_hpw[21]; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
194 | gchar key[8]; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
195 | struct type3_message *tmsg = g_malloc0(sizeof(struct type3_message)+ |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
196 | strlen(domain) + strlen(username) + strlen(hostname) + 24 +24); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
197 | int len = strlen(passw); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
198 | unsigned char lm_resp[24], nt_resp[24]; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
199 | unsigned char magic[] = { 0x4B, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 }; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
200 | unsigned char nt_hpw[21]; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
201 | int lennt; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
202 | char nt_pw[128]; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
203 | GaimCipher *cipher; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
204 | GaimCipherContext *context; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
205 | char *tmp = 0; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
206 | int idx = 0; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
207 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
208 | /* type3 message initialization */ |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
209 | tmsg->protocol[0] = 'N'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
210 | tmsg->protocol[1] = 'T'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
211 | tmsg->protocol[2] = 'L'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
212 | tmsg->protocol[3] = 'M'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
213 | tmsg->protocol[4] = 'S'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
214 | tmsg->protocol[5] = 'S'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
215 | tmsg->protocol[6] = 'P'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
216 | tmsg->type = 0x03; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
217 | tmsg->lm_resp_len1 = tmsg->lm_resp_len2 = 0x18; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
218 | tmsg->lm_resp_off = sizeof(struct type3_message) + strlen(domain) + strlen(username) + strlen(hostname); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
219 | tmsg->nt_resp_len1 = tmsg->nt_resp_len2 = 0x18; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
220 | tmsg->nt_resp_off = sizeof(struct type3_message) + strlen(domain) + strlen(username) + strlen(hostname) + 0x18; |
|
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 | tmsg->dom_len1 = tmsg->dom_len2 = strlen(domain); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
223 | tmsg->dom_off = 0x40; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
224 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
225 | tmsg->user_len1 = tmsg->user_len2 = strlen(username); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
226 | tmsg->user_off = sizeof(struct type3_message) + strlen(domain); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
227 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
228 | tmsg->host_len1 = tmsg->host_len2 = strlen(hostname); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
229 | tmsg->host_off = sizeof(struct type3_message) + strlen(domain) + strlen(username); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
230 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
231 | tmsg->msg_len = sizeof(struct type3_message) + strlen(domain) + strlen(username) + strlen(hostname) + 0x18 + 0x18; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
232 | tmsg->flags = 0x8200; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
233 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
234 | tmp = ((char*) tmsg) + sizeof(struct type3_message); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
235 | strcpy(tmp, domain); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
236 | tmp += strlen(domain); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
237 | strcpy(tmp, username); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
238 | tmp += strlen(username); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
239 | strcpy(tmp, hostname); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
240 | tmp += strlen(hostname); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
241 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
242 | if (len > 14) len = 14; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
243 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
244 | for (idx=0; idx<len; idx++) |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
245 | lm_pw[idx] = g_ascii_toupper(passw[idx]); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
246 | for (; idx<14; idx++) |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
247 | lm_pw[idx] = 0; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
248 | |
|
11427
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
249 | setup_des_key((unsigned char*)lm_pw, (char*)key); |
|
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
250 | des_ecb_encrypt((char*)magic, (char*)lm_hpw, (char*)key); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
251 | |
|
11427
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
252 | setup_des_key((unsigned char*)(lm_pw+7), (char*)key); |
|
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
253 | des_ecb_encrypt((char*)magic, (char*)lm_hpw+8, (char*)key); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
254 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
255 | memset(lm_hpw+16, 0, 5); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
256 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
257 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
258 | lennt = strlen(passw); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
259 | for (idx=0; idx<lennt; idx++) |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
260 | { |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
261 | nt_pw[2*idx] = passw[idx]; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
262 | nt_pw[2*idx+1] = 0; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
263 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
264 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
265 | cipher = gaim_ciphers_find_cipher("md4"); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
266 | context = gaim_cipher_context_new(cipher, NULL); |
|
11427
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
267 | gaim_cipher_context_append(context, (guchar*)nt_pw, 2*lennt); |
|
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
268 | gaim_cipher_context_digest(context, 21, (guchar*)nt_hpw, NULL); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
269 | gaim_cipher_context_destroy(context); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
270 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
271 | memset(nt_hpw+16, 0, 5); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
272 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
273 | |
|
11427
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
274 | calc_resp(lm_hpw, (guchar*)nonce, lm_resp); |
|
a296ad5cbe7a
[gaim-migrate @ 13664]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11375
diff
changeset
|
275 | calc_resp(nt_hpw, (guchar*)nonce, nt_resp); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
276 | memcpy(tmp, lm_resp, 0x18); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
277 | memcpy(tmp+0x18, nt_resp, 0x18); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
278 | tmp = gaim_base64_encode((guchar*) tmsg, tmsg->msg_len); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
279 | g_free(tmsg); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
280 | return tmp; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
281 | } |