1/* This is a generated file */
2#ifndef __heimntlm_protos_h__
3#define __heimntlm_protos_h__
4#ifndef DOXY
5
6#include <stdarg.h>
7
8#ifdef __cplusplus
9extern "C" {
10#endif
11
12/**
13 * Generates an NTLMv1 session random with assosited session master key.
14 *
15 * @param key the ntlm v1 key
16 * @param len length of key
17 * @param session generated session nonce, should be freed with heim_ntlm_free_buf().
18 * @param master calculated session master key, should be freed with heim_ntlm_free_buf().
19 *
20 * @return In case of success 0 is return, an errors, a errno in what
21 * went wrong.
22 *
23 * @ingroup ntlm_core
24 */
25
26int
27heim_ntlm_build_ntlm1_master (
28	void */*key*/,
29	size_t /*len*/,
30	struct ntlm_buf */*session*/,
31	struct ntlm_buf */*master*/);
32
33/**
34 * Generates an NTLMv2 session random with associated session master key.
35 *
36 * @param key the NTLMv2 key
37 * @param len length of key
38 * @param blob the NTLMv2 "blob"
39 * @param session generated session nonce, should be freed with heim_ntlm_free_buf().
40 * @param master calculated session master key, should be freed with heim_ntlm_free_buf().
41 *
42 * @return In case of success 0 is return, an errors, a errno in what
43 * went wrong.
44 *
45 * @ingroup ntlm_core
46 */
47
48int
49heim_ntlm_build_ntlm2_master (
50	void */*key*/,
51	size_t /*len*/,
52	struct ntlm_buf */*blob*/,
53	struct ntlm_buf */*session*/,
54	struct ntlm_buf */*master*/);
55
56/**
57 * Calculate LMv2 response
58 *
59 * @param key the ntlm key
60 * @param len length of key
61 * @param username name of the user, as sent in the message, assumed to be in UTF8.
62 * @param target the name of the target, assumed to be in UTF8.
63 * @param serverchallenge challenge as sent by the server in the type2 message.
64 * @param ntlmv2 calculated session key
65 * @param answer ntlm response answer, should be freed with heim_ntlm_free_buf().
66 *
67 * @return In case of success 0 is return, an errors, a errno in what
68 * went wrong.
69 *
70 * @ingroup ntlm_core
71 */
72
73int
74heim_ntlm_calculate_lm2 (
75	const void */*key*/,
76	size_t /*len*/,
77	const char */*username*/,
78	const char */*target*/,
79	const unsigned char serverchallenge[8],
80	unsigned char ntlmv2[16],
81	struct ntlm_buf */*answer*/);
82
83/**
84 * Calculate NTLMv1 response hash
85 *
86 * @param key the ntlm v1 key
87 * @param len length of key
88 * @param challenge sent by the server
89 * @param answer calculated answer, should be freed with heim_ntlm_free_buf().
90 *
91 * @return In case of success 0 is return, an errors, a errno in what
92 * went wrong.
93 *
94 * @ingroup ntlm_core
95 */
96
97int
98heim_ntlm_calculate_ntlm1 (
99	void */*key*/,
100	size_t /*len*/,
101	unsigned char challenge[8],
102	struct ntlm_buf */*answer*/);
103
104/**
105 * Calculate NTLMv2 response
106 *
107 * @param key the ntlm key
108 * @param len length of key
109 * @param username name of the user, as sent in the message, assumed to be in UTF8.
110 * @param target the name of the target, assumed to be in UTF8.
111 * @param serverchallenge challenge as sent by the server in the type2 message.
112 * @param infotarget infotarget as sent by the server in the type2 message.
113 * @param ntlmv2 calculated session key
114 * @param answer ntlm response answer, should be freed with heim_ntlm_free_buf().
115 *
116 * @return In case of success 0 is return, an errors, a errno in what
117 * went wrong.
118 *
119 * @ingroup ntlm_core
120 */
121
122int
123heim_ntlm_calculate_ntlm2 (
124	const void */*key*/,
125	size_t /*len*/,
126	const char */*username*/,
127	const char */*target*/,
128	const unsigned char serverchallenge[8],
129	const struct ntlm_buf */*infotarget*/,
130	unsigned char ntlmv2[16],
131	struct ntlm_buf */*answer*/);
132
133/**
134     * Third check with empty domain.
135 */
136
137int
138heim_ntlm_calculate_ntlm2_sess (
139	const unsigned char clnt_nonce[8],
140	const unsigned char svr_chal[8],
141	const unsigned char ntlm_hash[16],
142	struct ntlm_buf */*lm*/,
143	struct ntlm_buf */*ntlm*/);
144
145int
146heim_ntlm_calculate_ntlm2_sess_hash (
147	const unsigned char clnt_nonce[8],
148	const unsigned char svr_chal[8],
149	unsigned char verifier[8]);
150
151/**
152 * Decodes an NTLM targetinfo message
153 *
154 * @param data input data buffer with the encode NTLM targetinfo message
155 * @param ucs2 if the strings should be encoded with ucs2 (selected by flag in message).
156 * @param ti the decoded target info, should be freed with heim_ntlm_free_targetinfo().
157 *
158 * @return In case of success 0 is return, an errors, a errno in what
159 * went wrong.
160 *
161 * @ingroup ntlm_core
162 */
163
164int
165heim_ntlm_decode_targetinfo (
166	const struct ntlm_buf */*data*/,
167	int /*ucs2*/,
168	struct ntlm_targetinfo */*ti*/);
169
170int
171heim_ntlm_decode_type1 (
172	const struct ntlm_buf */*buf*/,
173	struct ntlm_type1 */*data*/);
174
175int
176heim_ntlm_decode_type2 (
177	const struct ntlm_buf */*buf*/,
178	struct ntlm_type2 */*type2*/);
179
180int
181heim_ntlm_decode_type3 (
182	const struct ntlm_buf */*buf*/,
183	int /*ucs2*/,
184	struct ntlm_type3 */*type3*/);
185
186void
187heim_ntlm_derive_ntlm2_sess (
188	const unsigned char sessionkey[16],
189	const unsigned char */*clnt_nonce*/,
190	size_t /*clnt_nonce_length*/,
191	const unsigned char svr_chal[8],
192	unsigned char derivedkey[16]);
193
194/**
195 * Encodes a ntlm_targetinfo message.
196 *
197 * @param ti the ntlm_targetinfo message to encode.
198 * @param ucs2 ignored
199 * @param data is the return buffer with the encoded message, should be
200 * freed with heim_ntlm_free_buf().
201 *
202 * @return In case of success 0 is return, an errors, a errno in what
203 * went wrong.
204 *
205 * @ingroup ntlm_core
206 */
207
208int
209heim_ntlm_encode_targetinfo (
210	const struct ntlm_targetinfo */*ti*/,
211	int /*ucs2*/,
212	struct ntlm_buf */*data*/);
213
214/**
215 * Encodes an ntlm_type1 message.
216 *
217 * @param type1 the ntlm_type1 message to encode.
218 * @param data is the return buffer with the encoded message, should be
219 * freed with heim_ntlm_free_buf().
220 *
221 * @return In case of success 0 is return, an errors, a errno in what
222 * went wrong.
223 *
224 * @ingroup ntlm_core
225 */
226
227int
228heim_ntlm_encode_type1 (
229	const struct ntlm_type1 */*type1*/,
230	struct ntlm_buf */*data*/);
231
232/**
233 * Encodes an ntlm_type2 message.
234 *
235 * @param type2 the ntlm_type2 message to encode.
236 * @param data is the return buffer with the encoded message, should be
237 * freed with heim_ntlm_free_buf().
238 *
239 * @return In case of success 0 is return, an errors, a errno in what
240 * went wrong.
241 *
242 * @ingroup ntlm_core
243 */
244
245int
246heim_ntlm_encode_type2 (
247	const struct ntlm_type2 */*type2*/,
248	struct ntlm_buf */*data*/);
249
250/**
251 * Encodes an ntlm_type3 message.
252 *
253 * @param type3 the ntlm_type3 message to encode.
254 * @param data is the return buffer with the encoded message, should be
255 * @param[out] mic_offset offset of message integrity code
256 * freed with heim_ntlm_free_buf().
257 *
258 * @return In case of success 0 is return, an errors, a errno in what
259 * went wrong.
260 *
261 * @ingroup ntlm_core
262 */
263
264int
265heim_ntlm_encode_type3 (
266	const struct ntlm_type3 */*type3*/,
267	struct ntlm_buf */*data*/,
268	size_t */*mic_offset*/);
269
270/**
271 * heim_ntlm_free_buf frees the ntlm buffer
272 *
273 * @param p buffer to be freed
274 *
275 * @ingroup ntlm_core
276 */
277
278void
279heim_ntlm_free_buf (struct ntlm_buf */*p*/);
280
281/**
282 * Frees the ntlm_targetinfo message
283 *
284 * @param ti targetinfo to be freed
285 *
286 * @ingroup ntlm_core
287 */
288
289void
290heim_ntlm_free_targetinfo (struct ntlm_targetinfo */*ti*/);
291
292/**
293 * Frees the ntlm_type1 message
294 *
295 * @param data message to be freed
296 *
297 * @ingroup ntlm_core
298 */
299
300void
301heim_ntlm_free_type1 (struct ntlm_type1 */*data*/);
302
303/**
304 * Frees the ntlm_type2 message
305 *
306 * @param data message to be freed
307 *
308 * @ingroup ntlm_core
309 */
310
311void
312heim_ntlm_free_type2 (struct ntlm_type2 */*data*/);
313
314/**
315 * Frees the ntlm_type3 message
316 *
317 * @param data message to be freed
318 *
319 * @ingroup ntlm_core
320 */
321
322void
323heim_ntlm_free_type3 (struct ntlm_type3 */*data*/);
324
325/**
326 * Given a key and encrypted session, unwrap the session key
327 *
328 * @param baseKey the sessionBaseKey
329 * @param encryptedSession encrypted session, type3.session field.
330 * @param session generated session nonce, should be freed with heim_ntlm_free_buf().
331 *
332 * @return In case of success 0 is return, an errors, a errno in what
333 * went wrong.
334 *
335 * @ingroup ntlm_core
336 */
337
338int
339heim_ntlm_keyex_unwrap (
340	struct ntlm_buf */*baseKey*/,
341	struct ntlm_buf */*encryptedSession*/,
342	struct ntlm_buf */*session*/);
343
344int
345heim_ntlm_keyex_wrap (
346	struct ntlm_buf */*base_session*/,
347	struct ntlm_buf */*session*/,
348	struct ntlm_buf */*encryptedSession*/);
349
350/**
351 * Calculate the NTLM key, the password is assumed to be in UTF8.
352 *
353 * @param password password to calcute the key for.
354 * @param key calcuted key, should be freed with heim_ntlm_free_buf().
355 *
356 * @return In case of success 0 is return, an errors, a errno in what
357 * went wrong.
358 *
359 * @ingroup ntlm_core
360 */
361
362int
363heim_ntlm_nt_key (
364	const char */*password*/,
365	struct ntlm_buf */*key*/);
366
367/**
368 * Generates an NTLMv2 session key.
369 *
370 * @param key the ntlm key
371 * @param len length of key
372 * @param username name of the user, as sent in the message, assumed to be in UTF8.
373 * @param target the name of the target, assumed to be in UTF8.
374 * @param upper_case_target upper case the target, should not be used only for legacy systems
375 * @param ntlmv2 the ntlmv2 session key
376 *
377 * @return 0 on success, or an error code on failure.
378 *
379 * @ingroup ntlm_core
380 */
381
382int
383heim_ntlm_ntlmv2_key (
384	const void */*key*/,
385	size_t /*len*/,
386	const char */*username*/,
387	const char */*target*/,
388	int /*upper_case_target*/,
389	unsigned char ntlmv2[16]);
390
391time_t
392heim_ntlm_ts2unixtime (uint64_t /*t*/);
393
394uint64_t
395heim_ntlm_unix2ts_time (time_t /*unix_time*/);
396
397/**
398 @defgroup ntlm_core Heimdal NTLM library *
399 * The NTLM core functions implement the string2key generation
400 * function, message encode and decode function, and the hash function
401 * functions.
402 */
403
404size_t
405heim_ntlm_unparse_flags (
406	uint32_t /*flags*/,
407	char */*s*/,
408	size_t /*len*/);
409
410int
411heim_ntlm_v1_base_session (
412	void */*key*/,
413	size_t /*len*/,
414	struct ntlm_buf */*session*/);
415
416int
417heim_ntlm_v2_base_session (
418	void */*key*/,
419	size_t /*len*/,
420	struct ntlm_buf */*ntlmResponse*/,
421	struct ntlm_buf */*session*/);
422
423/**
424 * Verify NTLMv2 response.
425 *
426 * @param key the ntlm key
427 * @param len length of key
428 * @param username name of the user, as sent in the message, assumed to be in UTF8.
429 * @param target the name of the target, assumed to be in UTF8.
430 * @param now the time now (0 if the library should pick it up itself)
431 * @param serverchallenge challenge as sent by the server in the type2 message.
432 * @param answer ntlm response answer, should be freed with heim_ntlm_free_buf().
433 * @param infotarget infotarget as sent by the server in the type2 message.
434 * @param ntlmv2 calculated session key
435 *
436 * @return In case of success 0 is return, an errors, a errno in what
437 * went wrong.
438 *
439 * @ingroup ntlm_core
440 */
441
442int
443heim_ntlm_verify_ntlm2 (
444	const void */*key*/,
445	size_t /*len*/,
446	const char */*username*/,
447	const char */*target*/,
448	time_t /*now*/,
449	const unsigned char serverchallenge[8],
450	const struct ntlm_buf */*answer*/,
451	struct ntlm_buf */*infotarget*/,
452	unsigned char ntlmv2[16]);
453
454#ifdef __cplusplus
455}
456#endif
457
458#endif /* DOXY */
459#endif /* __heimntlm_protos_h__ */
460