-func (h *Handshake) Server(conn *net.UDPConn, data []byte) *Peer {
- switch len(data) {
- case 65: // R + ENC(PSK, dh_client_pub) + xtea(ID, R) + NULL + NULLs
- if h.rNonce != nil {
- log.Println("Invalid handshake stage from", h.addr)
- return nil
- }
-
- // Try to determine client's ID
- id := IDsCache.Find(data[:8], data[8+32:8+32+8])
- if id == nil {
- log.Println("Unknown identity from", h.addr)
- return nil
- }
+func (h *Handshake) Server(id *PeerId, conn *net.UDPConn, data []byte) *Peer {
+ // R + ENC(PSK, dh_client_pub) + IDtag
+ if len(data) == 48 && h.rNonce == nil {