From 0c26dd0cf567a952443878bbac5b6499c8d1e769 Mon Sep 17 00:00:00 2001 From: =?utf8?q?G=C3=BCnther=20Deschner?= Date: Fri, 18 Jul 2008 20:42:55 +0200 Subject: [PATCH] rpc_client: add init_samr_CryptPasswordEx and init_samr_CryptPassword. Guenther (cherry picked from commit 599155842583781736933ef340e37fd5c87f88ca) --- source/rpc_client/init_samr.c | 46 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/source/rpc_client/init_samr.c b/source/rpc_client/init_samr.c index c5d7dcdb132..2e757531ce3 100644 --- a/source/rpc_client/init_samr.c +++ b/source/rpc_client/init_samr.c @@ -460,3 +460,49 @@ void init_samr_user_info24(struct samr_UserInfo24 *r, memcpy(r->password.data, data, sizeof(r->password.data)); r->pw_len = pw_len; } + +/************************************************************************* + inits a samr_CryptPasswordEx structure + *************************************************************************/ + +void init_samr_CryptPasswordEx(const char *pwd, + DATA_BLOB *session_key, + struct samr_CryptPasswordEx *pwd_buf) +{ + /* samr_CryptPasswordEx */ + + uchar pwbuf[532]; + struct MD5Context md5_ctx; + uint8_t confounder[16]; + DATA_BLOB confounded_session_key = data_blob(NULL, 16); + + encode_pw_buffer(pwbuf, pwd, STR_UNICODE); + + generate_random_buffer((uint8_t *)confounder, 16); + + MD5Init(&md5_ctx); + MD5Update(&md5_ctx, confounder, 16); + MD5Update(&md5_ctx, session_key->data, + session_key->length); + MD5Final(confounded_session_key.data, &md5_ctx); + + SamOEMhashBlob(pwbuf, 516, &confounded_session_key); + memcpy(&pwbuf[516], confounder, 16); + + memcpy(pwd_buf->data, pwbuf, sizeof(pwbuf)); + data_blob_free(&confounded_session_key); +} + +/************************************************************************* + inits a samr_CryptPassword structure + *************************************************************************/ + +void init_samr_CryptPassword(const char *pwd, + DATA_BLOB *session_key, + struct samr_CryptPassword *pwd_buf) +{ + /* samr_CryptPassword */ + + encode_pw_buffer(pwd_buf->data, pwd, STR_UNICODE); + SamOEMhashBlob(pwd_buf->data, 516, session_key); +} -- 2.11.4.GIT