From b07e515ab969eba2044dd340645b2372cba5f179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Wed, 20 Jun 2007 04:08:53 +0000 Subject: [PATCH] Test heim_ntlm_calculate_ntlm2_sess_resp from Puneet Mehra. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21190 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/ntlm/ntlm.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/lib/ntlm/ntlm.c b/lib/ntlm/ntlm.c index 092db0813..df6b62ecb 100644 --- a/lib/ntlm/ntlm.c +++ b/lib/ntlm/ntlm.c @@ -1089,3 +1089,37 @@ out: krb5_storage_free(sp); return ret; } + + +/* + * Calculate the NTLM2 Session Response as per pg 24 of Davenport NTLM + * document http://davenport.sourceforge.net/ntlm.html + */ +int +heim_ntlm_calculate_ntlm2_sess_resp(const unsigned char clnt_nonce[8], + const unsigned char svr_chal[8], + const unsigned char ntlm_hash[16], + unsigned char lm_resp[24], + unsigned char ntlm2_sess_resp[24]) +{ + unsigned char ntlm2_sess_hash[MD5_DIGEST_LENGTH]; + unsigned char res[21]; + MD5_CTX md5; + + /* first setup the lm resp */ + memset(lm_resp, 0, 24); + memcpy(lm_resp, clnt_nonce, 8); + + MD5_Init(&md5); + MD5_Update(&md5, svr_chal, 8); /* session nonce part 1 */ + MD5_Update(&md5, clnt_nonce, 8); /* session nonce part 2 */ + MD5_Final(ntlm2_sess_hash, &md5); /* will only use first 8 bytes */ + + memset(res, 0, sizeof(res)); + memcpy(res, ntlm_hash, 16); + + splitandenc(&res[0], ntlm2_sess_hash, ntlm2_sess_resp + 0); + splitandenc(&res[7], ntlm2_sess_hash, ntlm2_sess_resp + 8); + splitandenc(&res[14], ntlm2_sess_hash, ntlm2_sess_resp + 16); + return 0; +}