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