1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- using Utilities;
- namespace SMBLibrary.Authentication
- {
-
-
-
- public class ChallengeMessage
- {
- public string Signature;
- public MessageTypeName MessageType;
- public string TargetName;
- public NegotiateFlags NegotiateFlags;
- public byte[] ServerChallenge;
-
- public byte[] TargetInfo;
- public Version Version;
- public ChallengeMessage()
- {
- Signature = AuthenticateMessage.ValidSignature;
- MessageType = MessageTypeName.Challenge;
- }
- public ChallengeMessage(byte[] buffer)
- {
- Signature = ByteReader.ReadAnsiString(buffer, 0, 8);
- MessageType = (MessageTypeName)LittleEndianConverter.ToUInt32(buffer, 8);
- TargetName = AuthenticationMessageUtils.ReadUnicodeStringBufferPointer(buffer, 12);
- NegotiateFlags = (NegotiateFlags)LittleEndianConverter.ToUInt32(buffer, 20);
- ServerChallenge = ByteReader.ReadBytes(buffer, 24, 8);
-
- TargetInfo = AuthenticationMessageUtils.ReadBufferPointer(buffer, 40);
- if ((NegotiateFlags & NegotiateFlags.Version) > 0)
- {
- Version = new Version(buffer, 48);
- }
- }
- public byte[] GetBytes()
- {
- int fixedLength = 48;
- if ((NegotiateFlags & NegotiateFlags.Version) > 0)
- {
- fixedLength += 8;
- }
- int payloadLength = TargetName.Length * 2 + TargetInfo.Length;
- byte[] buffer = new byte[fixedLength + payloadLength];
- ByteWriter.WriteAnsiString(buffer, 0, AuthenticateMessage.ValidSignature, 8);
- LittleEndianWriter.WriteUInt32(buffer, 8, (uint)MessageType);
- LittleEndianWriter.WriteUInt32(buffer, 20, (uint)NegotiateFlags);
- ByteWriter.WriteBytes(buffer, 24, ServerChallenge);
- if ((NegotiateFlags & NegotiateFlags.Version) > 0)
- {
- Version.WriteBytes(buffer, 48);
- }
- int offset = fixedLength;
- AuthenticationMessageUtils.WriteBufferPointer(buffer, 12, (ushort)(TargetName.Length * 2), (uint)offset);
- ByteWriter.WriteUTF16String(buffer, ref offset, TargetName);
- AuthenticationMessageUtils.WriteBufferPointer(buffer, 40, (ushort)TargetInfo.Length, (uint)offset);
- ByteWriter.WriteBytes(buffer, ref offset, TargetInfo);
- return buffer;
- }
- }
- }
|