Example #1
0
        private void HandleEncryption(EncryptionRequestPacket packet)
        {
            var random = RandomNumberGenerator.Create();

            _sharedSecret = new byte[16];
            random.GetBytes(_sharedSecret);

            if (packet.ServerId != "")
            {
                throw new NotImplementedException("Online mode is not implemented");
            }

            var parser = new AsnKeyParser(packet.PublicKey);
            var key    = parser.ParseRSAPublicKey();

            // Encrypt shared secret and verification token
            var crypto = new RSACryptoServiceProvider();

            crypto.ImportParameters(key);
            WritePacket(new EncryptionResponsePacket
            {
                SharedSecret = crypto.Encrypt(_sharedSecret, false),
                VerifyToken  = crypto.Encrypt(packet.VerifyToken, false),
            });

            _baseStream = new AesStream(_networkStream, _sharedSecret);
            _writer     = new MinecraftStreamWriter(_baseStream);
            _reader     = new MinecraftStreamReader(_baseStream);
        }
Example #2
0
        public IPlayerListItem FromReader(IMinecraftStreamReader reader)
        {
            HasDisplayName = reader.ReadBool();
            DisplayName    = reader.ReadString();

            return(this);
        }
Example #3
0
        public void Connect(IPEndPoint endPoint)
        {
            _client = new TcpClient();
            _client.Connect(endPoint);

            _networkStream = _client.GetStream();
            _baseStream    = _networkStream;
            _writer        = new MinecraftStreamWriter(_baseStream);
            _reader        = new MinecraftStreamReader(_baseStream);

            _networkThread = new Thread(NetworkThread);
            _networkThread.Start();
        }
Example #4
0
        public IPlayerListItem FromReader(IMinecraftStreamReader reader)
        {
            Name       = reader.ReadString();
            Properties = PlayerListActionProperties.FromReader(reader);

            Gamemode       = reader.ReadVarInt();
            Ping           = reader.ReadVarInt();
            HasDisplayName = reader.ReadBool();
            if (HasDisplayName)
            {
                DisplayName = reader.ReadString();
            }

            return(this);
        }
Example #5
0
        public void ReadPacket(IMinecraftStreamReader reader)
        {
            Action = (PlayerListAction)reader.ReadVarInt();
            var count = reader.ReadVarInt();

            PlayerList = new List <IPlayerListItem>(count);

            for (int i = 0; i < count; i++)
            {
                var listItem = CreatePlayerListItem(Action);
                listItem.Uuid = new PlayerUuid(reader.ReadByteArray(16));
                listItem.FromReader(reader);

                PlayerList.Add(listItem);
            }
        }
Example #6
0
        public IPacket ReadPacketFromStream(IMinecraftStreamReader reader)
        {
            var packet = (IPacket)Activator.CreateInstance(Type);

            var manualPacket = packet as IManualPacket;

            if (manualPacket != null)
            {
                manualPacket.ReadPacket(reader);

                return(packet);
            }

            foreach (var packetFieldAction in FieldActions)
            {
                packetFieldAction.ReaderAction(packet, reader);
            }

            return(packet);
        }
Example #7
0
        public static PlayerListActionProperties FromReader(IMinecraftStreamReader reader)
        {
            var count = reader.ReadVarInt();

            var value = new PlayerListActionProperties();

            for (var i = 0; i < count; i++)
            {
                var property = new Properties();

                property.Name     = reader.ReadString();
                property.Value    = reader.ReadString();
                property.IsSigned = reader.ReadBool();

                if (property.IsSigned)
                {
                    property.Signature = reader.ReadString();
                }

                value[i] = property;
            }

            return(value);
        }
Example #8
0
 public IPlayerListItem FromReader(IMinecraftStreamReader reader)
 {
     return(this);
 }
Example #9
0
        public IPlayerListItem FromReader(IMinecraftStreamReader reader)
        {
            Ping = reader.ReadVarInt();

            return(this);
        }