Use PublicKey instead of byte representation

This commit is contained in:
games647
2022-06-15 15:48:02 +02:00
parent 456342c686
commit bc7c4eea60
4 changed files with 8 additions and 11 deletions

View File

@ -56,8 +56,6 @@ import javax.crypto.spec.SecretKeySpec;
/**
* Encryption and decryption minecraft util for connection between servers
* and paid Minecraft account clients.
*
* @see net.minecraft.server.MinecraftEncryption
*/
class EncryptionUtil {
@ -170,7 +168,7 @@ class EncryptionUtil {
private static String toSignable(ClientPublicKey clientPublicKey) {
long expiry = clientPublicKey.getExpiry().toEpochMilli();
String encoded = KEY_ENCODER.encodeToString(clientPublicKey.getKey());
String encoded = KEY_ENCODER.encodeToString(clientPublicKey.getKey().getEncoded());
return expiry + "-----BEGIN RSA PUBLIC KEY-----\n" + encoded + "\n-----END RSA PUBLIC KEY-----\n";
}
@ -195,8 +193,7 @@ class EncryptionUtil {
return cipher.doFinal(data);
}
private static byte[] getServerIdHash(
String sessionId, PublicKey publicKey, SecretKey sharedSecret)
private static byte[] getServerIdHash(String sessionId, PublicKey publicKey, SecretKey sharedSecret)
throws NoSuchAlgorithmException {
// byte[] a(String var0, PublicKey var1, SecretKey var2)
MessageDigest digest = MessageDigest.getInstance("SHA-1");

View File

@ -179,7 +179,7 @@ public class ProtocolLibListener extends PacketAdapter {
Instant expires = profileKey.getExpireTime();
PublicKey key = profileKey.getKey();
byte[] signature = profileKey.getSignature();
ClientPublicKey clientKey = new ClientPublicKey(expires, key.getEncoded(), signature);
ClientPublicKey clientKey = new ClientPublicKey(expires, key, signature);
try {
return EncryptionUtil.verifyClientKey(clientKey, Instant.now());
} catch (SignatureException | InvalidKeyException | NoSuchAlgorithmException ex) {

View File

@ -25,15 +25,16 @@
*/
package com.github.games647.fastlogin.bukkit.listener.protocollib.packet;
import java.security.PublicKey;
import java.time.Instant;
public class ClientPublicKey {
private final Instant expiry;
private final byte[] key;
private final PublicKey key;
private final byte[] signature;
public ClientPublicKey(Instant expiry, byte[] key, byte[] signature) {
public ClientPublicKey(Instant expiry, PublicKey key, byte[] signature) {
this.expiry = expiry;
this.key = key;
this.signature = signature;
@ -43,7 +44,7 @@ public class ClientPublicKey {
return expiry;
}
public byte[] getKey() {
public PublicKey getKey() {
return key;
}

View File

@ -117,7 +117,7 @@ public class EncryptionUtilTest {
RSAPublicKey publicKey = parsePublicKey(key);
byte[] signature = Base64.getDecoder().decode(object.getAsJsonPrimitive("signature").getAsString());
return new ClientPublicKey(expires, publicKey.getEncoded(), signature);
return new ClientPublicKey(expires, publicKey, signature);
}
private RSAPublicKey parsePublicKey(String lines)
@ -126,7 +126,6 @@ public class EncryptionUtilTest {
Reader reader = new StringReader(lines);
PemReader pemReader = new PemReader(reader)
) {
PemObject pemObject = pemReader.readPemObject();
byte[] content = pemObject.getContent();
var pubKeySpec = new X509EncodedKeySpec(content);