public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteUInt8((byte)BeatmapDifficultyMask);
     buffer.WriteUInt16((ushort)GameplayModifiersMask);
     buffer.WriteUInt64(SongPackBloomFilterTop);
     buffer.WriteUInt64(SongPackBloomFilterBottom);
 }
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteUInt8((byte)Platform);
     buffer.WriteString(UserId);
     buffer.WriteString(UserName);
     buffer.WriteVarBytes(SessionToken);
 }
Ejemplo n.º 3
0
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteString(UserId);
     buffer.WriteString(UserName);
     buffer.WriteString(Secret);
     buffer.WriteVarUInt(CurrentPlayerCount);
 }
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteVarUInt((uint)Certificates.Count);
     foreach (var certificate in Certificates)
     {
         buffer.WriteVarBytes(certificate);
     }
 }
Ejemplo n.º 5
0
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteUInt32(MultipartMessageId);
     buffer.WriteVarUInt(Offset);
     buffer.WriteVarUInt(Length);
     buffer.WriteVarUInt(TotalLength);
     buffer.WriteBytes(Data);
 }
Ejemplo n.º 6
0
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteString(UserId);
     buffer.WriteString(UserName);
     buffer.WriteIPEndPoint(RemoteEndPoint);
     buffer.WriteBytes(Random);
     buffer.WriteVarBytes(PublicKey);
     buffer.WriteUInt8((byte)((IsConnectionOwner ? 1 : 0) | (IsDedicatedServer ? 2 : 0)));
 }
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteString(UserId);
     buffer.WriteString(UserName);
     buffer.WriteBytes(Random);
     buffer.WriteVarBytes(PublicKey);
     Configuration.WriteTo(ref buffer);
     buffer.WriteString(Secret);
 }
        /// <inheritdoc cref="IEncryptedMessageWriter.WriteTo"/>
        public void WriteTo <T>(ref GrowingSpanBuffer buffer, T message, byte[] key, HMAC hmac)
            where T : class, IMessage
        {
            if (message is not IEncryptedMessage)
            {
                throw new Exception($"Message of type '{typeof(T).Name}' cannot be encrypted.");
            }

            var unencryptedBuffer = new GrowingSpanBuffer(stackalloc byte[412]);

            _messageWriter.WriteTo(ref unencryptedBuffer, message);

            var hashBuffer = new GrowingSpanBuffer(stackalloc byte[unencryptedBuffer.Size + 4]);

            hashBuffer.WriteBytes(unencryptedBuffer.Data);
            hashBuffer.WriteUInt32(((IEncryptedMessage)message).SequenceId);
            Span <byte> hash = stackalloc byte[32];

            if (!hmac.TryComputeHash(hashBuffer.Data, hash, out _))
            {
                throw new Exception("Failed to compute message hash.");
            }
            unencryptedBuffer.WriteBytes(hash.Slice(0, 10));

            var iv = new byte[16];

            _rngCryptoServiceProvider.GetBytes(iv);

            var paddingByteCount = (byte)((16 - ((unencryptedBuffer.Size + 1) & 15)) & 15);

            for (var i = 0; i < paddingByteCount + 1; i++)
            {
                unencryptedBuffer.WriteUInt8(paddingByteCount);
            }

            var encryptedBuffer = unencryptedBuffer.Data.ToArray();

            using (var cryptoTransform = _aesCryptoServiceProvider.CreateEncryptor(key, iv))
            {
                var bytesWritten = 0;
                for (var i = encryptedBuffer.Length; i >= cryptoTransform.InputBlockSize; i -= bytesWritten)
                {
                    var inputCount = cryptoTransform.CanTransformMultipleBlocks
                        ? (i / cryptoTransform.InputBlockSize * cryptoTransform.InputBlockSize)
                        : cryptoTransform.InputBlockSize;
                    bytesWritten = cryptoTransform.TransformBlock(
                        encryptedBuffer, bytesWritten, inputCount,
                        encryptedBuffer, bytesWritten
                        );
                }
            }

            buffer.WriteUInt32(((IEncryptedMessage)message).SequenceId);
            buffer.WriteBytes(iv);
            buffer.WriteBytes(encryptedBuffer);
        }
Ejemplo n.º 9
0
        public override void WriteTo(ref GrowingSpanBuffer buffer)
        {
            buffer.WriteUInt8((byte)Result);
            if (!Success)
            {
                return;
            }

            buffer.WriteIPEndPoint(RemoteEndPoint);
            buffer.WriteString(Code);
        }
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteString(UserId);
     buffer.WriteString(UserName);
     buffer.WriteBytes(Random);
     buffer.WriteVarBytes(PublicKey);
     buffer.WriteString(Secret);
     buffer.WriteString(Code);
     buffer.WriteString(Password);
     buffer.WriteBool(UseRelay);
 }
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteString(ServerName);
     buffer.WriteString(UserId);
     buffer.WriteString(UserName);
     buffer.WriteString(Secret);
     buffer.WriteString(Password);
     buffer.WriteVarInt(CurrentPlayerCount);
     buffer.WriteVarInt(MaximumPlayerCount);
     buffer.WriteUInt8((byte)DiscoveryPolicy);
     buffer.WriteUInt8((byte)InvitePolicy);
     Configuration.WriteTo(ref buffer);
     buffer.WriteBytes(Random);
     buffer.WriteVarBytes(PublicKey);
 }
Ejemplo n.º 12
0
        /// <inheritdoc cref="IMessageWriter.WriteTo"/>
        public void WriteTo <T>(ref GrowingSpanBuffer buffer, T message, byte packetProperty)
            where T : class, IMessage
        {
            var messageGroup = 0U;
            var messageId    = 0U;

            try
            {
                var messageType = message.GetType();
                messageGroup = _messageRegistries
                               .First(kvp => kvp.Value.TryGetMessageId(messageType, out messageId))
                               .Key;
            }
            catch (InvalidOperationException)
            {
                throw new Exception(
                          "Failed to retrieve identifier for message of type " +
                          $"'{typeof(T).Name}'."
                          );
            }

            if (packetProperty != 0x00)
            {
                buffer.WriteUInt8(packetProperty);
            }
            buffer.WriteUInt32(messageGroup);
            buffer.WriteVarUInt(ProtocolVersion);

            var messageBuffer = new GrowingSpanBuffer(stackalloc byte[412]);

            messageBuffer.WriteVarUInt(messageId);
            if (message is IReliableRequest reliableRequest)
            {
                messageBuffer.WriteUInt32(reliableRequest.RequestId);
            }
            if (message is IReliableResponse reliableResponse)
            {
                messageBuffer.WriteUInt32(reliableResponse.ResponseId);
            }
            message.WriteTo(ref messageBuffer);
            buffer.WriteVarUInt((uint)messageBuffer.Size);
            // TODO: Remove byte array allocation
            buffer.WriteBytes(messageBuffer.Data.ToArray());
        }
        public override void WriteTo(ref GrowingSpanBuffer buffer)
        {
            buffer.WriteUInt8((byte)Result);
            if (!Success)
            {
                return;
            }

            buffer.WriteString(UserId);
            buffer.WriteString(UserName);
            buffer.WriteString(Secret);
            buffer.WriteUInt8((byte)DiscoveryPolicy);
            buffer.WriteUInt8((byte)InvitePolicy);
            buffer.WriteVarInt(MaximumPlayerCount);
            Configuration.WriteTo(ref buffer);
            buffer.WriteUInt8((byte)((IsConnectionOwner ? 1 : 0) | (IsDedicatedServer ? 2 : 0)));
            buffer.WriteIPEndPoint(RemoteEndPoint);
            buffer.WriteBytes(Random);
            buffer.WriteVarBytes(PublicKey);
        }
Ejemplo n.º 14
0
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteBytes(Random);
     buffer.WriteVarBytes(PublicKey);
     buffer.WriteVarBytes(Signature);
 }
Ejemplo n.º 15
0
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     AuthenticationToken.WriteTo(ref buffer);
 }
Ejemplo n.º 16
0
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteUInt8((byte)Result);
 }
Ejemplo n.º 17
0
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteBytes(Random);
 }
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteString(UserId);
     buffer.WriteString(UserName);
     buffer.WriteString(Secret);
 }
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteUInt32(CertificateResponseId);
     buffer.WriteBytes(Random);
     buffer.WriteBytes(Cookie);
 }
Ejemplo n.º 20
0
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
 }
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteVarBytes(ClientPublicKey);
 }
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteBool(MessageHandled);
 }
 public override void WriteTo(ref GrowingSpanBuffer buffer)
 {
     buffer.WriteBytes(Cookie);
 }