1
0
mirror of https://github.com/MetaCubeX/mihomo.git synced 2025-09-20 04:25:59 +08:00

chore: sync vless encryption code

This commit is contained in:
wwqgtxx
2025-08-13 19:50:53 +08:00
parent d11f9c895c
commit 335d54e488
3 changed files with 13 additions and 15 deletions

View File

@ -114,18 +114,18 @@ func (i *ClientInstance) Handshake(conn net.Conn) (net.Conn, error) {
return nil, err return nil, err
} }
if t != 1 { 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) peerRandomHello := make([]byte, 1088+21)
if l != len(peerServerHello) { if l != len(peerRandomHello) {
return nil, fmt.Errorf("unexpected length %v for server hello", l) 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 return nil, err
} }
encapsulatedPfsKey := peerServerHello[:1088] encapsulatedPfsKey := peerRandomHello[:1088]
c.ticket = peerServerHello[1088:] c.ticket = peerRandomHello[1088:]
pfsKey, err := pfsDKey.Decapsulate(encapsulatedPfsKey) pfsKey, err := pfsDKey.Decapsulate(encapsulatedPfsKey)
if err != nil { if err != nil {

View File

@ -7,4 +7,5 @@
// https://github.com/XTLS/Xray-core/commit/23d7aad461d232bc5bed52dd6aaa731ecd88ad35 // https://github.com/XTLS/Xray-core/commit/23d7aad461d232bc5bed52dd6aaa731ecd88ad35
// https://github.com/XTLS/Xray-core/commit/3c20bddfcfd8999be5f9a2ac180dc959950e4c61 // https://github.com/XTLS/Xray-core/commit/3c20bddfcfd8999be5f9a2ac180dc959950e4c61
// https://github.com/XTLS/Xray-core/commit/1720be168fa069332c418503d30341fc6e01df7f // https://github.com/XTLS/Xray-core/commit/1720be168fa069332c418503d30341fc6e01df7f
// https://github.com/XTLS/Xray-core/commit/0fd7691d6b28e05922d7a5a9313d97745a51ea63
package encryption package encryption

View File

@ -203,20 +203,17 @@ func (c *ServerConn) Read(b []byte) (int, error) {
if t != 0 { if t != 0 {
return 0, fmt.Errorf("unexpected type %v, expect ticket hello", t) return 0, fmt.Errorf("unexpected type %v, expect ticket hello", t)
} }
peerTicket := make([]byte, 21) peerTicketHello := make([]byte, 21+32)
if l != len(peerTicket) { if l != len(peerTicketHello) {
return 0, fmt.Errorf("unexpected length %v for ticket hello", l) 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 return 0, err
} }
if !bytes.Equal(peerTicket, c.ticket) { if !bytes.Equal(peerTicketHello[:21], c.ticket) {
return 0, errors.New("naughty boy") return 0, errors.New("naughty boy")
} }
c.peerRandom = make([]byte, 32) c.peerRandom = peerTicketHello[21:]
if _, err := io.ReadFull(c.Conn, c.peerRandom); err != nil {
return 0, err
}
} }
c.peerAead = NewAead(c.cipher, c.baseKey, c.peerRandom, c.ticket) c.peerAead = NewAead(c.cipher, c.baseKey, c.peerRandom, c.ticket)
c.peerNonce = make([]byte, 12) c.peerNonce = make([]byte, 12)