1 |
|
|
2 |
/* |
/* |
3 |
Unix SMB/Netbios implementation. |
Unix SMB/Netbios implementation. |
4 |
Version 1.9. |
Version 1.9. |
23 |
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
24 |
*/ |
*/ |
25 |
|
|
|
|
|
26 |
/* NOTES: |
/* NOTES: |
27 |
|
|
28 |
This code makes no attempt to be fast! In fact, it is a very |
This code makes no attempt to be fast! In fact, it is a very |
45 |
up with a different answer to the one above) |
up with a different answer to the one above) |
46 |
*/ |
*/ |
47 |
|
|
48 |
|
static int perm1[56] = { 57, 49, 41, 33, 25, 17, 9, |
49 |
|
1, 58, 50, 42, 34, 26, 18, |
50 |
|
10, 2, 59, 51, 43, 35, 27, |
51 |
|
19, 11, 3, 60, 52, 44, 36, |
52 |
|
63, 55, 47, 39, 31, 23, 15, |
53 |
|
7, 62, 54, 46, 38, 30, 22, |
54 |
|
14, 6, 61, 53, 45, 37, 29, |
55 |
|
21, 13, 5, 28, 20, 12, 4 |
56 |
|
}; |
57 |
|
|
58 |
|
static int perm2[48] = { 14, 17, 11, 24, 1, 5, |
59 |
|
3, 28, 15, 6, 21, 10, |
60 |
|
23, 19, 12, 4, 26, 8, |
61 |
|
16, 7, 27, 20, 13, 2, |
62 |
|
41, 52, 31, 37, 47, 55, |
63 |
|
30, 40, 51, 45, 33, 48, |
64 |
|
44, 49, 39, 56, 34, 53, |
65 |
|
46, 42, 50, 36, 29, 32 |
66 |
|
}; |
67 |
|
|
68 |
|
static int perm3[64] = { 58, 50, 42, 34, 26, 18, 10, 2, |
69 |
|
60, 52, 44, 36, 28, 20, 12, 4, |
70 |
|
62, 54, 46, 38, 30, 22, 14, 6, |
71 |
|
64, 56, 48, 40, 32, 24, 16, 8, |
72 |
|
57, 49, 41, 33, 25, 17, 9, 1, |
73 |
|
59, 51, 43, 35, 27, 19, 11, 3, |
74 |
|
61, 53, 45, 37, 29, 21, 13, 5, |
75 |
|
63, 55, 47, 39, 31, 23, 15, 7 |
76 |
|
}; |
77 |
|
|
78 |
|
static int perm4[48] = { 32, 1, 2, 3, 4, 5, |
79 |
|
4, 5, 6, 7, 8, 9, |
80 |
|
8, 9, 10, 11, 12, 13, |
81 |
|
12, 13, 14, 15, 16, 17, |
82 |
|
16, 17, 18, 19, 20, 21, |
83 |
|
20, 21, 22, 23, 24, 25, |
84 |
|
24, 25, 26, 27, 28, 29, |
85 |
|
28, 29, 30, 31, 32, 1 |
86 |
|
}; |
87 |
|
|
88 |
|
static int perm5[32] = { 16, 7, 20, 21, |
89 |
|
29, 12, 28, 17, |
90 |
|
1, 15, 23, 26, |
91 |
|
5, 18, 31, 10, |
92 |
|
2, 8, 24, 14, |
93 |
|
32, 27, 3, 9, |
94 |
|
19, 13, 30, 6, |
95 |
|
22, 11, 4, 25 |
96 |
|
}; |
97 |
|
|
98 |
|
static int perm6[64] = { 40, 8, 48, 16, 56, 24, 64, 32, |
99 |
|
39, 7, 47, 15, 55, 23, 63, 31, |
100 |
|
38, 6, 46, 14, 54, 22, 62, 30, |
101 |
|
37, 5, 45, 13, 53, 21, 61, 29, |
102 |
|
36, 4, 44, 12, 52, 20, 60, 28, |
103 |
|
35, 3, 43, 11, 51, 19, 59, 27, |
104 |
|
34, 2, 42, 10, 50, 18, 58, 26, |
105 |
|
33, 1, 41, 9, 49, 17, 57, 25 |
106 |
|
}; |
107 |
|
|
108 |
|
static int sc[16] = { 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 }; |
|
static int perm1[56] = {57, 49, 41, 33, 25, 17, 9, |
|
|
1, 58, 50, 42, 34, 26, 18, |
|
|
10, 2, 59, 51, 43, 35, 27, |
|
|
19, 11, 3, 60, 52, 44, 36, |
|
|
63, 55, 47, 39, 31, 23, 15, |
|
|
7, 62, 54, 46, 38, 30, 22, |
|
|
14, 6, 61, 53, 45, 37, 29, |
|
|
21, 13, 5, 28, 20, 12, 4}; |
|
|
|
|
|
static int perm2[48] = {14, 17, 11, 24, 1, 5, |
|
|
3, 28, 15, 6, 21, 10, |
|
|
23, 19, 12, 4, 26, 8, |
|
|
16, 7, 27, 20, 13, 2, |
|
|
41, 52, 31, 37, 47, 55, |
|
|
30, 40, 51, 45, 33, 48, |
|
|
44, 49, 39, 56, 34, 53, |
|
|
46, 42, 50, 36, 29, 32}; |
|
|
|
|
|
static int perm3[64] = {58, 50, 42, 34, 26, 18, 10, 2, |
|
|
60, 52, 44, 36, 28, 20, 12, 4, |
|
|
62, 54, 46, 38, 30, 22, 14, 6, |
|
|
64, 56, 48, 40, 32, 24, 16, 8, |
|
|
57, 49, 41, 33, 25, 17, 9, 1, |
|
|
59, 51, 43, 35, 27, 19, 11, 3, |
|
|
61, 53, 45, 37, 29, 21, 13, 5, |
|
|
63, 55, 47, 39, 31, 23, 15, 7}; |
|
|
|
|
|
static int perm4[48] = { 32, 1, 2, 3, 4, 5, |
|
|
4, 5, 6, 7, 8, 9, |
|
|
8, 9, 10, 11, 12, 13, |
|
|
12, 13, 14, 15, 16, 17, |
|
|
16, 17, 18, 19, 20, 21, |
|
|
20, 21, 22, 23, 24, 25, |
|
|
24, 25, 26, 27, 28, 29, |
|
|
28, 29, 30, 31, 32, 1}; |
|
|
|
|
|
static int perm5[32] = { 16, 7, 20, 21, |
|
|
29, 12, 28, 17, |
|
|
1, 15, 23, 26, |
|
|
5, 18, 31, 10, |
|
|
2, 8, 24, 14, |
|
|
32, 27, 3, 9, |
|
|
19, 13, 30, 6, |
|
|
22, 11, 4, 25}; |
|
|
|
|
|
|
|
|
static int perm6[64] ={ 40, 8, 48, 16, 56, 24, 64, 32, |
|
|
39, 7, 47, 15, 55, 23, 63, 31, |
|
|
38, 6, 46, 14, 54, 22, 62, 30, |
|
|
37, 5, 45, 13, 53, 21, 61, 29, |
|
|
36, 4, 44, 12, 52, 20, 60, 28, |
|
|
35, 3, 43, 11, 51, 19, 59, 27, |
|
|
34, 2, 42, 10, 50, 18, 58, 26, |
|
|
33, 1, 41, 9, 49, 17, 57, 25}; |
|
|
|
|
|
|
|
|
static int sc[16] = {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1}; |
|
109 |
|
|
110 |
static int sbox[8][4][16] = { |
static int sbox[8][4][16] = { |
111 |
{{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7}, |
{{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7}, |
112 |
{0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8}, |
{0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8}, |
113 |
{4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0}, |
{4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0}, |
114 |
{15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13}}, |
{15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13}}, |
115 |
|
|
116 |
{{15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10}, |
{{15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10}, |
117 |
{3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5}, |
{3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5}, |
118 |
{0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15}, |
{0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15}, |
119 |
{13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9}}, |
{13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9}}, |
120 |
|
|
121 |
{{10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8}, |
{{10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8}, |
122 |
{13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1}, |
{13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1}, |
123 |
{13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7}, |
{13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7}, |
124 |
{1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12}}, |
{1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12}}, |
125 |
|
|
126 |
{{7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15}, |
{{7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15}, |
127 |
{13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9}, |
{13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9}, |
128 |
{10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4}, |
{10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4}, |
129 |
{3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14}}, |
{3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14}}, |
130 |
|
|
131 |
{{2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9}, |
{{2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9}, |
132 |
{14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6}, |
{14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6}, |
133 |
{4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14}, |
{4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14}, |
134 |
{11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3}}, |
{11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3}}, |
135 |
|
|
136 |
{{12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11}, |
{{12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11}, |
137 |
{10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8}, |
{10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8}, |
138 |
{9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6}, |
{9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6}, |
139 |
{4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13}}, |
{4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13}}, |
140 |
|
|
141 |
{{4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1}, |
{{4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1}, |
142 |
{13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6}, |
{13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6}, |
143 |
{1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2}, |
{1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2}, |
144 |
{6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12}}, |
{6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12}}, |
145 |
|
|
146 |
{{13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7}, |
{{13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7}, |
147 |
{1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2}, |
{1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2}, |
148 |
{7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8}, |
{7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8}, |
149 |
{2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11}}}; |
{2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11}} |
150 |
|
}; |
151 |
static void permute(char *out, char *in, int *p, int n) |
|
152 |
|
static void permute(char *out, |
153 |
|
char *in, |
154 |
|
int *p, |
155 |
|
int n) |
156 |
{ |
{ |
157 |
int i; |
int i; |
158 |
for (i=0;i<n;i++) |
|
159 |
out[i] = in[p[i]-1]; |
for (i = 0; i < n; i++) |
160 |
|
out[i] = in[p[i] - 1]; |
161 |
} |
} |
162 |
|
|
163 |
static void lshift(char *d, int count, int n) |
static void lshift(char *d, |
164 |
|
int count, |
165 |
|
int n) |
166 |
{ |
{ |
167 |
char out[64]; |
char out[64]; |
168 |
int i; |
int i; |
169 |
for (i=0;i<n;i++) |
|
170 |
out[i] = d[(i+count)%n]; |
for (i = 0; i < n; i++) |
171 |
for (i=0;i<n;i++) |
out[i] = d[(i + count) % n]; |
172 |
|
for (i = 0; i < n; i++) |
173 |
d[i] = out[i]; |
d[i] = out[i]; |
174 |
} |
} |
175 |
|
|
176 |
static void concat(char *out, char *in1, char *in2, int l1, int l2) |
static void concat(char *out, |
177 |
|
char *in1, |
178 |
|
char *in2, |
179 |
|
int l1, |
180 |
|
int l2) |
181 |
{ |
{ |
182 |
while (l1--) |
while (l1--) |
183 |
*out++ = *in1++; |
*out++ = *in1++; |
185 |
*out++ = *in2++; |
*out++ = *in2++; |
186 |
} |
} |
187 |
|
|
188 |
static void xor(char *out, char *in1, char *in2, int n) |
static void xor(char *out, |
189 |
|
char *in1, |
190 |
|
char *in2, |
191 |
|
int n) |
192 |
{ |
{ |
193 |
int i; |
int i; |
194 |
for (i=0;i<n;i++) |
|
195 |
|
for (i = 0; i < n; i++) |
196 |
out[i] = in1[i] ^ in2[i]; |
out[i] = in1[i] ^ in2[i]; |
197 |
} |
} |
198 |
|
|
199 |
static void dohash(char *out, char *in, char *key) |
static void dohash(char *out, |
200 |
|
char *in, |
201 |
|
char *key) |
202 |
{ |
{ |
203 |
int i, j, k; |
int i, j, k; |
204 |
char pk1[56]; |
char pk1[56]; |
212 |
|
|
213 |
permute(pk1, key, perm1, 56); |
permute(pk1, key, perm1, 56); |
214 |
|
|
215 |
for (i=0;i<28;i++) |
for (i = 0; i < 28; i++) |
216 |
c[i] = pk1[i]; |
c[i] = pk1[i]; |
217 |
for (i=0;i<28;i++) |
for (i = 0; i < 28; i++) |
218 |
d[i] = pk1[i+28]; |
d[i] = pk1[i + 28]; |
219 |
|
|
220 |
for (i=0;i<16;i++) { |
for (i = 0; i < 16; i++) |
221 |
|
{ |
222 |
lshift(c, sc[i], 28); |
lshift(c, sc[i], 28); |
223 |
lshift(d, sc[i], 28); |
lshift(d, sc[i], 28); |
224 |
|
|
225 |
concat(cd, c, d, 28, 28); |
concat(cd, c, d, 28, 28); |
226 |
permute(ki[i], cd, perm2, 48); |
permute(ki[i], cd, perm2, 48); |
227 |
} |
} |
228 |
|
|
229 |
permute(pd1, in, perm3, 64); |
permute(pd1, in, perm3, 64); |
230 |
|
|
231 |
for (j=0;j<32;j++) { |
for (j = 0; j < 32; j++) |
232 |
|
{ |
233 |
l[j] = pd1[j]; |
l[j] = pd1[j]; |
234 |
r[j] = pd1[j+32]; |
r[j] = pd1[j + 32]; |
235 |
} |
} |
236 |
|
|
237 |
for (i=0;i<16;i++) { |
for (i = 0; i < 16; i++) |
238 |
|
{ |
239 |
char er[48]; |
char er[48]; |
240 |
char erk[48]; |
char erk[48]; |
241 |
char b[8][6]; |
char b[8][6]; |
247 |
|
|
248 |
xor(erk, er, ki[i], 48); |
xor(erk, er, ki[i], 48); |
249 |
|
|
250 |
for (j=0;j<8;j++) |
for (j = 0; j < 8; j++) |
251 |
for (k=0;k<6;k++) |
for (k = 0; k < 6; k++) |
252 |
b[j][k] = erk[j*6 + k]; |
b[j][k] = erk[j * 6 + k]; |
253 |
|
|
254 |
for (j=0;j<8;j++) { |
for (j = 0; j < 8; j++) |
255 |
|
{ |
256 |
int m, n; |
int m, n; |
|
m = (b[j][0]<<1) | b[j][5]; |
|
257 |
|
|
258 |
n = (b[j][1]<<3) | (b[j][2]<<2) | (b[j][3]<<1) | b[j][4]; |
m = (b[j][0] << 1) | b[j][5]; |
259 |
|
|
260 |
|
n = (b[j][1] << 3) | (b[j][2] << 2) | (b[j][3] << 1) | b[j][4]; |
261 |
|
|
262 |
for (k=0;k<4;k++) |
for (k = 0; k < 4; k++) |
263 |
b[j][k] = (sbox[j][m][n] & (1<<(3-k)))?1:0; |
b[j][k] = (sbox[j][m][n] & (1 << (3 - k))) ? 1 : 0; |
264 |
} |
} |
265 |
|
|
266 |
for (j=0;j<8;j++) |
for (j = 0; j < 8; j++) |
267 |
for (k=0;k<4;k++) |
for (k = 0; k < 4; k++) |
268 |
cb[j*4+k] = b[j][k]; |
cb[j * 4 + k] = b[j][k]; |
269 |
permute(pcb, cb, perm5, 32); |
permute(pcb, cb, perm5, 32); |
270 |
|
|
271 |
xor(r2, l, pcb, 32); |
xor(r2, l, pcb, 32); |
272 |
|
|
273 |
for (j=0;j<32;j++) |
for (j = 0; j < 32; j++) |
274 |
l[j] = r[j]; |
l[j] = r[j]; |
275 |
|
|
276 |
for (j=0;j<32;j++) |
for (j = 0; j < 32; j++) |
277 |
r[j] = r2[j]; |
r[j] = r2[j]; |
278 |
} |
} |
279 |
|
|
282 |
permute(out, rl, perm6, 64); |
permute(out, rl, perm6, 64); |
283 |
} |
} |
284 |
|
|
285 |
static void str_to_key(unsigned char *str,unsigned char *key) |
static void str_to_key(unsigned char *str, |
286 |
|
unsigned char *key) |
287 |
{ |
{ |
288 |
int i; |
int i; |
289 |
|
|
290 |
key[0] = str[0]>>1; |
key[0] = str[0] >> 1; |
291 |
key[1] = ((str[0]&0x01)<<6) | (str[1]>>2); |
key[1] = ((str[0] & 0x01) << 6) | (str[1] >> 2); |
292 |
key[2] = ((str[1]&0x03)<<5) | (str[2]>>3); |
key[2] = ((str[1] & 0x03) << 5) | (str[2] >> 3); |
293 |
key[3] = ((str[2]&0x07)<<4) | (str[3]>>4); |
key[3] = ((str[2] & 0x07) << 4) | (str[3] >> 4); |
294 |
key[4] = ((str[3]&0x0F)<<3) | (str[4]>>5); |
key[4] = ((str[3] & 0x0F) << 3) | (str[4] >> 5); |
295 |
key[5] = ((str[4]&0x1F)<<2) | (str[5]>>6); |
key[5] = ((str[4] & 0x1F) << 2) | (str[5] >> 6); |
296 |
key[6] = ((str[5]&0x3F)<<1) | (str[6]>>7); |
key[6] = ((str[5] & 0x3F) << 1) | (str[6] >> 7); |
297 |
key[7] = str[6]&0x7F; |
key[7] = str[6] & 0x7F; |
298 |
for (i=0;i<8;i++) { |
for (i = 0; i < 8; i++) |
299 |
key[i] = (key[i]<<1); |
{ |
300 |
|
key[i] = (key[i] << 1); |
301 |
} |
} |
302 |
} |
} |
303 |
|
|
304 |
|
static void smbhash(unsigned char *out, |
305 |
static void smbhash(unsigned char *out, unsigned char *in, unsigned char *key) |
unsigned char *in, |
306 |
|
unsigned char *key) |
307 |
{ |
{ |
308 |
int i; |
int i; |
309 |
char outb[64]; |
char outb[64]; |
313 |
|
|
314 |
str_to_key(key, key2); |
str_to_key(key, key2); |
315 |
|
|
316 |
for (i=0;i<64;i++) { |
for (i = 0; i < 64; i++) |
317 |
inb[i] = (in[i/8] & (1<<(7-(i%8)))) ? 1 : 0; |
{ |
318 |
keyb[i] = (key2[i/8] & (1<<(7-(i%8)))) ? 1 : 0; |
inb[i] = (in[i / 8] & (1 << (7 - (i % 8)))) ? 1 : 0; |
319 |
|
keyb[i] = (key2[i / 8] & (1 << (7 - (i % 8)))) ? 1 : 0; |
320 |
outb[i] = 0; |
outb[i] = 0; |
321 |
} |
} |
322 |
|
|
323 |
dohash(outb, inb, keyb); |
dohash(outb, inb, keyb); |
324 |
|
|
325 |
for (i=0;i<8;i++) { |
for (i = 0; i < 8; i++) |
326 |
|
{ |
327 |
out[i] = 0; |
out[i] = 0; |
328 |
} |
} |
329 |
|
|
330 |
for (i=0;i<64;i++) { |
for (i = 0; i < 64; i++) |
331 |
|
{ |
332 |
if (outb[i]) |
if (outb[i]) |
333 |
out[i/8] |= (1<<(7-(i%8))); |
out[i / 8] |= (1 << (7 - (i % 8))); |
334 |
} |
} |
335 |
} |
} |
336 |
|
|
337 |
void E_P16(unsigned char *p14,unsigned char *p16) |
void E_P16(unsigned char *p14, |
338 |
|
unsigned char *p16) |
339 |
{ |
{ |
340 |
unsigned char sp8[8] = {0x4b, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25}; |
unsigned char sp8[8] = { 0x4b, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 }; |
341 |
|
|
342 |
smbhash(p16, sp8, p14); |
smbhash(p16, sp8, p14); |
343 |
smbhash(p16+8, sp8, p14+7); |
smbhash(p16 + 8, sp8, p14 + 7); |
344 |
} |
} |
345 |
|
|
346 |
void E_P24(unsigned char *p21, unsigned char *c8, unsigned char *p24) |
void E_P24(unsigned char *p21, |
347 |
|
unsigned char *c8, |
348 |
|
unsigned char *p24) |
349 |
{ |
{ |
350 |
smbhash(p24, c8, p21); |
smbhash(p24, c8, p21); |
351 |
smbhash(p24+8, c8, p21+7); |
smbhash(p24 + 8, c8, p21 + 7); |
352 |
smbhash(p24+16, c8, p21+14); |
smbhash(p24 + 16, c8, p21 + 14); |
353 |
} |
} |
354 |
|
|
355 |
void cred_hash1(unsigned char *out,unsigned char *in,unsigned char *key) |
void cred_hash1(unsigned char *out, |
356 |
|
unsigned char *in, |
357 |
|
unsigned char *key) |
358 |
{ |
{ |
359 |
unsigned char buf[8]; |
unsigned char buf[8]; |
360 |
|
|
361 |
smbhash(buf, in, key); |
smbhash(buf, in, key); |
362 |
smbhash(out, buf, key+9); |
smbhash(out, buf, key + 9); |
363 |
} |
} |
364 |
|
|
365 |
void cred_hash2(unsigned char *out,unsigned char *in,unsigned char *key) |
void cred_hash2(unsigned char *out, |
366 |
|
unsigned char *in, |
367 |
|
unsigned char *key) |
368 |
{ |
{ |
369 |
unsigned char buf[8]; |
unsigned char buf[8]; |
370 |
static unsigned char key2[8]; |
static unsigned char key2[8]; |
373 |
key2[0] = key[7]; |
key2[0] = key[7]; |
374 |
smbhash(out, buf, key2); |
smbhash(out, buf, key2); |
375 |
} |
} |
|
|
|