|
@@ -9,7 +9,7 @@ import (
|
|
|
"sync"
|
|
"sync"
|
|
|
|
|
|
|
|
"github.com/v2ray/v2ray-core/common/alloc"
|
|
"github.com/v2ray/v2ray-core/common/alloc"
|
|
|
- v2io "github.com/v2ray/v2ray-core/common/io"
|
|
|
|
|
|
|
+ v2crypto "github.com/v2ray/v2ray-core/common/crypto"
|
|
|
"github.com/v2ray/v2ray-core/common/log"
|
|
"github.com/v2ray/v2ray-core/common/log"
|
|
|
v2net "github.com/v2ray/v2ray-core/common/net"
|
|
v2net "github.com/v2ray/v2ray-core/common/net"
|
|
|
"github.com/v2ray/v2ray-core/proxy/common/connhandler"
|
|
"github.com/v2ray/v2ray-core/proxy/common/connhandler"
|
|
@@ -114,11 +114,12 @@ func startCommunicate(request *protocol.VMessRequest, dest v2net.Destination, ra
|
|
|
|
|
|
|
|
func handleRequest(conn net.Conn, request *protocol.VMessRequest, firstPacket v2net.Packet, input <-chan *alloc.Buffer, finish *sync.Mutex) {
|
|
func handleRequest(conn net.Conn, request *protocol.VMessRequest, firstPacket v2net.Packet, input <-chan *alloc.Buffer, finish *sync.Mutex) {
|
|
|
defer finish.Unlock()
|
|
defer finish.Unlock()
|
|
|
- encryptRequestWriter, err := v2io.NewAesEncryptWriter(request.RequestKey[:], request.RequestIV[:], conn)
|
|
|
|
|
|
|
+ aesStream, err := v2crypto.NewAesEncryptionStream(request.RequestKey[:], request.RequestIV[:])
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- log.Error("VMessOut: Failed to create encrypt writer: %v", err)
|
|
|
|
|
|
|
+ log.Error("VMessOut: Failed to create AES encryption stream: %v", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
+ encryptRequestWriter := v2crypto.NewCryptionWriter(aesStream, conn)
|
|
|
|
|
|
|
|
buffer := alloc.NewBuffer().Clear()
|
|
buffer := alloc.NewBuffer().Clear()
|
|
|
buffer, err = request.ToBytes(user.NewTimeHash(user.HMACHash{}), user.GenerateRandomInt64InRange, buffer)
|
|
buffer, err = request.ToBytes(user.NewTimeHash(user.HMACHash{}), user.GenerateRandomInt64InRange, buffer)
|
|
@@ -136,7 +137,7 @@ func handleRequest(conn net.Conn, request *protocol.VMessRequest, firstPacket v2
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if firstChunk != nil {
|
|
if firstChunk != nil {
|
|
|
- encryptRequestWriter.Crypt(firstChunk.Value)
|
|
|
|
|
|
|
+ aesStream.XORKeyStream(firstChunk.Value, firstChunk.Value)
|
|
|
buffer.Append(firstChunk.Value)
|
|
buffer.Append(firstChunk.Value)
|
|
|
firstChunk.Release()
|
|
firstChunk.Release()
|
|
|
|
|
|
|
@@ -160,11 +161,12 @@ func handleResponse(conn net.Conn, request *protocol.VMessRequest, output chan<-
|
|
|
responseKey := md5.Sum(request.RequestKey[:])
|
|
responseKey := md5.Sum(request.RequestKey[:])
|
|
|
responseIV := md5.Sum(request.RequestIV[:])
|
|
responseIV := md5.Sum(request.RequestIV[:])
|
|
|
|
|
|
|
|
- decryptResponseReader, err := v2io.NewAesDecryptReader(responseKey[:], responseIV[:], conn)
|
|
|
|
|
|
|
+ aesStream, err := v2crypto.NewAesDecryptionStream(responseKey[:], responseIV[:])
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- log.Error("VMessOut: Failed to create decrypt reader: %v", err)
|
|
|
|
|
|
|
+ log.Error("VMessOut: Failed to create AES encryption stream: %v", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
+ decryptResponseReader := v2crypto.NewCryptionReader(aesStream, conn)
|
|
|
|
|
|
|
|
buffer, err := v2net.ReadFrom(decryptResponseReader, nil)
|
|
buffer, err := v2net.ReadFrom(decryptResponseReader, nil)
|
|
|
if err != nil {
|
|
if err != nil {
|