瀏覽代碼

iv check should proceed after decryption

Shelikhoo 4 年之前
父節點
當前提交
7f5bc447d9
共有 1 個文件被更改,包括 6 次插入6 次删除
  1. 6 6
      proxy/shadowsocks/protocol.go

+ 6 - 6
proxy/shadowsocks/protocol.go

@@ -61,12 +61,6 @@ func ReadTCPSession(user *protocol.MemoryUser, reader io.Reader) (*protocol.Requ
 		iv = append([]byte(nil), buffer.BytesTo(ivLen)...)
 		iv = append([]byte(nil), buffer.BytesTo(ivLen)...)
 	}
 	}
 
 
-	if ivError := account.CheckIV(iv); ivError != nil {
-		readSizeRemain -= int(buffer.Len())
-		DrainConnN(reader, readSizeRemain)
-		return nil, nil, newError("failed iv check").Base(ivError)
-	}
-
 	r, err := account.Cipher.NewDecryptionReader(account.Key, iv, reader)
 	r, err := account.Cipher.NewDecryptionReader(account.Key, iv, reader)
 	if err != nil {
 	if err != nil {
 		readSizeRemain -= int(buffer.Len())
 		readSizeRemain -= int(buffer.Len())
@@ -100,6 +94,12 @@ func ReadTCPSession(user *protocol.MemoryUser, reader io.Reader) (*protocol.Requ
 		return nil, nil, newError("invalid remote address.")
 		return nil, nil, newError("invalid remote address.")
 	}
 	}
 
 
+	if ivError := account.CheckIV(iv); ivError != nil {
+		readSizeRemain -= int(buffer.Len())
+		DrainConnN(reader, readSizeRemain)
+		return nil, nil, newError("failed iv check").Base(ivError)
+	}
+
 	return request, br, nil
 	return request, br, nil
 }
 }