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); }
public IPlayerListItem FromReader(IMinecraftStreamReader reader) { HasDisplayName = reader.ReadBool(); DisplayName = reader.ReadString(); return(this); }
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(); }
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); }
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); } }
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); }
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); }
public IPlayerListItem FromReader(IMinecraftStreamReader reader) { return(this); }
public IPlayerListItem FromReader(IMinecraftStreamReader reader) { Ping = reader.ReadVarInt(); return(this); }