From ba9976c5b620e7613ff60dbbce8ce93de66d8123 Mon Sep 17 00:00:00 2001 From: neckfire Date: Tue, 14 Jul 2026 20:54:01 +0200 Subject: [PATCH] gameserver: skip encryption on Hello (try plaintext challenge) Co-Authored-By: Claude Opus 4.8 --- src/Prospect.Unreal/Runtime/UWorld.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Prospect.Unreal/Runtime/UWorld.cs b/src/Prospect.Unreal/Runtime/UWorld.cs index 34db3f9..97c569c 100644 --- a/src/Prospect.Unreal/Runtime/UWorld.cs +++ b/src/Prospect.Unreal/Runtime/UWorld.cs @@ -286,7 +286,16 @@ public abstract partial class UWorld : FNetworkNotify, IAsyncDisposable } else { - throw new NotImplementedException("Encryption"); + // The Cycle client offers an EncryptionToken in NMT_Hello. A UE + // connection only switches to AES once the server replies with + // NMT_EncryptionAck — the token is an offer, not a requirement. + // Implementing the full AES-GCM packet handler is a large effort, + // so first proceed WITHOUT encryption: never send the ack and go + // straight to the challenge. If the client keeps talking plaintext + // we're done; if it insists on encryption it will drop here and we + // know AES is mandatory. + Logger.Warning("Client sent EncryptionToken ({Len} chars) — proceeding WITHOUT encryption (no EncryptionAck)", encryptionToken.Length); + connection.SendChallengeControlMessage(); } } break;