diff --git a/SMBLibrary/Authentication/NTLM/Helpers/NTLMCryptography.cs b/SMBLibrary/Authentication/NTLM/Helpers/NTLMCryptography.cs index 2516d28..ec7c8c8 100644 --- a/SMBLibrary/Authentication/NTLM/Helpers/NTLMCryptography.cs +++ b/SMBLibrary/Authentication/NTLM/Helpers/NTLMCryptography.cs @@ -60,22 +60,6 @@ namespace SMBLibrary.Authentication.NTLM return _NTProof; } - /// - /// Caller must verify that the authenticate message has MIC before calling this method - /// - public static bool ValidateAuthenticateMessageMIC(byte[] exportedSessionKey, byte[] negotiateMessageBytes, byte[] challengeMessageBytes, byte[] authenticateMessageBytes) - { - // https://msdn.microsoft.com/en-us/library/cc236695.aspx - int micFieldOffset = AuthenticateMessage.GetMicFieldOffset(authenticateMessageBytes); - byte[] expectedMic = ByteReader.ReadBytes(authenticateMessageBytes, micFieldOffset, AuthenticateMessage.MicFieldLenght); - - ByteWriter.WriteBytes(authenticateMessageBytes, micFieldOffset, new byte[AuthenticateMessage.MicFieldLenght]); - byte[] temp = ByteUtils.Concatenate(ByteUtils.Concatenate(negotiateMessageBytes, challengeMessageBytes), authenticateMessageBytes); - byte[] mic = new HMACMD5(exportedSessionKey).ComputeHash(temp); - - return ByteUtils.AreByteArraysEqual(mic, expectedMic); - } - public static byte[] DesEncrypt(byte[] key, byte[] plainText) { return DesEncrypt(key, plainText, 0, plainText.Length); @@ -273,5 +257,21 @@ namespace SMBLibrary.Authentication.NTLM return keyExchangeKey; } } + + /// + /// Caller must verify that the authenticate message has MIC before calling this method + /// + public static bool ValidateAuthenticateMessageMIC(byte[] exportedSessionKey, byte[] negotiateMessageBytes, byte[] challengeMessageBytes, byte[] authenticateMessageBytes) + { + // https://msdn.microsoft.com/en-us/library/cc236695.aspx + int micFieldOffset = AuthenticateMessage.GetMicFieldOffset(authenticateMessageBytes); + byte[] expectedMic = ByteReader.ReadBytes(authenticateMessageBytes, micFieldOffset, AuthenticateMessage.MicFieldLenght); + + ByteWriter.WriteBytes(authenticateMessageBytes, micFieldOffset, new byte[AuthenticateMessage.MicFieldLenght]); + byte[] temp = ByteUtils.Concatenate(ByteUtils.Concatenate(negotiateMessageBytes, challengeMessageBytes), authenticateMessageBytes); + byte[] mic = new HMACMD5(exportedSessionKey).ComputeHash(temp); + + return ByteUtils.AreByteArraysEqual(mic, expectedMic); + } } }