54 #define FSTRING_LEN 256
59 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43,
60 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54,
61 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4};
63 static const uchar perm2[48] = {14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,
64 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,
65 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,
66 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32};
69 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
70 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
71 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
72 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7};
74 static const uchar perm4[48] = {32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9,
75 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17,
76 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25,
77 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1};
79 static const uchar perm5[32] = {16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23,
80 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27,
81 3, 9, 19, 13, 30, 6, 22, 11, 4, 25};
84 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31,
85 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29,
86 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27,
87 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25};
89 static const uchar sc[16] = {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1};
92 {{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7},
93 {0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8},
94 {4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0},
95 {15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13}},
97 {{15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10},
98 {3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5},
99 {0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15},
100 {13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9}},
102 {{10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8},
103 {13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1},
104 {13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7},
105 {1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12}},
107 {{7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15},
108 {13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9},
109 {10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4},
110 {3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14}},
112 {{2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9},
113 {14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6},
114 {4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14},
115 {11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3}},
117 {{12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11},
118 {10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8},
119 {9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6},
120 {4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13}},
122 {{4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1},
123 {13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6},
124 {1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2},
125 {6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12}},
127 {{13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7},
128 {1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2},
129 {7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8},
130 {2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11}}};
136 for (i = 0; i < n; i++)
137 out[i] = in[p[i] - 1];
145 for (i = 0; i < n; i++)
146 out[i] = d[(i + count) % n];
147 for (i = 0; i < n; i++)
152 concat (
char *out,
char *in1,
char *in2,
int l1,
int l2)
160 static void xor(
char *out,
char *in1,
char *in2,
int n)
164 out[i] = in1[i] ^ in2[i];
167 static void dohash(
char *out,
char *in,
char *key,
int forw)
181 for (i = 0; i < 28; i++)
183 for (i = 0; i < 28; i++)
186 for (i = 0; i < 16; i++)
191 concat (cd, c, d, 28, 28);
197 for (j = 0; j < 32; j++)
203 for (i = 0; i < 16; i++)
214 xor(erk, er, ki[forw ? i : 15 - i], 48);
216 for (j = 0; j < 8; j++)
217 for (k = 0; k < 6; k++)
218 b[j][k] = erk[j * 6 + k];
220 for (j = 0; j < 8; j++)
223 m = (b[j][0] << 1) | b[j][5];
225 n = (b[j][1] << 3) | (b[j][2] << 2) | (b[j][3] << 1) | b[j][4];
227 for (k = 0; k < 4; k++)
228 b[j][k] = (
sbox[j][m][n] & (1 << (3 - k))) ? 1 : 0;
231 for (j = 0; j < 8; j++)
232 for (k = 0; k < 4; k++)
233 cb[j * 4 + k] = b[j][k];
238 for (j = 0; j < 32; j++)
241 for (j = 0; j < 32; j++)
245 concat (rl, r, l, 32, 32);
255 key[0] = str[0] >> 1;
256 key[1] = ((str[0] & 0x01) << 6) | (str[1] >> 2);
257 key[2] = ((str[1] & 0x03) << 5) | (str[2] >> 3);
258 key[3] = ((str[2] & 0x07) << 4) | (str[3] >> 4);
259 key[4] = ((str[3] & 0x0F) << 3) | (str[4] >> 5);
260 key[5] = ((str[4] & 0x1F) << 2) | (str[5] >> 6);
261 key[6] = ((str[5] & 0x3F) << 1) | (str[6] >> 7);
262 key[7] = str[6] & 0x7F;
263 for (i = 0; i < 8; i++)
265 key[i] = (key[i] << 1);
280 for (i = 0; i < 64; i++)
282 inb[i] = (in[i / 8] & (1 << (7 - (i % 8)))) ? 1 : 0;
283 keyb[i] = (key2[i / 8] & (1 << (7 - (i % 8)))) ? 1 : 0;
287 dohash (outb, inb, keyb, forw);
289 for (i = 0; i < 8; i++)
294 for (i = 0; i < 64; i++)
297 out[i / 8] |= (1 << (7 - (i % 8)));
304 uchar sp8[8] = {0x4b, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25};
306 smbhash (p16 + 8, sp8, p14 + 7, 1);
313 smbhash (p24 + 8, c8, p21 + 7, 1);
314 smbhash (p24 + 16, c8, p21 + 14, 1);
340 for (ind = 0; ind < 256; ind++)
342 hash[ind] = (
uchar) ind;
345 for (ind = 0; ind < 256; ind++)
349 j += (hash[ind] + key[ind % 16]);
355 for (ind = 0; ind <
len; ind++)
361 index_j += hash[index_i];
364 hash[index_i] = hash[index_j];
367 t = hash[index_i] + hash[index_j];
368 data[ind] = data[ind] ^ hash[t];
389 memcpy (p21, passwd, 16);
390 E_P24 (p21, c8, p24);
399 memset (p21,
'\0', 21);
400 memcpy (p21, lm_hash, 16);
410 memset (p21,
'\0', 21);
411 memcpy (p21, nt_hash, 16);
420 uchar partial_lm_hash[16];
422 memcpy (partial_lm_hash, lm_hash, 8);
423 memset (partial_lm_hash + 8, 0xbd, 8);
425 memcpy (sess_key, p24, 16);
445 dpass = g_utf8_strup (passwd, pass_len);
446 memcpy (dospwd, dpass, pass_len);
451 E_P16 ((
unsigned char *) dospwd, p16);
453 if (strlen (dospwd) > 14)
477 int address_list_len)
484 uchar client_chal[8];
485 uint8_t *response = g_malloc0 (28 + address_list_len);
487 int header = 0x00000101;
488 int zeros = 0x00000000;
493 SIVAL (response, 0, header);
494 SIVAL (response, 4, zeros);
495 memcpy (response + 4 + 4, long_date, 8);
496 memcpy (response + 4 + 4 +
sizeof (long_date), client_chal, 8);
497 SIVAL (response, 24, zeros);
498 for (i = 0; i < address_list_len; i++)
500 *(response + 28 + i) = *(addr_list + i);
508 const char *server_chal,
509 const char *address_list,
510 int address_list_len, uint8_t *nt_response)
512 uchar ntlmv2_response[16];
513 uint8_t *ntlmv2_client_data;
522 int client_data_len = 28 + address_list_len;
524 ntlmv2_client_data, client_data_len,
526 memcpy (nt_response, ntlmv2_response,
sizeof (ntlmv2_response));
527 memcpy (nt_response +
sizeof (ntlmv2_response), ntlmv2_client_data,
530 g_free (ntlmv2_client_data);
535 const char *server_chal, uint8_t *lm_response)
537 uchar lmv2_response[16];
538 uint8_t lmv2_client_data[8];
546 lmv2_client_data,
sizeof (lmv2_client_data),
548 memcpy (lm_response, lmv2_response,
sizeof (lmv2_response));
552 memcpy (lm_response +
sizeof (lmv2_response), lmv2_client_data,
553 sizeof (lmv2_client_data));
558 uchar ntlm_v2_hash[16],
const char *server_chal,
559 const char *address_list,
int address_list_len,
560 uint8_t *lm_response, uint8_t *nt_response,
561 uint8_t *user_session_key)
566 address_list_len, nt_response);