From 02aa969d6c30395fde8d81099cafd63b268015a1 Mon Sep 17 00:00:00 2001 From: 9seconds Date: Wed, 24 Mar 2021 10:30:09 +0300 Subject: [PATCH] Use dc indexes accordingly --- mtglib/internal/obfuscated2/handshake_frame.go | 8 +++++--- .../obfuscated2/handshake_frame_internal_test.go | 4 ++-- .../client-handshake-snapshot-4529d55776e2d427.json | 2 +- .../client-handshake-snapshot-585c944d672f60a2.json | 2 +- mtglib/internal/telegram/telegram.go | 10 +++++----- mtglib/internal/telegram/telegram_internal_test.go | 13 +++++++------ 6 files changed, 21 insertions(+), 18 deletions(-) diff --git a/mtglib/internal/obfuscated2/handshake_frame.go b/mtglib/internal/obfuscated2/handshake_frame.go index 82327f1..fde59ae 100644 --- a/mtglib/internal/obfuscated2/handshake_frame.go +++ b/mtglib/internal/obfuscated2/handshake_frame.go @@ -3,6 +3,8 @@ package obfuscated2 import "encoding/binary" const ( + DefaultDC = 2 + handshakeFrameLen = 64 handshakeFrameLenKey = 32 @@ -41,11 +43,11 @@ func (h *handshakeFrame) dc() int { switch { case idx > 0: - return int(idx) - 1 + return int(idx) case idx < 0: - return -int(idx + 1) + return -int(idx) default: - return 0 + return DefaultDC } } diff --git a/mtglib/internal/obfuscated2/handshake_frame_internal_test.go b/mtglib/internal/obfuscated2/handshake_frame_internal_test.go index c5c8eee..4fedb3f 100644 --- a/mtglib/internal/obfuscated2/handshake_frame_internal_test.go +++ b/mtglib/internal/obfuscated2/handshake_frame_internal_test.go @@ -31,13 +31,13 @@ func (suite *HandshakeFrameTestSuite) TestOk() { suite.Equal("zyjgwaWXlTP6qjVMUP2scQbqdUtspmyH1Hen+2Ess8w", suite.Encode(hf.key())) suite.Equal("z0SZMW/b9fMaokYQe6PbOg", suite.Encode(hf.iv())) suite.Equal("H5lBgQ", suite.Encode(hf.connectionType())) - suite.EqualValues(2093, hf.dc()) + suite.EqualValues(2094, hf.dc()) inverted := hf.invert() suite.Equal("OtujexBGohrz9dtvMZlEz8yzLGH7p3fUh2ymbEt16gY", suite.Encode(inverted.key())) suite.Equal("caz9UEw1qvozlZelweAozw", suite.Encode(inverted.iv())) suite.Equal("H5lBgQ", suite.Encode(inverted.connectionType())) - suite.EqualValues(2093, inverted.dc()) + suite.EqualValues(2094, inverted.dc()) } func TestHandshakeFrame(t *testing.T) { diff --git a/mtglib/internal/obfuscated2/testdata/client-handshake-snapshot-4529d55776e2d427.json b/mtglib/internal/obfuscated2/testdata/client-handshake-snapshot-4529d55776e2d427.json index 00701aa..f34dc15 100644 --- a/mtglib/internal/obfuscated2/testdata/client-handshake-snapshot-4529d55776e2d427.json +++ b/mtglib/internal/obfuscated2/testdata/client-handshake-snapshot-4529d55776e2d427.json @@ -1,7 +1,7 @@ { "secret": "NnoYmu4Y+jHBkAVO/UqOlQ", "frame": "gDcXwaMY4RwlR+nJw+ILDr123UJHHjjE/U5pF4m/Y04AmH7lEpEL6UYRnIYDbDlOHSDxc1ToziPvNlJJh8RMow", - "dc": 1, + "dc": 2, "encrypted": { "text": "AQIDBAUGBwgJCg", "cipher": "wZV3TR39l9nRoQ" diff --git a/mtglib/internal/obfuscated2/testdata/client-handshake-snapshot-585c944d672f60a2.json b/mtglib/internal/obfuscated2/testdata/client-handshake-snapshot-585c944d672f60a2.json index c098a6e..a59adb4 100644 --- a/mtglib/internal/obfuscated2/testdata/client-handshake-snapshot-585c944d672f60a2.json +++ b/mtglib/internal/obfuscated2/testdata/client-handshake-snapshot-585c944d672f60a2.json @@ -1,7 +1,7 @@ { "secret": "NnoYmu4Y+jHBkAVO/UqOlQ", "frame": "M2WyxeiwIQB+ZOFxNzSNHtu9OdESkfxv3JkKFimCxUoYA3BD/Ql9nXB/OIonCKLUKCcS0VzZ2P6/+5oQ9GI8YA", - "dc": 1, + "dc": 2, "encrypted": { "text": "AQIDBAUGBwgJCg", "cipher": "tzAwrCz00odERg" diff --git a/mtglib/internal/telegram/telegram.go b/mtglib/internal/telegram/telegram.go index 90f21ca..2ee86e2 100644 --- a/mtglib/internal/telegram/telegram.go +++ b/mtglib/internal/telegram/telegram.go @@ -14,16 +14,16 @@ type Telegram struct { } func (t Telegram) Dial(ctx context.Context, dc int) (net.Conn, error) { - if dc < 0 || dc > 4 { + if dc <= 0 || dc > 5 { return nil, fmt.Errorf("do not know how to dial to %d", dc) } var addresses []tgAddr if t.preferIP == preferIPOnlyIPv6 { - addresses = []tgAddr{v6Addresses[dc]} + addresses = []tgAddr{v6Addresses[dc-1]} } else { - addresses = append(addresses, v4Addresses[dc]...) + addresses = append(addresses, v4Addresses[dc-1]...) rand.Shuffle(len(addresses), func(i, j int) { addresses[i], addresses[j] = addresses[j], addresses[i] }) @@ -31,9 +31,9 @@ func (t Telegram) Dial(ctx context.Context, dc int) (net.Conn, error) { switch t.preferIP { case preferIPPreferIPv4: - addresses = append(addresses, v6Addresses[dc]) + addresses = append(addresses, v6Addresses[dc-1]) case preferIPPreferIPv6: - addresses = append([]tgAddr{v6Addresses[dc]}, addresses...) + addresses = append([]tgAddr{v6Addresses[dc-1]}, addresses...) case preferIPOnlyIPv4, preferIPOnlyIPv6: } diff --git a/mtglib/internal/telegram/telegram_internal_test.go b/mtglib/internal/telegram/telegram_internal_test.go index 891eff3..d4821ae 100644 --- a/mtglib/internal/telegram/telegram_internal_test.go +++ b/mtglib/internal/telegram/telegram_internal_test.go @@ -33,7 +33,8 @@ func (suite *TelegramTestSuite) TearDownTest() { func (suite *TelegramTestSuite) TestUnknownDC() { testData := []int{ -1, - 5, + 0, + 6, 100, } @@ -50,10 +51,10 @@ func (suite *TelegramTestSuite) TestUnknownDC() { func (suite *TelegramTestSuite) TestDialToCorrectIPs() { testData := map[int][]tgAddr{} - for i := 0; i < 5; i++ { + for i := 1; i <= 5; i++ { testData[i] = []tgAddr{} - testData[i] = append(testData[i], v4Addresses[i]...) - testData[i] = append(testData[i], v6Addresses[i]) + testData[i] = append(testData[i], v4Addresses[i-1]...) + testData[i] = append(testData[i], v6Addresses[i-1]) } for i, v := range testData { @@ -95,7 +96,7 @@ func (suite *TelegramTestSuite) TestDialPreferIPRange() { } tg, _ := New(suite.dialerMock, name) - _, err := tg.Dial(context.Background(), 0) + _, err := tg.Dial(context.Background(), 1) assert.True(t, errors.Is(err, io.EOF)) }) @@ -122,7 +123,7 @@ func (suite *TelegramTestSuite) TestDialPreferIPPriority() { tg, _ := New(suite.dialerMock, name) - res, err := tg.Dial(context.Background(), 0) + res, err := tg.Dial(context.Background(), 1) assert.NoError(t, err) assert.Equal(t, conn, res) })