diff --git a/.gitignore b/.gitignore index a27f562..7085849 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ build/ **/tl/Abstract.java **/tl/Types.java **/tl/Functions.java + +# Authorization Key +*.key diff --git a/lib/src/main/java/io/github/lonamiwebs/overgram/Overgram.java b/lib/src/main/java/io/github/lonamiwebs/overgram/Overgram.java index bd99e6b..40277ea 100644 --- a/lib/src/main/java/io/github/lonamiwebs/overgram/Overgram.java +++ b/lib/src/main/java/io/github/lonamiwebs/overgram/Overgram.java @@ -1,19 +1,42 @@ package io.github.lonamiwebs.overgram; +import io.github.lonamiwebs.overgram.crypto.AuthKey; import io.github.lonamiwebs.overgram.network.MTProtoSender; import io.github.lonamiwebs.overgram.network.MTProtoState; import io.github.lonamiwebs.overgram.network.connection.TcpFull; import io.github.lonamiwebs.overgram.tl.Functions; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; public class Overgram { + private static void saveAuthKey(final AuthKey authKey, final File file) { + try (final FileOutputStream out = new FileOutputStream(file)) { + out.write(authKey.key); + } catch (IOException ignored) { + } + } + + private static AuthKey loadAuthKey(final File file) { + try (final FileInputStream in = new FileInputStream(file)) { + final byte[] key = new byte[256]; + assert in.read(key) == key.length; + return new AuthKey(key); + } catch (IOException ignored) { + return null; + } + } + public static void main(final String... args) throws IOException, InterruptedException, ExecutionException { - final MTProtoSender sender = new MTProtoSender(new MTProtoState(), new TcpFull()); + final File authKey = new File("auth.key"); + final MTProtoSender sender = new MTProtoSender(new MTProtoState(loadAuthKey(authKey)), new TcpFull()); try { sender.connect("149.154.167.91", 443); + saveAuthKey(sender.state.authKey, authKey); final Future result = sender.send(new Functions.Ping()); System.out.println(result.get()); } finally { diff --git a/lib/src/main/java/io/github/lonamiwebs/overgram/network/MTProtoPlainSender.java b/lib/src/main/java/io/github/lonamiwebs/overgram/network/MTProtoPlainSender.java index d60c2ee..1e4a72c 100644 --- a/lib/src/main/java/io/github/lonamiwebs/overgram/network/MTProtoPlainSender.java +++ b/lib/src/main/java/io/github/lonamiwebs/overgram/network/MTProtoPlainSender.java @@ -15,7 +15,7 @@ public class MTProtoPlainSender { public MTProtoPlainSender(final Connection connection) { this.connection = connection; - this.state = new MTProtoState(); + this.state = new MTProtoState(null); } public T send(final TLRequest request) throws IOException, ClassNotFoundException { diff --git a/lib/src/main/java/io/github/lonamiwebs/overgram/network/MTProtoSender.java b/lib/src/main/java/io/github/lonamiwebs/overgram/network/MTProtoSender.java index 98d6876..6ba9cdf 100644 --- a/lib/src/main/java/io/github/lonamiwebs/overgram/network/MTProtoSender.java +++ b/lib/src/main/java/io/github/lonamiwebs/overgram/network/MTProtoSender.java @@ -16,7 +16,7 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; public class MTProtoSender { - private final MTProtoState state; + public final MTProtoState state; private final Connection connection; private String ip; private int port; diff --git a/lib/src/main/java/io/github/lonamiwebs/overgram/network/MTProtoState.java b/lib/src/main/java/io/github/lonamiwebs/overgram/network/MTProtoState.java index f6988f6..5695031 100644 --- a/lib/src/main/java/io/github/lonamiwebs/overgram/network/MTProtoState.java +++ b/lib/src/main/java/io/github/lonamiwebs/overgram/network/MTProtoState.java @@ -23,13 +23,13 @@ public class MTProtoState { private int sequence; private long lastMsgId; - public MTProtoState() { + public MTProtoState(final AuthKey authKey) { + this.authKey = authKey; + salt = 0; id = new SecureRandom().nextLong(); timeOffset = 0; sequence = 0; lastMsgId = 0; - authKey = null; - salt = 0; } public TLMessage createMessage(final TLObject object) {