瀏覽代碼

Add raw version of server handshake test

tags/v2.0.0-rc1
9seconds 5 年之前
父節點
當前提交
ea698259d5
共有 1 個文件被更改,包括 95 次插入0 次删除
  1. 95
    0
      mtglib/internal/obfuscated2/server_handshake_test.go

+ 95
- 0
mtglib/internal/obfuscated2/server_handshake_test.go 查看文件

@@ -0,0 +1,95 @@
1
+package obfuscated2_test
2
+
3
+import (
4
+	"bytes"
5
+	"crypto/aes"
6
+	"crypto/cipher"
7
+	"encoding/base64"
8
+	"testing"
9
+
10
+	"github.com/9seconds/mtg/v2/mtglib/internal/obfuscated2"
11
+	"github.com/9seconds/mtg/v2/testlib"
12
+	"github.com/stretchr/testify/mock"
13
+	"github.com/stretchr/testify/suite"
14
+)
15
+
16
+type ServerHandshakeTestSuite struct {
17
+	suite.Suite
18
+}
19
+
20
+func (suite *ServerHandshakeTestSuite) TestOk() {
21
+	buf := &bytes.Buffer{}
22
+	connMock := &testlib.NetConnMock{}
23
+
24
+	encryptor, decryptor, err := obfuscated2.ServerHandshake(buf)
25
+	suite.NotNil(encryptor)
26
+	suite.NotNil(decryptor)
27
+	suite.NoError(err)
28
+
29
+	proxyConn := &obfuscated2.Conn{
30
+		Conn:      connMock,
31
+		Encryptor: encryptor,
32
+		Decryptor: decryptor,
33
+	}
34
+
35
+	serverEncrypted := buf.Bytes()
36
+
37
+	decBlock, _ := aes.NewCipher(serverEncrypted[8 : 8+32])
38
+	serverDecryptor := cipher.NewCTR(decBlock, serverEncrypted[8+32:8+32+16])
39
+	serverDecrypted := make([]byte, len(serverEncrypted))
40
+	serverDecryptor.XORKeyStream(serverDecrypted, serverEncrypted)
41
+
42
+	suite.Equal("3d3d3Q",
43
+		base64.RawStdEncoding.EncodeToString(serverDecrypted[8+32+16:8+32+16+4]))
44
+
45
+	serverEncryptedReverted := make([]byte, len(serverEncrypted))
46
+
47
+	for i := 0; i < 32+16; i++ {
48
+		serverEncryptedReverted[8+i] = serverEncrypted[8+32+16-1-i]
49
+	}
50
+
51
+	encBlock, _ := aes.NewCipher(serverEncryptedReverted[8 : 8+32])
52
+	serverEncryptor := cipher.NewCTR(encBlock, serverEncryptedReverted[8+32:8+32+16])
53
+
54
+	messageFromTelegram := []byte{1, 2, 3, 4, 5}
55
+	// messageToTelegram := []byte{10, 11, 13, 14}
56
+	bufferToRead := make([]byte, 5)
57
+
58
+	connMock.
59
+		On("Read", mock.Anything).
60
+		Return(5, nil).
61
+		Once().
62
+		Run(func(args mock.Arguments) {
63
+			messageToRead := make([]byte, len(messageFromTelegram))
64
+			serverEncryptor.XORKeyStream(messageToRead, messageFromTelegram)
65
+			copy(args.Get(0).([]byte), messageToRead)
66
+		})
67
+
68
+	n, err := proxyConn.Read(bufferToRead)
69
+	suite.EqualValues(5, n)
70
+	suite.NoError(err)
71
+	suite.Equal(messageFromTelegram, bufferToRead)
72
+
73
+	messageToTelegram := []byte{10, 11, 12, 13, 14}
74
+
75
+	connMock.
76
+		On("Write", mock.Anything).
77
+		Return(5, nil).
78
+		Once().
79
+		Run(func(args mock.Arguments) {
80
+			message := make([]byte, len(messageToTelegram))
81
+			serverDecryptor.XORKeyStream(message, args.Get(0).([]byte))
82
+			suite.Equal(messageToTelegram, message)
83
+		})
84
+
85
+	n, err = proxyConn.Write(messageToTelegram)
86
+	suite.EqualValues(5, n)
87
+	suite.NoError(err)
88
+
89
+	connMock.AssertExpectations(suite.T())
90
+}
91
+
92
+func TestServerHandshake(t *testing.T) {
93
+	t.Parallel()
94
+	suite.Run(t, &ServerHandshakeTestSuite{})
95
+}

Loading…
取消
儲存