mirror of
https://github.com/TuxCoding/FastLogin.git
synced 2025-07-29 18:27:36 +02:00
Forward client key to server
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java index a3bb3d0..55a8f33 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java @@ -119,7 +119,7 @@ public class ProtocolLibListener extends PacketAdapter { case Continue: default: //player.getName() won't work at this state - onLogin(packetEvent, sender, username); + onLoginStart(packetEvent, sender, username); break; } } else { @@ -146,7 +146,6 @@ public class ProtocolLibListener extends PacketAdapter { long salt = FuzzyReflection.getFieldValue(signatureData, Long.TYPE, true); byte[] signature = FuzzyReflection.getFieldValue(signatureData, byte[].class, true); - BukkitLoginSession session = plugin.getSession(sender.getAddress()); PublicKey publicKey = session.getClientPublicKey().getKey(); try { if (EncryptionUtil.verifySignedNonce(session.getVerifyToken(), publicKey, salt, signature)) { @@ -162,7 +161,7 @@ public class ProtocolLibListener extends PacketAdapter { } } - private void onLogin(PacketEvent packetEvent, Player player, String username) { + private void onLoginStart(PacketEvent packetEvent, Player player, String username) { //this includes ip:port. Should be unique for an incoming login request with a timeout of 2 minutes String sessionKey = player.getAddress().toString(); diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java index d13a5c9..ed84298 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java @@ -43,6 +43,7 @@ import com.github.games647.craftapi.model.skin.SkinProperty; import com.github.games647.craftapi.resolver.MojangResolver; import com.github.games647.fastlogin.bukkit.BukkitLoginSession; import com.github.games647.fastlogin.bukkit.FastLoginBukkit; +import com.github.games647.fastlogin.bukkit.listener.protocollib.packet.ClientPublicKey; import java.io.IOException; import java.lang.reflect.Method; @@ -168,7 +169,7 @@ public class VerifyResponseTask implements Runnable { session.setVerified(true); setPremiumUUID(session.getUuid()); - receiveFakeStartPacket(realUsername); + receiveFakeStartPacket(realUsername, session.getClientPublicKey()); } private void setPremiumUUID(UUID premiumUUID) { @@ -253,7 +254,7 @@ public class VerifyResponseTask implements Runnable { } //fake a new login packet in order to let the server handle all the other stuff - private void receiveFakeStartPacket(String username) { + private void receiveFakeStartPacket(String username, ClientPublicKey clientKey) { //see StartPacketListener for packet information PacketContainer startPacket = new PacketContainer(START); @@ -261,7 +262,8 @@ public class VerifyResponseTask implements Runnable { startPacket.getStrings().write(0, username); EquivalentConverter<WrappedProfileKeyData> converter = BukkitConverters.getWrappedPublicKeyDataConverter(); - startPacket.getOptionals(converter).write(0, Optional.empty()); + var key = new WrappedProfileKeyData(clientKey.getExpiry(), clientKey.getKey(), sharedSecret); + startPacket.getOptionals(converter).write(0, Optional.of(key)); } else { //uuid is ignored by the packet definition WrappedGameProfile fakeProfile = new WrappedGameProfile(UUID.randomUUID(), username);
This commit is contained in:
@ -119,7 +119,7 @@ public class ProtocolLibListener extends PacketAdapter {
|
||||
case Continue:
|
||||
default:
|
||||
//player.getName() won't work at this state
|
||||
onLogin(packetEvent, sender, username);
|
||||
onLoginStart(packetEvent, sender, username);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
@ -146,7 +146,6 @@ public class ProtocolLibListener extends PacketAdapter {
|
||||
long salt = FuzzyReflection.getFieldValue(signatureData, Long.TYPE, true);
|
||||
byte[] signature = FuzzyReflection.getFieldValue(signatureData, byte[].class, true);
|
||||
|
||||
BukkitLoginSession session = plugin.getSession(sender.getAddress());
|
||||
PublicKey publicKey = session.getClientPublicKey().getKey();
|
||||
try {
|
||||
if (EncryptionUtil.verifySignedNonce(session.getVerifyToken(), publicKey, salt, signature)) {
|
||||
@ -162,7 +161,7 @@ public class ProtocolLibListener extends PacketAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
private void onLogin(PacketEvent packetEvent, Player player, String username) {
|
||||
private void onLoginStart(PacketEvent packetEvent, Player player, String username) {
|
||||
//this includes ip:port. Should be unique for an incoming login request with a timeout of 2 minutes
|
||||
String sessionKey = player.getAddress().toString();
|
||||
|
||||
|
@ -43,6 +43,7 @@ import com.github.games647.craftapi.model.skin.SkinProperty;
|
||||
import com.github.games647.craftapi.resolver.MojangResolver;
|
||||
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
||||
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
||||
import com.github.games647.fastlogin.bukkit.listener.protocollib.packet.ClientPublicKey;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
@ -168,7 +169,7 @@ public class VerifyResponseTask implements Runnable {
|
||||
session.setVerified(true);
|
||||
|
||||
setPremiumUUID(session.getUuid());
|
||||
receiveFakeStartPacket(realUsername);
|
||||
receiveFakeStartPacket(realUsername, session.getClientPublicKey());
|
||||
}
|
||||
|
||||
private void setPremiumUUID(UUID premiumUUID) {
|
||||
@ -253,7 +254,7 @@ public class VerifyResponseTask implements Runnable {
|
||||
}
|
||||
|
||||
//fake a new login packet in order to let the server handle all the other stuff
|
||||
private void receiveFakeStartPacket(String username) {
|
||||
private void receiveFakeStartPacket(String username, ClientPublicKey clientKey) {
|
||||
//see StartPacketListener for packet information
|
||||
PacketContainer startPacket = new PacketContainer(START);
|
||||
|
||||
@ -261,7 +262,8 @@ public class VerifyResponseTask implements Runnable {
|
||||
startPacket.getStrings().write(0, username);
|
||||
|
||||
EquivalentConverter<WrappedProfileKeyData> converter = BukkitConverters.getWrappedPublicKeyDataConverter();
|
||||
startPacket.getOptionals(converter).write(0, Optional.empty());
|
||||
var key = new WrappedProfileKeyData(clientKey.getExpiry(), clientKey.getKey(), sharedSecret);
|
||||
startPacket.getOptionals(converter).write(0, Optional.of(key));
|
||||
} else {
|
||||
//uuid is ignored by the packet definition
|
||||
WrappedGameProfile fakeProfile = new WrappedGameProfile(UUID.randomUUID(), username);
|
||||
|
Reference in New Issue
Block a user