Beispiel #1
0
 public byte[] Serialise()
 {
     byte[] result = new byte[32];
     NetworkByteOrderConverter.WriteUInt32(result, 0, _UnixTime);
     Array.Copy(_RandomBytes, 0, result, 4, 28);
     return(result);
 }
Beispiel #2
0
        public byte[] CalculateCookie(EndPoint remoteEndPoint, byte[] secret)
        {
            if (remoteEndPoint == null)
            {
                throw new ArgumentNullException(nameof(remoteEndPoint));
            }

            if (secret == null)
            {
                throw new ArgumentNullException(nameof(secret));
            }

            //Cookie = HMAC(Secret, Client-IP, Client-Parameters)
            //(version, random, session_id, cipher_suites,  compression_method)
            var result            = new byte[32];
            var socketAddress     = remoteEndPoint.Serialize();
            var socketAddressSize = socketAddress.Size;
            var message           = new byte[socketAddressSize + 34];

            for (var index = 0; index < socketAddressSize; index++)
            {
                message[0] = socketAddress[index];
            }
            NetworkByteOrderConverter.WriteUInt32(message, socketAddressSize, this.Random.UnixTime);
            Buffer.BlockCopy(this.Random.RandomBytes, 0, message, socketAddressSize + 4, 28);
            var hmac = new HMACSHA256(secret);
            var hash = hmac.ComputeHash(message);

            Buffer.BlockCopy(hash, 0, result, 0, 32);
            return(result);
        }
Beispiel #3
0
        public void Serialise(Stream stream)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            NetworkByteOrderConverter.WriteUInt32(stream, this.UnixTime);
            stream.Write(this.RandomBytes, 0, 28);
        }
        public void Serialise(Stream stream, Version version)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            NetworkByteOrderConverter.WriteUInt32(stream, this.LifetimeHint);

            if (this.Ticket == null)
            {
                NetworkByteOrderConverter.WriteUInt16(stream, 0);
            }
            else
            {
                NetworkByteOrderConverter.WriteUInt16(stream, this.Length);
                stream.Write(this.Ticket, 0, this.Ticket.Length);
            }
        }
Beispiel #5
0
        public byte[] CalculateCookie(EndPoint remoteEndPoint, byte[] secret)
        {
            //Cookie = HMAC(Secret, Client-IP, Client-Parameters)
            //(version, random, session_id, cipher_suites,  compression_method)
            byte[]        result            = new byte[32];
            SocketAddress socketAddress     = remoteEndPoint.Serialize();
            int           socketAddressSize = socketAddress.Size;

            byte[] message = new byte[socketAddressSize + 34];
            for (int index = 0; index < socketAddressSize; index++)
            {
                message[0] = socketAddress[index];
            }
            NetworkByteOrderConverter.WriteUInt32(message, socketAddressSize, _Random.UnixTime);
            Buffer.BlockCopy(_Random.RandomBytes, 0, message, socketAddressSize + 4, 28);
            System.Security.Cryptography.HMACSHA256 hmac = new System.Security.Cryptography.HMACSHA256(secret);
            byte[] hash = hmac.ComputeHash(message);
            Buffer.BlockCopy(hash, 0, result, 0, 32);
            return(result);
        }
Beispiel #6
0
 public void Serialise(System.IO.Stream stream)
 {
     NetworkByteOrderConverter.WriteUInt32(stream, _UnixTime);
     stream.Write(_RandomBytes, 0, 28);
 }