浏览代码

max padding len as variable

Darien Raymond 7 年之前
父节点
当前提交
8a879deac1
共有 3 个文件被更改,包括 11 次插入1 次删除
  1. 6 1
      common/crypto/auth.go
  2. 1 0
      common/crypto/chunk.go
  3. 4 0
      proxy/vmess/encoding/auth.go

+ 6 - 1
common/crypto/auth.go

@@ -238,7 +238,12 @@ func (w *AuthenticationWriter) seal(b *buf.Buffer) (*buf.Buffer, error) {
 func (w *AuthenticationWriter) writeStream(mb buf.MultiBuffer) error {
 	defer mb.Release()
 
-	payloadSize := buf.Size - int32(w.auth.Overhead()) - w.sizeParser.SizeBytes() - 64 /* padding buffer */
+	var maxPadding int32
+	if w.padding != nil {
+		maxPadding = int32(w.padding.MaxPaddingLen())
+	}
+
+	payloadSize := buf.Size - int32(w.auth.Overhead()) - w.sizeParser.SizeBytes() - maxPadding
 	mb2Write := buf.NewMultiBufferCap(int32(len(mb) + 10))
 
 	for {

+ 1 - 0
common/crypto/chunk.go

@@ -21,6 +21,7 @@ type ChunkSizeEncoder interface {
 }
 
 type PaddingLengthGenerator interface {
+	MaxPaddingLen() uint16
 	NextPaddingLen() uint16
 }
 

+ 4 - 0
proxy/vmess/encoding/auth.go

@@ -111,3 +111,7 @@ func (s *ShakeSizeParser) Encode(size uint16, b []byte) []byte {
 func (s *ShakeSizeParser) NextPaddingLen() uint16 {
 	return s.next() % 64
 }
+
+func (s *ShakeSizeParser) MaxPaddingLne() uint16 {
+	return 64
+}