diff --git a/proxy/vless/encryption/client.go b/proxy/vless/encryption/client.go index 52b4828b..ecccdca0 100644 --- a/proxy/vless/encryption/client.go +++ b/proxy/vless/encryption/client.go @@ -212,19 +212,19 @@ func (c *ClientConn) Read(b []byte) (int, error) { } } if t != 0 { - return 0, errors.New("unexpected type ", t, ", expect server random") + return 0, errors.New("unexpected type ", t, ", expect random hello") } - peerRandom := make([]byte, 32) - if l != len(peerRandom) { - return 0, errors.New("unexpected length ", l, " for server random") + peerRandomHello := make([]byte, 32) + if l != len(peerRandomHello) { + return 0, errors.New("unexpected length ", l, " for random hello") } - if _, err := io.ReadFull(c.Conn, peerRandom); err != nil { + if _, err := io.ReadFull(c.Conn, peerRandomHello); err != nil { return 0, err } if c.random == nil { return 0, errors.New("empty c.random") } - c.peerAead = NewAead(ClientCipher, c.baseKey, peerRandom, c.random) + c.peerAead = NewAead(ClientCipher, c.baseKey, peerRandomHello, c.random) c.peerNonce = make([]byte, 12) } if len(c.peerCache) != 0 { diff --git a/proxy/vless/encryption/server.go b/proxy/vless/encryption/server.go index 71aed4a2..4765ce0e 100644 --- a/proxy/vless/encryption/server.go +++ b/proxy/vless/encryption/server.go @@ -203,20 +203,17 @@ func (c *ServerConn) Read(b []byte) (int, error) { if t != 0 { return 0, errors.New("unexpected type ", t, ", expect ticket hello") } - peerTicket := make([]byte, 21) - if l != len(peerTicket) { + peerTicketHello := make([]byte, 21+32) + if l != len(peerTicketHello) { return 0, errors.New("unexpected length ", l, " for ticket hello") } - 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)