From 58c9a602365d17090a230f8f49cfb1de744dabed Mon Sep 17 00:00:00 2001 From: adman Date: Sat, 30 May 2026 15:53:35 +0200 Subject: [PATCH] add optional encryption flag to login server and update ServeLogin behavior --- cmd/strom/main.go | 1 + cmd/strom/packet_inspector/main.go | 2 +- server/login_server.go | 30 +++++++++++++++++++++--------- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/cmd/strom/main.go b/cmd/strom/main.go index 5379b41..e10b01a 100644 --- a/cmd/strom/main.go +++ b/cmd/strom/main.go @@ -67,6 +67,7 @@ func Help(args []string) (err error) { func mainE() (err error) { subcommands["help"] = Help args := os.Args + args = []string{"TEST", "packet-spy", "-addr", "127.0.0.1:25571"} if len(args) < 2 { err = ExpectedASubcommandErr diff --git a/cmd/strom/packet_inspector/main.go b/cmd/strom/packet_inspector/main.go index ab91dc6..d86e3ff 100644 --- a/cmd/strom/packet_inspector/main.go +++ b/cmd/strom/packet_inspector/main.go @@ -102,7 +102,7 @@ func Run(args []string) (err error) { return } } - _, err = server.ServeLogin(serveeConn, server.WithOtherAccount(acc), server.WithStatus(StatusResponse), server.WithoutOnlineMode()) + _, err = server.ServeLogin(serveeConn, server.WithOtherAccount(acc), server.WithStatus(StatusResponse), server.WithoutOnlineMode(), server.WithoutEncryption()) if err != nil { return } diff --git a/server/login_server.go b/server/login_server.go index a3c6b58..2135238 100644 --- a/server/login_server.go +++ b/server/login_server.go @@ -38,14 +38,14 @@ func (u UnexpectedNextStateError) Error() string { type LoginServer struct { *proto.Conn - DontEncrypt, OnlineMode bool - ServerHost string - ServerPort uint16 - Requested NameAndUUID - Given *NameAndUUID - CompressionThreshold int32 - Status []byte - CompatibleVersions []int32 + Encryption, OnlineMode bool + ServerHost string + ServerPort uint16 + Requested NameAndUUID + Given *NameAndUUID + CompressionThreshold int32 + Status []byte + CompatibleVersions []int32 ServerId string // always empty for now VerifyToken []byte @@ -107,7 +107,7 @@ func (l *LoginServer) OnLoginStart(packet *v1_21_8.LoginToServerPacketLoginStart } l.Requested = NameAndUUID{packet.Username, packet.PlayerUUID} - if !l.DontEncrypt { + if l.Encryption { return l.Encrypt() } return l.FinishLogin() @@ -241,9 +241,16 @@ func WithoutOnlineMode() LoginServerSetting { } } +func WithoutEncryption() LoginServerSetting { + return func(s *LoginServer) { + s.Encryption = false + } +} + func ServeLogin(c *proto.Conn, settings ...LoginServerSetting) (ret *LoginServer, err error) { ret = &LoginServer{Conn: c} ret.OnlineMode = true + ret.Encryption = true ret.RegisterCritical(ret.OnDefault) ret.RegisterCriticalUntilLatest(ret.OnHandshake) @@ -255,6 +262,11 @@ func ServeLogin(c *proto.Conn, settings ...LoginServerSetting) (ret *LoginServer for _, s := range settings { s(ret) } + if ret.OnlineMode && !ret.Encryption { + err = fmt.Errorf("online mode requires encryption") + return + } + ret.CompressionThreshold = 256 err = ret.StartConn() return