public byte[] Serialise() { byte[] result = new byte[32]; NetworkByteOrderConverter.WriteUInt32(result, 0, _UnixTime); Array.Copy(_RandomBytes, 0, result, 4, 28); return(result); }
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); }
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); } }
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); }
public void Serialise(System.IO.Stream stream) { NetworkByteOrderConverter.WriteUInt32(stream, _UnixTime); stream.Write(_RandomBytes, 0, 28); }