summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/assets/supportedVersion2
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java2
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java75
-rw-r--r--serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/BedrockProtocol.java5
4 files changed, 21 insertions, 63 deletions
diff --git a/.github/assets/supportedVersion b/.github/assets/supportedVersion
index f75a3dd..272db43 100644
--- a/.github/assets/supportedVersion
+++ b/.github/assets/supportedVersion
@@ -1 +1 @@
-1.20.1.02
+1.20.11.01
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java
index c576687..d889ec3 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java
@@ -38,7 +38,7 @@ public class BedrockConnect {
public static boolean storeDisplayNames = true;
public static File whitelistfile;
- public static String release = "1.35";
+ public static String release = "1.36";
public static HashMap<String, String> featuredServerIps;
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java
index 2629d6e..4bca055 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java
@@ -21,12 +21,17 @@ import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec;
import org.cloudburstmc.protocol.bedrock.data.AttributeData;
import org.cloudburstmc.protocol.bedrock.data.PacketCompressionAlgorithm;
import org.cloudburstmc.protocol.bedrock.packet.*;
+import org.cloudburstmc.protocol.bedrock.util.ChainValidationResult;
import org.cloudburstmc.protocol.bedrock.util.EncryptionUtils;
+import org.cloudburstmc.protocol.bedrock.util.JsonUtils;
import org.cloudburstmc.protocol.common.PacketSignal;
import org.cloudburstmc.protocol.common.util.Preconditions;
+import org.jose4j.jws.JsonWebSignature;
+import org.jose4j.lang.JoseException;
import java.io.IOException;
import java.net.URI;
+import java.security.PublicKey;
import java.security.interfaces.ECPublicKey;
import java.util.*;
import java.net.InetAddress;
@@ -459,59 +464,12 @@ public class PacketHandler implements BedrockPacketHandler {
}
- private boolean validateChainData(List<SignedJWT> chain) throws Exception {
- if (chain.size() != 3) {
- return false;
- }
-
- Payload identity = null;
- ECPublicKey lastKey = null;
- boolean mojangSigned = false;
- Iterator<SignedJWT> iterator = chain.iterator();
- while (iterator.hasNext()) {
- SignedJWT jwt = iterator.next();
- identity = jwt.getPayload();
-
- // x509 cert is expected in every claim
- URI x5u = jwt.getHeader().getX509CertURL();
- if (x5u == null) {
- return false;
- }
-
- ECPublicKey expectedKey = EncryptionUtils.generateKey(jwt.getHeader().getX509CertURL().toString());
- // First key is self-signed
- if (lastKey == null) {
- lastKey = expectedKey;
- } else if (!lastKey.equals(expectedKey)) {
- return false;
- }
+ private boolean verifyJwt(String jwt, PublicKey key) throws JoseException {
+ JsonWebSignature jws = new JsonWebSignature();
+ jws.setKey(key);
+ jws.setCompactSerialization(jwt);
- if (!EncryptionUtils.verifyJwt(jwt, lastKey)) {
- return false;
- }
-
- if (mojangSigned) {
- return !iterator.hasNext();
- }
-
- if (lastKey.equals(EncryptionUtils.getMojangPublicKey())) {
- mojangSigned = true;
- }
-
- Object payload = JSONValue.parse(jwt.getPayload().toString());
- Preconditions.checkArgument(payload instanceof JSONObject, "Payload is not an object");
-
- Object identityPublicKey = ((JSONObject) payload).get("identityPublicKey");
- Preconditions.checkArgument(identityPublicKey instanceof String, "identityPublicKey node is missing in chain");
- lastKey = EncryptionUtils.generateKey((String) identityPublicKey);
- }
-
- return mojangSigned;
- }
-
-
- private boolean verifyJwt(JWSObject jwt, ECPublicKey key) throws JOSEException {
- return jwt.verify(new DefaultJWSVerifierFactory().createJWSVerifier(jwt.getHeader(), key));
+ return jws.verifySignature();
}
@Override
@@ -544,25 +502,22 @@ public class PacketHandler implements BedrockPacketHandler {
@Override
public PacketSignal handle(LoginPacket packet) {
-
- List<SignedJWT> certChainData = packet.getChain();
-
try {
- JWSObject jwt = certChainData.get(certChainData.size() - 1);
- JsonNode payload = Server.JSON_MAPPER.readTree(jwt.getPayload().toBytes());
+ ChainValidationResult chain = EncryptionUtils.validateChain(packet.getChain());
+ JsonNode payload = Server.JSON_MAPPER.valueToTree(chain.rawIdentityClaims());
if (payload.get("extraData").getNodeType() != JsonNodeType.OBJECT) {
throw new RuntimeException("AuthData was not found!");
}
- extraData = (JSONObject) jwt.getPayload().toJSONObject().get("extraData");
+ extraData = new JSONObject(JsonUtils.childAsType(chain.rawIdentityClaims(), "extraData", Map.class));
if (payload.get("identityPublicKey").getNodeType() != JsonNodeType.STRING) {
throw new RuntimeException("Identity Public Key was not found!");
}
- ECPublicKey identityPublicKey = EncryptionUtils.generateKey(payload.get("identityPublicKey").textValue());
+ ECPublicKey identityPublicKey = EncryptionUtils.parseKey(payload.get("identityPublicKey").textValue());
- JWSObject clientJwt = packet.getExtra();
+ String clientJwt = packet.getExtra();
verifyJwt(clientJwt, identityPublicKey);
System.out.println("Made it through login - " + "User: " + extraData.getAsString("displayName") + " (" + extraData.getAsString("identity") + ")");
diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/BedrockProtocol.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/BedrockProtocol.java
index 008441a..ba0ed4a 100644
--- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/BedrockProtocol.java
+++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/utils/BedrockProtocol.java
@@ -11,6 +11,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v568.Bedrock_v568;
import org.cloudburstmc.protocol.bedrock.codec.v575.Bedrock_v575;
import org.cloudburstmc.protocol.bedrock.codec.v582.Bedrock_v582;
import org.cloudburstmc.protocol.bedrock.codec.v589.Bedrock_v589;
+import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594;
import java.util.ArrayList;
import java.util.List;
@@ -21,7 +22,7 @@ public class BedrockProtocol {
/**
* Latest available version
*/
- public static final BedrockCodec DEFAULT_BEDROCK_CODEC = Bedrock_v589.CODEC;
+ public static final BedrockCodec DEFAULT_BEDROCK_CODEC = Bedrock_v594.CODEC;
/**
* A list of all supported Bedrock versions that can join BedrockConnect
@@ -51,6 +52,8 @@ public class BedrockProtocol {
.build());
SUPPORTED_BEDROCK_CODECS.add(Bedrock_v582.CODEC.toBuilder()
.build());
+ SUPPORTED_BEDROCK_CODECS.add(Bedrock_v589.CODEC.toBuilder()
+ .build());
SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC);
}