From 2412c6be418d795b9a8c1becef94db0051326fd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Thu, 28 Dec 2006 14:38:07 +0000 Subject: [PATCH] (_gss_ntlm_set_key): set ntlm v2 keys. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19529 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/gssapi/ntlm/crypto.c | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/lib/gssapi/ntlm/crypto.c b/lib/gssapi/ntlm/crypto.c index e3a84097f..4816c181b 100644 --- a/lib/gssapi/ntlm/crypto.c +++ b/lib/gssapi/ntlm/crypto.c @@ -61,6 +61,57 @@ decode_le_uint32(const void *ptr, uint32_t *n) *n = (p[0] << 0) | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); } +/* + * + */ + +const char a2i_signmagic[] = + "session key to server-to-client signing key magic constant"; +const char a2i_sealmagic[] = + "session key to server-to-client sealing key magic constant"; +const char i2a_signmagic[] = + "session key to client-to-server signing key magic constant"; +const char i2a_sealmagic[] = + "session key to client-to-server sealing key magic constant"; + + +void +_gss_ntlm_set_key(struct ntlmv2_key *key, int acceptor, + unsigned char *data, size_t len) +{ + unsigned char out[16]; + MD5_CTX ctx; + const char *signmagic; + const char *sealmagic; + + if (acceptor) { + signmagic = a2i_signmagic; + sealmagic = a2i_sealmagic; + } else { + signmagic = i2a_signmagic; + sealmagic = i2a_sealmagic; + } + + key->seq = 0; + + MD5_Init(&ctx); + MD5_Update(&ctx, data, len); + MD5_Update(&ctx, signmagic, strlen(signmagic) + 1); + MD5_Final(key->signkey, &ctx); + + MD5_Init(&ctx); + MD5_Update(&ctx, data, len); + MD5_Update(&ctx, sealmagic, strlen(sealmagic) + 1); + MD5_Final(out, &ctx); + + RC4_set_key(&key->sealkey, 16, out); + key->signsealkey = &key->sealkey; +} + +/* + * + */ + static OM_uint32 v1_sign_message(gss_buffer_t in, RC4_KEY *signkey,