From 335d54e48886d5ee937b9e3413f5d9e90d996832 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Wed, 13 Aug 2025 19:50:53 +0800 Subject: [PATCH] chore: sync vless encryption code --- transport/vless/encryption/client.go | 14 +++++++------- transport/vless/encryption/doc.go | 1 + transport/vless/encryption/server.go | 13 +++++-------- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/transport/vless/encryption/client.go b/transport/vless/encryption/client.go index c8c351b8..eed160be 100644 --- a/transport/vless/encryption/client.go +++ b/transport/vless/encryption/client.go @@ -114,18 +114,18 @@ func (i *ClientInstance) Handshake(conn net.Conn) (net.Conn, error) { return nil, err } if t != 1 { - return nil, fmt.Errorf("unexpected type %v, expect server hello", t) + return nil, fmt.Errorf("unexpected type %v, expect random hello", t) } - peerServerHello := make([]byte, 1088+21) - if l != len(peerServerHello) { - return nil, fmt.Errorf("unexpected length %v for server hello", l) + peerRandomHello := make([]byte, 1088+21) + if l != len(peerRandomHello) { + return nil, fmt.Errorf("unexpected length %v for random hello", l) } - if _, err := io.ReadFull(c.Conn, peerServerHello); err != nil { + if _, err := io.ReadFull(c.Conn, peerRandomHello); err != nil { return nil, err } - encapsulatedPfsKey := peerServerHello[:1088] - c.ticket = peerServerHello[1088:] + encapsulatedPfsKey := peerRandomHello[:1088] + c.ticket = peerRandomHello[1088:] pfsKey, err := pfsDKey.Decapsulate(encapsulatedPfsKey) if err != nil { diff --git a/transport/vless/encryption/doc.go b/transport/vless/encryption/doc.go index 6c73732b..7009955d 100644 --- a/transport/vless/encryption/doc.go +++ b/transport/vless/encryption/doc.go @@ -7,4 +7,5 @@ // https://github.com/XTLS/Xray-core/commit/23d7aad461d232bc5bed52dd6aaa731ecd88ad35 // https://github.com/XTLS/Xray-core/commit/3c20bddfcfd8999be5f9a2ac180dc959950e4c61 // https://github.com/XTLS/Xray-core/commit/1720be168fa069332c418503d30341fc6e01df7f +// https://github.com/XTLS/Xray-core/commit/0fd7691d6b28e05922d7a5a9313d97745a51ea63 package encryption diff --git a/transport/vless/encryption/server.go b/transport/vless/encryption/server.go index 12c1e757..ea4286ee 100644 --- a/transport/vless/encryption/server.go +++ b/transport/vless/encryption/server.go @@ -203,20 +203,17 @@ func (c *ServerConn) Read(b []byte) (int, error) { if t != 0 { return 0, fmt.Errorf("unexpected type %v, expect ticket hello", t) } - peerTicket := make([]byte, 21) - if l != len(peerTicket) { + peerTicketHello := make([]byte, 21+32) + if l != len(peerTicketHello) { return 0, fmt.Errorf("unexpected length %v for ticket hello", l) } - if _, err := io.ReadFull(c.Conn, peerTicket); err != nil { + if _, err := io.ReadFull(c.Conn, peerTicketHello); err != nil { return 0, err } - if !bytes.Equal(peerTicket, c.ticket) { + if !bytes.Equal(peerTicketHello[:21], c.ticket) { return 0, errors.New("naughty boy") } - c.peerRandom = make([]byte, 32) - if _, err := io.ReadFull(c.Conn, c.peerRandom); err != nil { - return 0, err - } + c.peerRandom = peerTicketHello[21:] } c.peerAead = NewAead(c.cipher, c.baseKey, c.peerRandom, c.ticket) c.peerNonce = make([]byte, 12)