From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Stabrinai Date: Sun, 30 Jun 2024 20:46:42 +0800 Subject: [PATCH] Add config to 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);