From e83e5a5b29ec9cb3b46792a847056b8aead55a8b Mon Sep 17 00:00:00 2001 From: Conor Hunt Date: Mon, 21 Jan 2013 12:48:44 -0500 Subject: [PATCH] reinitialize rc4 cipher for each request --- src/ntlm/ntlmv2.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ntlm/ntlmv2.go b/src/ntlm/ntlmv2.go index 906e340..c25dde3 100644 --- a/src/ntlm/ntlmv2.go +++ b/src/ntlm/ntlmv2.go @@ -77,6 +77,10 @@ func (n *V2Session) Mac(message []byte, sequenceNumber int) ([]byte, error) { // TODO: Need to keep track of the sequence number for connection oriented NTLM if messages.NTLMSSP_NEGOTIATE_DATAGRAM.IsSet(n.negotiateFlags) && messages.NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY.IsSet(n.negotiateFlags) { n.serverHandle, _ = reinitSealingKey(n.serverSealingKey, sequenceNumber) + } else { + // CONOR: Reinitializing the rc4 cipher on every requst, but not using the + // algorithm as described in the MS-NTLM document. Just reinitialize it + n.serverHandle, _ = rc4Init(n.serverSealingKey) } sig := mac(n.negotiateFlags, n.serverHandle, n.serverSigningKey, uint32(sequenceNumber), message) return sig.Bytes(), nil