From 3fd73145d6fa36d942e53983d30fd52b5966bd8b Mon Sep 17 00:00:00 2001 From: Stabrinai Date: Sun, 30 Jun 2024 20:49:45 +0800 Subject: [PATCH] Verify signature only in online-mode --- ...Verify-signature-only-in-online-mode.patch | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 patches/server/0055-Verify-signature-only-in-online-mode.patch diff --git a/patches/server/0055-Verify-signature-only-in-online-mode.patch b/patches/server/0055-Verify-signature-only-in-online-mode.patch new file mode 100644 index 0000000..cac404f --- /dev/null +++ b/patches/server/0055-Verify-signature-only-in-online-mode.patch @@ -0,0 +1,62 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Stabrinai +Date: Sun, 30 Jun 2024 20:46:42 +0800 +Subject: [PATCH] Verify signature only in online-mode + + +diff --git a/src/main/java/me/earthme/luminol/config/modules/misc/PublickeyVerifyConfig.java b/src/main/java/me/earthme/luminol/config/modules/misc/PublickeyVerifyConfig.java +new file mode 100644 +index 0000000000000000000000000000000000000000..e45ce3abf49684c911678abcefd69586246cc0e3 +--- /dev/null ++++ b/src/main/java/me/earthme/luminol/config/modules/misc/PublickeyVerifyConfig.java +@@ -0,0 +1,21 @@ ++package me.earthme.luminol.config.modules.misc; ++ ++import me.earthme.luminol.config.ConfigInfo; ++import me.earthme.luminol.config.EnumConfigCategory; ++import me.earthme.luminol.config.IConfigModule; ++ ++public class PublickeyVerifyConfig implements IConfigModule { ++ ++ @ConfigInfo(baseName = "enabled") ++ public static boolean enabled = false; ++ ++ @Override ++ public EnumConfigCategory getCategory() { ++ return EnumConfigCategory.MISC; ++ } ++ ++ @Override ++ public String getBaseName() { ++ return "verify_publickey_only_in_online_mode"; ++ } ++} +diff --git a/src/main/java/net/minecraft/world/entity/player/ProfilePublicKey.java b/src/main/java/net/minecraft/world/entity/player/ProfilePublicKey.java +index 2fa51c3a70f43cd23b8f494fc643d66cecfda7d2..2c541f300ea1657e2d75d0eeb36809aaf437b205 100644 +--- a/src/main/java/net/minecraft/world/entity/player/ProfilePublicKey.java ++++ b/src/main/java/net/minecraft/world/entity/player/ProfilePublicKey.java +@@ -9,12 +9,15 @@ import java.time.Duration; + import java.time.Instant; + import java.util.Arrays; + import java.util.UUID; ++ ++import me.earthme.luminol.config.modules.misc.PublickeyVerifyConfig; + import net.minecraft.network.FriendlyByteBuf; + import net.minecraft.network.chat.Component; + import net.minecraft.network.chat.ThrowingComponent; + import net.minecraft.util.Crypt; + import net.minecraft.util.ExtraCodecs; + import net.minecraft.util.SignatureValidator; ++import org.bukkit.Bukkit; + + public record ProfilePublicKey(ProfilePublicKey.Data data) { + public static final Component EXPIRED_PROFILE_PUBLIC_KEY = Component.translatable("multiplayer.disconnect.expired_public_key"); +@@ -23,7 +26,7 @@ public record ProfilePublicKey(ProfilePublicKey.Data data) { + public static final Codec TRUSTED_CODEC = ProfilePublicKey.Data.CODEC.xmap(ProfilePublicKey::new, ProfilePublicKey::data); + + public static ProfilePublicKey createValidated(SignatureValidator servicesSignatureVerifier, UUID playerUuid, ProfilePublicKey.Data publicKeyData) throws ProfilePublicKey.ValidationException { +- if (!publicKeyData.validateSignature(servicesSignatureVerifier, playerUuid)) { ++ if ((!PublickeyVerifyConfig.enabled || Bukkit.getServer().getOnlineMode()) && !publicKeyData.validateSignature(servicesSignatureVerifier, playerUuid)) { // Luminol - Verify signature only in online-mode + throw new ProfilePublicKey.ValidationException(INVALID_SIGNATURE, org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PUBLIC_KEY_SIGNATURE); // Paper - kick event causes + } else { + return new ProfilePublicKey(publicKeyData);