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:
@ -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 {
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
Reference in New Issue
Block a user