|
|
@@ -1,9 +1,11 @@
|
|
1
|
1
|
package stream
|
|
2
|
2
|
|
|
3
|
3
|
import (
|
|
|
4
|
+ "bytes"
|
|
4
|
5
|
"crypto/cipher"
|
|
5
|
6
|
"fmt"
|
|
6
|
7
|
"net"
|
|
|
8
|
+ "sync"
|
|
7
|
9
|
"time"
|
|
8
|
10
|
|
|
9
|
11
|
"go.uber.org/zap"
|
|
|
@@ -11,6 +13,26 @@ import (
|
|
11
|
13
|
"github.com/9seconds/mtg/conntypes"
|
|
12
|
14
|
)
|
|
13
|
15
|
|
|
|
16
|
+var (
|
|
|
17
|
+ poolWrapperObfuscated2WritePool = sync.Pool{
|
|
|
18
|
+ New: func() interface{} {
|
|
|
19
|
+ return &bytes.Buffer{}
|
|
|
20
|
+ },
|
|
|
21
|
+ }
|
|
|
22
|
+)
|
|
|
23
|
+
|
|
|
24
|
+func poolWrapperObfuscated2WritePoolAcquire(size int) *bytes.Buffer {
|
|
|
25
|
+ buf := poolWrapperObfuscated2WritePool.Get().(*bytes.Buffer)
|
|
|
26
|
+ buf.Grow(size)
|
|
|
27
|
+
|
|
|
28
|
+ return buf
|
|
|
29
|
+}
|
|
|
30
|
+
|
|
|
31
|
+func poolWrapperObfuscated2WritePoolRelease(buf *bytes.Buffer) {
|
|
|
32
|
+ buf.Reset()
|
|
|
33
|
+ poolWrapperObfuscated2WritePool.Put(buf)
|
|
|
34
|
+}
|
|
|
35
|
+
|
|
14
|
36
|
type wrapperObfuscated2 struct {
|
|
15
|
37
|
encryptor cipher.Stream
|
|
16
|
38
|
decryptor cipher.Stream
|
|
|
@@ -40,7 +62,10 @@ func (w *wrapperObfuscated2) Read(p []byte) (int, error) {
|
|
40
|
62
|
}
|
|
41
|
63
|
|
|
42
|
64
|
func (w *wrapperObfuscated2) WriteTimeout(p []byte, timeout time.Duration) (int, error) {
|
|
43
|
|
- buf := make([]byte, len(p))
|
|
|
65
|
+ buffer := poolWrapperObfuscated2WritePoolAcquire(len(p))
|
|
|
66
|
+ defer poolWrapperObfuscated2WritePoolRelease(buffer)
|
|
|
67
|
+
|
|
|
68
|
+ buf := buffer.Bytes()
|
|
44
|
69
|
copy(buf, p)
|
|
45
|
70
|
w.encryptor.XORKeyStream(buf, buf)
|
|
46
|
71
|
|
|
|
@@ -48,7 +73,10 @@ func (w *wrapperObfuscated2) WriteTimeout(p []byte, timeout time.Duration) (int,
|
|
48
|
73
|
}
|
|
49
|
74
|
|
|
50
|
75
|
func (w *wrapperObfuscated2) Write(p []byte) (int, error) {
|
|
51
|
|
- buf := make([]byte, len(p))
|
|
|
76
|
+ buffer := poolWrapperObfuscated2WritePoolAcquire(len(p))
|
|
|
77
|
+ defer poolWrapperObfuscated2WritePoolRelease(buffer)
|
|
|
78
|
+
|
|
|
79
|
+ buf := buffer.Bytes()
|
|
52
|
80
|
copy(buf, p)
|
|
53
|
81
|
w.encryptor.XORKeyStream(buf, buf)
|
|
54
|
82
|
|