Bungeecord support added x17

This commit is contained in:
Michael Wain 2025-03-22 01:16:33 +03:00
parent 24ced9531f
commit 57f23a5adb

View File

@ -14,15 +14,18 @@ import net.md_5.bungee.netty.ChannelWrapper;
import net.md_5.bungee.netty.cipher.CipherDecoder;
import net.md_5.bungee.netty.cipher.CipherEncoder;
import net.md_5.bungee.protocol.AbstractPacketHandler;
import net.md_5.bungee.protocol.DefinedPacket;
import net.md_5.bungee.protocol.ProtocolConstants;
import net.md_5.bungee.protocol.packet.EncryptionRequest;
import net.md_5.bungee.protocol.packet.EncryptionResponse;
import javax.crypto.SecretKey;
import java.beans.ConstructorProperties;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
@ -31,7 +34,24 @@ import static net.md_5.bungee.BungeeCord.getInstance;
import static com.alterdekim.xcraft.auth.bungee.XCraft.INTERNAL_PORT;
public class EncryptionResponsePacket extends EncryptionResponse {
public class EncryptionResponsePacket extends DefinedPacket {
private byte[] sharedSecret;
private byte[] verifyToken;
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) {
this.sharedSecret = readArray(buf, 128);
this.verifyToken = readArray(buf, 128);
}
public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) {
writeArray(this.sharedSecret, buf);
writeArray(this.verifyToken, buf);
}
private EncryptionResponse getDummyResponse() {
return new EncryptionResponse(this.getSharedSecret(), this.getVerifyToken());
}
@Override
public void handle(AbstractPacketHandler handler) throws Exception {
@ -61,7 +81,7 @@ public class EncryptionResponsePacket extends EncryptionResponse {
Preconditions.checkState( thisState.get(handler).toString().equals("ENCRYPT"), "Not expecting ENCRYPT" );
SecretKey sharedKey = EncryptionUtil.getSecret(this, (EncryptionRequest) request.get(initialHandler));
SecretKey sharedKey = EncryptionUtil.getSecret(this.getDummyResponse(), (EncryptionRequest) request.get(initialHandler));
BungeeCipher decrypt = EncryptionUtil.getCipher(false, sharedKey);
((ChannelWrapper)ch.get(initialHandler)).addBefore("frame-decoder", "decrypt", new CipherDecoder(decrypt));
BungeeCipher encrypt = EncryptionUtil.getCipher(true, sharedKey);
@ -98,4 +118,61 @@ public class EncryptionResponsePacket extends EncryptionResponse {
};
HttpClient.get(authURL, ((ChannelWrapper)ch.get(initialHandler)).getHandle().eventLoop(), callback_handler);
}
public byte[] getSharedSecret() {
return this.sharedSecret;
}
public byte[] getVerifyToken() {
return this.verifyToken;
}
public void setSharedSecret(byte[] sharedSecret) {
this.sharedSecret = sharedSecret;
}
public void setVerifyToken(byte[] verifyToken) {
this.verifyToken = verifyToken;
}
public String toString() {
return "EncryptionResponsePacket(sharedSecret=" + Arrays.toString(this.getSharedSecret()) + ", verifyToken=" + Arrays.toString(this.getVerifyToken()) + ")";
}
public EncryptionResponsePacket() {
}
@ConstructorProperties({"sharedSecret", "verifyToken"})
public EncryptionResponsePacket(byte[] sharedSecret, byte[] verifyToken) {
this.sharedSecret = sharedSecret;
this.verifyToken = verifyToken;
}
public boolean equals(Object o) {
if (o == this) {
return true;
} else if (!(o instanceof EncryptionResponsePacket)) {
return false;
} else {
EncryptionResponsePacket other = (EncryptionResponsePacket)o;
if (!other.canEqual(this)) {
return false;
} else if (!Arrays.equals(this.getSharedSecret(), other.getSharedSecret())) {
return false;
} else {
return Arrays.equals(this.getVerifyToken(), other.getVerifyToken());
}
}
}
protected boolean canEqual(Object other) {
return other instanceof EncryptionResponsePacket;
}
public int hashCode() {
int result = 1;
result = result * 59 + Arrays.hashCode(this.getSharedSecret());
result = result * 59 + Arrays.hashCode(this.getVerifyToken());
return result;
}
}