1
0
mirror of https://github.com/MetaCubeX/mihomo.git synced 2025-09-19 20:15: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
}
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 {

View File

@ -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

View File

@ -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)