Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }