/* This is a generated file */ #ifndef __heimntlm_protos_h__ #define __heimntlm_protos_h__ #ifndef DOXY #include #ifdef __cplusplus extern "C" { #endif /** * Generates an NTLMv1 session random with assosited session master key. * * @param key the ntlm v1 key * @param len length of key * @param session generated session nonce, should be freed with heim_ntlm_free_buf(). * @param master calculated session master key, should be freed with heim_ntlm_free_buf(). * * @return In case of success 0 is return, an errors, a errno in what * went wrong. * * @ingroup ntlm_core */ int heim_ntlm_build_ntlm1_master ( void */*key*/, size_t /*len*/, struct ntlm_buf */*session*/, struct ntlm_buf */*master*/); /** * Generates an NTLMv2 session random with associated session master key. * * @param key the NTLMv2 key * @param len length of key * @param blob the NTLMv2 "blob" * @param session generated session nonce, should be freed with heim_ntlm_free_buf(). * @param master calculated session master key, should be freed with heim_ntlm_free_buf(). * * @return In case of success 0 is return, an errors, a errno in what * went wrong. * * @ingroup ntlm_core */ int heim_ntlm_build_ntlm2_master ( void */*key*/, size_t /*len*/, struct ntlm_buf */*blob*/, struct ntlm_buf */*session*/, struct ntlm_buf */*master*/); /** * Calculate LMv2 response * * @param key the ntlm key * @param len length of key * @param username name of the user, as sent in the message, assumed to be in UTF8. * @param target the name of the target, assumed to be in UTF8. * @param serverchallenge challenge as sent by the server in the type2 message. * @param ntlmv2 calculated session key * @param answer ntlm response answer, should be freed with heim_ntlm_free_buf(). * * @return In case of success 0 is return, an errors, a errno in what * went wrong. * * @ingroup ntlm_core */ int heim_ntlm_calculate_lm2 ( const void */*key*/, size_t /*len*/, const char */*username*/, const char */*target*/, const unsigned char serverchallenge[8], unsigned char ntlmv2[16], struct ntlm_buf */*answer*/); /** * Calculate NTLMv1 response hash * * @param key the ntlm v1 key * @param len length of key * @param challenge sent by the server * @param answer calculated answer, should be freed with heim_ntlm_free_buf(). * * @return In case of success 0 is return, an errors, a errno in what * went wrong. * * @ingroup ntlm_core */ int heim_ntlm_calculate_ntlm1 ( void */*key*/, size_t /*len*/, unsigned char challenge[8], struct ntlm_buf */*answer*/); /** * Calculate NTLMv2 response * * @param key the ntlm key * @param len length of key * @param username name of the user, as sent in the message, assumed to be in UTF8. * @param target the name of the target, assumed to be in UTF8. * @param serverchallenge challenge as sent by the server in the type2 message. * @param infotarget infotarget as sent by the server in the type2 message. * @param ntlmv2 calculated session key * @param answer ntlm response answer, should be freed with heim_ntlm_free_buf(). * * @return In case of success 0 is return, an errors, a errno in what * went wrong. * * @ingroup ntlm_core */ int heim_ntlm_calculate_ntlm2 ( const void */*key*/, size_t /*len*/, const char */*username*/, const char */*target*/, const unsigned char serverchallenge[8], const struct ntlm_buf */*infotarget*/, unsigned char ntlmv2[16], struct ntlm_buf */*answer*/); /** * Third check with empty domain. */ int heim_ntlm_calculate_ntlm2_sess ( const unsigned char clnt_nonce[8], const unsigned char svr_chal[8], const unsigned char ntlm_hash[16], struct ntlm_buf */*lm*/, struct ntlm_buf */*ntlm*/); int heim_ntlm_calculate_ntlm2_sess_hash ( const unsigned char clnt_nonce[8], const unsigned char svr_chal[8], unsigned char verifier[8]); /** * Decodes an NTLM targetinfo message * * @param data input data buffer with the encode NTLM targetinfo message * @param ucs2 if the strings should be encoded with ucs2 (selected by flag in message). * @param ti the decoded target info, should be freed with heim_ntlm_free_targetinfo(). * * @return In case of success 0 is return, an errors, a errno in what * went wrong. * * @ingroup ntlm_core */ int heim_ntlm_decode_targetinfo ( const struct ntlm_buf */*data*/, int /*ucs2*/, struct ntlm_targetinfo */*ti*/); int heim_ntlm_decode_type1 ( const struct ntlm_buf */*buf*/, struct ntlm_type1 */*data*/); int heim_ntlm_decode_type2 ( const struct ntlm_buf */*buf*/, struct ntlm_type2 */*type2*/); int heim_ntlm_decode_type3 ( const struct ntlm_buf */*buf*/, int /*ucs2*/, struct ntlm_type3 */*type3*/); void heim_ntlm_derive_ntlm2_sess ( const unsigned char sessionkey[16], const unsigned char */*clnt_nonce*/, size_t /*clnt_nonce_length*/, const unsigned char svr_chal[8], unsigned char derivedkey[16]); /** * Encodes a ntlm_targetinfo message. * * @param ti the ntlm_targetinfo message to encode. * @param ucs2 ignored * @param data is the return buffer with the encoded message, should be * freed with heim_ntlm_free_buf(). * * @return In case of success 0 is return, an errors, a errno in what * went wrong. * * @ingroup ntlm_core */ int heim_ntlm_encode_targetinfo ( const struct ntlm_targetinfo */*ti*/, int /*ucs2*/, struct ntlm_buf */*data*/); /** * Encodes an ntlm_type1 message. * * @param type1 the ntlm_type1 message to encode. * @param data is the return buffer with the encoded message, should be * freed with heim_ntlm_free_buf(). * * @return In case of success 0 is return, an errors, a errno in what * went wrong. * * @ingroup ntlm_core */ int heim_ntlm_encode_type1 ( const struct ntlm_type1 */*type1*/, struct ntlm_buf */*data*/); /** * Encodes an ntlm_type2 message. * * @param type2 the ntlm_type2 message to encode. * @param data is the return buffer with the encoded message, should be * freed with heim_ntlm_free_buf(). * * @return In case of success 0 is return, an errors, a errno in what * went wrong. * * @ingroup ntlm_core */ int heim_ntlm_encode_type2 ( const struct ntlm_type2 */*type2*/, struct ntlm_buf */*data*/); /** * Encodes an ntlm_type3 message. * * @param type3 the ntlm_type3 message to encode. * @param data is the return buffer with the encoded message, should be * @param[out] mic_offset offset of message integrity code * freed with heim_ntlm_free_buf(). * * @return In case of success 0 is return, an errors, a errno in what * went wrong. * * @ingroup ntlm_core */ int heim_ntlm_encode_type3 ( const struct ntlm_type3 */*type3*/, struct ntlm_buf */*data*/, size_t */*mic_offset*/); /** * heim_ntlm_free_buf frees the ntlm buffer * * @param p buffer to be freed * * @ingroup ntlm_core */ void heim_ntlm_free_buf (struct ntlm_buf */*p*/); /** * Frees the ntlm_targetinfo message * * @param ti targetinfo to be freed * * @ingroup ntlm_core */ void heim_ntlm_free_targetinfo (struct ntlm_targetinfo */*ti*/); /** * Frees the ntlm_type1 message * * @param data message to be freed * * @ingroup ntlm_core */ void heim_ntlm_free_type1 (struct ntlm_type1 */*data*/); /** * Frees the ntlm_type2 message * * @param data message to be freed * * @ingroup ntlm_core */ void heim_ntlm_free_type2 (struct ntlm_type2 */*data*/); /** * Frees the ntlm_type3 message * * @param data message to be freed * * @ingroup ntlm_core */ void heim_ntlm_free_type3 (struct ntlm_type3 */*data*/); /** * Given a key and encrypted session, unwrap the session key * * @param baseKey the sessionBaseKey * @param encryptedSession encrypted session, type3.session field. * @param session generated session nonce, should be freed with heim_ntlm_free_buf(). * * @return In case of success 0 is return, an errors, a errno in what * went wrong. * * @ingroup ntlm_core */ int heim_ntlm_keyex_unwrap ( struct ntlm_buf */*baseKey*/, struct ntlm_buf */*encryptedSession*/, struct ntlm_buf */*session*/); int heim_ntlm_keyex_wrap ( struct ntlm_buf */*base_session*/, struct ntlm_buf */*session*/, struct ntlm_buf */*encryptedSession*/); /** * Calculate the NTLM key, the password is assumed to be in UTF8. * * @param password password to calcute the key for. * @param key calcuted key, should be freed with heim_ntlm_free_buf(). * * @return In case of success 0 is return, an errors, a errno in what * went wrong. * * @ingroup ntlm_core */ int heim_ntlm_nt_key ( const char */*password*/, struct ntlm_buf */*key*/); /** * Generates an NTLMv2 session key. * * @param key the ntlm key * @param len length of key * @param username name of the user, as sent in the message, assumed to be in UTF8. * @param target the name of the target, assumed to be in UTF8. * @param upper_case_target upper case the target, should not be used only for legacy systems * @param ntlmv2 the ntlmv2 session key * * @return 0 on success, or an error code on failure. * * @ingroup ntlm_core */ int heim_ntlm_ntlmv2_key ( const void */*key*/, size_t /*len*/, const char */*username*/, const char */*target*/, int /*upper_case_target*/, unsigned char ntlmv2[16]); time_t heim_ntlm_ts2unixtime (uint64_t /*t*/); uint64_t heim_ntlm_unix2ts_time (time_t /*unix_time*/); /** @defgroup ntlm_core Heimdal NTLM library * * The NTLM core functions implement the string2key generation * function, message encode and decode function, and the hash function * functions. */ size_t heim_ntlm_unparse_flags ( uint32_t /*flags*/, char */*s*/, size_t /*len*/); int heim_ntlm_v1_base_session ( void */*key*/, size_t /*len*/, struct ntlm_buf */*session*/); int heim_ntlm_v2_base_session ( void */*key*/, size_t /*len*/, struct ntlm_buf */*ntlmResponse*/, struct ntlm_buf */*session*/); /** * Verify NTLMv2 response. * * @param key the ntlm key * @param len length of key * @param username name of the user, as sent in the message, assumed to be in UTF8. * @param target the name of the target, assumed to be in UTF8. * @param now the time now (0 if the library should pick it up itself) * @param serverchallenge challenge as sent by the server in the type2 message. * @param answer ntlm response answer, should be freed with heim_ntlm_free_buf(). * @param infotarget infotarget as sent by the server in the type2 message. * @param ntlmv2 calculated session key * * @return In case of success 0 is return, an errors, a errno in what * went wrong. * * @ingroup ntlm_core */ int heim_ntlm_verify_ntlm2 ( const void */*key*/, size_t /*len*/, const char */*username*/, const char */*target*/, time_t /*now*/, const unsigned char serverchallenge[8], const struct ntlm_buf */*answer*/, struct ntlm_buf */*infotarget*/, unsigned char ntlmv2[16]); #ifdef __cplusplus } #endif #endif /* DOXY */ #endif /* __heimntlm_protos_h__ */