From f5690ba0bb80fe177ff763de700e66ea77373ff6 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Tue, 12 Jun 2018 16:37:45 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D1=8B=20=D1=81=20=D0=B7=D0=B0=D1=88=D0=B8=D1=84=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D0=BC=20=D0=BF=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=BA=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mc/core/network/proto_1_12_2/Crypter.java | 43 +++++++++++++++++++ .../packets/EncryptionRequestPacket.java | 36 ++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/Crypter.java create mode 100644 proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/EncryptionRequestPacket.java diff --git a/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/Crypter.java b/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/Crypter.java new file mode 100644 index 0000000..7259f93 --- /dev/null +++ b/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/Crypter.java @@ -0,0 +1,43 @@ +/* + * DmitriyMX + * 2018-06-11 + */ +package mc.core.network.proto_1_12_2; + +import lombok.extern.slf4j.Slf4j; + +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.util.Random; + +@Slf4j +public class Crypter { + private static final Crypter instance = new Crypter(); + private KeyPair keyPair; + private byte[] verifyToken; + + public static KeyPair getKeyPair() { + if (instance.keyPair == null) { + try { + KeyPairGenerator keypairgenerator = KeyPairGenerator.getInstance("RSA"); + keypairgenerator.initialize(1024); + instance.keyPair = keypairgenerator.generateKeyPair(); + } catch (NoSuchAlgorithmException e) { + log.error("WTF?! Algorithm \"RSA\" not defined?!", e); + } + } + + return instance.keyPair; + } + + public static byte[] getVerifyToken() { + if (instance.verifyToken == null) { + instance.verifyToken = new byte[4]; + Random rand = new Random(); + rand.nextBytes(instance.verifyToken); + } + + return instance.verifyToken; + } +} diff --git a/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/EncryptionRequestPacket.java b/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/EncryptionRequestPacket.java new file mode 100644 index 0000000..1313770 --- /dev/null +++ b/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/EncryptionRequestPacket.java @@ -0,0 +1,36 @@ +/* + * DmitriyMX + * 2018-06-11 + */ +package mc.core.network.proto_1_12_2.packets; + +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Setter; +import mc.core.network.SCPacket; +import mc.core.network.proto_1_12_2.ByteArrayOutputNetStream; + +import java.security.PublicKey; + +@AllArgsConstructor +@NoArgsConstructor +@Setter +public class EncryptionRequestPacket implements SCPacket { + private String serverId; + private PublicKey publicKey; + private byte[] verifyToken; + + @Override + public byte[] toByteArray() { + ByteArrayOutputNetStream netStream = new ByteArrayOutputNetStream(); + + netStream.writeString(serverId); + byte[] bytes = publicKey.getEncoded(); + netStream.writeVarInt(bytes.length); + netStream.writeBytes(bytes); + netStream.writeVarInt(verifyToken.length); + netStream.writeBytes(verifyToken); + + return netStream.toByteArray(); + } +}