public static ClientHello Deserialise(Stream stream) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } var result = new ClientHello { ClientVersion = new Version(255 - stream.ReadByte(), 255 - stream.ReadByte()), Random = RandomData.Deserialise(stream) }; var length = stream.ReadByte(); if (length > 0) { result.SessionID = new byte[length]; stream.Read(result.SessionID, 0, length); } length = stream.ReadByte(); if (length > 0) { result.Cookie = new byte[length]; stream.Read(result.Cookie, 0, length); } var cipherSuitesLength = (ushort)(NetworkByteOrderConverter.ToUInt16(stream) / 2); if (cipherSuitesLength > 0) { result.CipherSuites = new ushort[cipherSuitesLength]; for (uint index = 0; index < cipherSuitesLength; index++) { result.CipherSuites[index] = NetworkByteOrderConverter.ToUInt16(stream); } } length = stream.ReadByte(); if (length > 0) { result.CompressionMethods = new byte[length]; stream.Read(result.CompressionMethods, 0, length); } result.Extensions = Extensions.Deserialise(stream, true); return(result); }
public static ServerHello Deserialise(Stream stream) { ServerHello result = new ServerHello(); result._ServerVersion = new Version(255 - stream.ReadByte(), 255 - stream.ReadByte()); result._Random = RandomData.Deserialise(stream); int length = stream.ReadByte(); if (length > 0) { result._SessionID = new byte[length]; stream.Read(result._SessionID, 0, length); } result._CipherSuite = NetworkByteOrderConverter.ToUInt16(stream); result._CompressionMethod = (byte)stream.ReadByte(); result._Extensions = Extensions.Deserialise(stream, false); return(result); }
public static ClientHello Deserialise(Stream stream) { ClientHello result = new ClientHello { _ClientVersion = new Version(255 - stream.ReadByte(), 255 - stream.ReadByte()), _Random = RandomData.Deserialise(stream) }; int length = stream.ReadByte(); if (length > 0) { result._SessionID = new byte[length]; stream.Read(result._SessionID, 0, length); } length = stream.ReadByte(); if (length > 0) { result._Cookie = new byte[length]; stream.Read(result._Cookie, 0, length); } ushort cipherSuitesLength = (ushort)(NetworkByteOrderConverter.ToUInt16(stream) / 2); if (cipherSuitesLength > 0) { result._CipherSuites = new ushort[cipherSuitesLength]; for (uint index = 0; index < cipherSuitesLength; index++) { result._CipherSuites[index] = NetworkByteOrderConverter.ToUInt16(stream); } } length = stream.ReadByte(); if (length > 0) { result._CompressionMethods = new byte[length]; stream.Read(result._CompressionMethods, 0, length); } result._Extensions = Extensions.Deserialise(stream, true); return(result); }