ntlm-encrypt.c revision 7d85c4e4e727a48ba7f6d6e6522de8338240ad74
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen * NTLM and NTLMv2 hash generation.
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen * Copyright (c) 2004 Andrey Panin <pazke@donpac.ru>
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen * This library is free software; you can redistribute it and/or modify
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen * it under the terms of the GNU Lesser General Public License as published
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen * by the Free Software Foundation; either version 2 of the License, or
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen * (at your option) any later version.
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainenstatic unsigned char *
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainent_unicode_str(const char *src, int ucase, size_t *size)
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen wstr = buffer_create_dynamic(unsafe_data_stack_pool, 32, (size_t)-1);
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen buffer_append_c(wstr, ucase ? i_toupper(*src) : *src);
d43c646d4b84635aa795946555be04a553d5413aTimo Sirainenconst unsigned char *
d43c646d4b84635aa795946555be04a553d5413aTimo Sirainenlm_hash(const char *passwd, unsigned char hash[LM_HASH_SIZE])
d43c646d4b84635aa795946555be04a553d5413aTimo Sirainen static const unsigned char lm_magic[8] = "KGS!@#$%";
d43c646d4b84635aa795946555be04a553d5413aTimo Sirainen unsigned int i;
d43c646d4b84635aa795946555be04a553d5413aTimo Sirainen for (i = 0; i < sizeof(buffer); i++)
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainenconst unsigned char *
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainenntlm_v1_hash(const char *passwd, unsigned char hash[NTLMSSP_HASH_SIZE])
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainenhmac_md5_ucs2le_string_ucase(struct hmac_md5_context *ctx, const char *str)
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen unsigned char *wstr = t_unicode_str(str, 1, &len);
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainenntlm_v2_hash(const char *user, const char *target,
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen const unsigned char *hash_v1,
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen hmac_md5_init(&ctx, hash_v1, NTLMSSP_HASH_SIZE);
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen const unsigned char *challenge,
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen unsigned char response[NTLMSSP_RESPONSE_SIZE])
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen unsigned char des_hash[NTLMSSP_DES_KEY_LENGTH * 3];
7d85c4e4e727a48ba7f6d6e6522de8338240ad74Timo Sirainen deshash(response + 8, des_hash + 7, challenge);
7d85c4e4e727a48ba7f6d6e6522de8338240ad74Timo Sirainen deshash(response + 16, des_hash + 14, challenge);
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainenntlmssp_v2_response(const char *user, const char *target,
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen const unsigned char *hash_v1,
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen const unsigned char *challenge,
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen unsigned char response[NTLMSSP_V2_RESPONSE_SIZE])
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen hmac_md5_init(&ctx, hash, NTLMSSP_V2_HASH_SIZE);