sym-encryption #1
| @@ -15,7 +15,6 @@ import ( | ||||
| 	"git.crumpington.com/lib/go/sqliteutil" | ||||
| 	"golang.org/x/crypto/bcrypt" | ||||
| 	"golang.org/x/crypto/nacl/box" | ||||
| 	"golang.org/x/crypto/nacl/sign" | ||||
| ) | ||||
|  | ||||
| //go:embed migrations | ||||
| @@ -146,7 +145,7 @@ type PeerCreateArgs struct { | ||||
| 	Name     string | ||||
| 	PublicIP []byte | ||||
| 	Port     uint16 | ||||
| 	Mediator bool | ||||
| 	Relay    bool | ||||
| } | ||||
|  | ||||
| // Create the intention to add a peer. The returned code is used to complete | ||||
| @@ -184,11 +183,6 @@ func (a *API) Peer_Create(creationCode string) (*m.PeerConfig, error) { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	signPubKey, signPrivKey, err := sign.GenerateKey(rand.Reader) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	// Get peer IP. | ||||
| 	peerIP := byte(0) | ||||
|  | ||||
| @@ -208,15 +202,14 @@ func (a *API) Peer_Create(creationCode string) (*m.PeerConfig, error) { | ||||
| 	} | ||||
|  | ||||
| 	peer := &Peer{ | ||||
| 		PeerIP:     peerIP, | ||||
| 		Version:    idgen.NextID(0), | ||||
| 		APIKey:     idgen.NewToken(), | ||||
| 		Name:       args.Name, | ||||
| 		PublicIP:   args.PublicIP, | ||||
| 		Port:       args.Port, | ||||
| 		Mediator:   args.Mediator, | ||||
| 		EncPubKey:  encPubKey[:], | ||||
| 		SignPubKey: signPubKey[:], | ||||
| 		PeerIP:   peerIP, | ||||
| 		Version:  idgen.NextID(0), | ||||
| 		APIKey:   idgen.NewToken(), | ||||
| 		Name:     args.Name, | ||||
| 		PublicIP: args.PublicIP, | ||||
| 		Port:     args.Port, | ||||
| 		Relay:    args.Relay, | ||||
| 		PubKey:   encPubKey[:], | ||||
| 	} | ||||
|  | ||||
| 	if err := db.Peer_Insert(a.db, peer); err != nil { | ||||
| @@ -226,17 +219,15 @@ func (a *API) Peer_Create(creationCode string) (*m.PeerConfig, error) { | ||||
| 	conf := a.Config_Get() | ||||
|  | ||||
| 	return &m.PeerConfig{ | ||||
| 		PeerIP:      peer.PeerIP, | ||||
| 		HubAddress:  conf.HubAddress, | ||||
| 		APIKey:      peer.APIKey, | ||||
| 		Network:     conf.VPNNetwork, | ||||
| 		PublicIP:    peer.PublicIP, | ||||
| 		Port:        peer.Port, | ||||
| 		Mediator:    peer.Mediator, | ||||
| 		EncPubKey:   encPubKey[:], | ||||
| 		EncPrivKey:  encPrivKey[:], | ||||
| 		SignPubKey:  signPubKey[:], | ||||
| 		SignPrivKey: signPrivKey[:], | ||||
| 		PeerIP:     peer.PeerIP, | ||||
| 		HubAddress: conf.HubAddress, | ||||
| 		APIKey:     peer.APIKey, | ||||
| 		Network:    conf.VPNNetwork, | ||||
| 		PublicIP:   peer.PublicIP, | ||||
| 		Port:       peer.Port, | ||||
| 		Relay:   peer.Relay, | ||||
| 		PubKey:     encPubKey[:], | ||||
| 		PrivKey:    encPrivKey[:], | ||||
| 	}, nil | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -307,18 +307,17 @@ func Session_List( | ||||
| // ---------------------------------------------------------------------------- | ||||
|  | ||||
| type Peer struct { | ||||
| 	PeerIP     byte | ||||
| 	Version    int64 | ||||
| 	APIKey     string | ||||
| 	Name       string | ||||
| 	PublicIP   []byte | ||||
| 	Port       uint16 | ||||
| 	Mediator   bool | ||||
| 	EncPubKey  []byte | ||||
| 	SignPubKey []byte | ||||
| 	PeerIP   byte | ||||
| 	Version  int64 | ||||
| 	APIKey   string | ||||
| 	Name     string | ||||
| 	PublicIP []byte | ||||
| 	Port     uint16 | ||||
| 	Relay    bool | ||||
| 	PubKey   []byte | ||||
| } | ||||
|  | ||||
| const Peer_SelectQuery = "SELECT PeerIP,Version,APIKey,Name,PublicIP,Port,Mediator,EncPubKey,SignPubKey FROM peers" | ||||
| const Peer_SelectQuery = "SELECT PeerIP,Version,APIKey,Name,PublicIP,Port,Relay,PubKey FROM peers" | ||||
|  | ||||
| func Peer_Insert( | ||||
| 	tx TX, | ||||
| @@ -329,7 +328,7 @@ func Peer_Insert( | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	_, err = tx.Exec("INSERT INTO peers(PeerIP,Version,APIKey,Name,PublicIP,Port,Mediator,EncPubKey,SignPubKey) VALUES(?,?,?,?,?,?,?,?,?)", row.PeerIP, row.Version, row.APIKey, row.Name, row.PublicIP, row.Port, row.Mediator, row.EncPubKey, row.SignPubKey) | ||||
| 	_, err = tx.Exec("INSERT INTO peers(PeerIP,Version,APIKey,Name,PublicIP,Port,Relay,PubKey) VALUES(?,?,?,?,?,?,?,?)", row.PeerIP, row.Version, row.APIKey, row.Name, row.PublicIP, row.Port, row.Relay, row.PubKey) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| @@ -342,7 +341,7 @@ func Peer_Update( | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	result, err := tx.Exec("UPDATE peers SET Version=?,Name=?,PublicIP=?,Port=?,Mediator=? WHERE PeerIP=?", row.Version, row.Name, row.PublicIP, row.Port, row.Mediator, row.PeerIP) | ||||
| 	result, err := tx.Exec("UPDATE peers SET Version=?,Name=?,PublicIP=?,Port=?,Relay=? WHERE PeerIP=?", row.Version, row.Name, row.PublicIP, row.Port, row.Relay, row.PeerIP) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @@ -370,7 +369,7 @@ func Peer_UpdateFull( | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	result, err := tx.Exec("UPDATE peers SET Version=?,APIKey=?,Name=?,PublicIP=?,Port=?,Mediator=?,EncPubKey=?,SignPubKey=? WHERE PeerIP=?", row.Version, row.APIKey, row.Name, row.PublicIP, row.Port, row.Mediator, row.EncPubKey, row.SignPubKey, row.PeerIP) | ||||
| 	result, err := tx.Exec("UPDATE peers SET Version=?,APIKey=?,Name=?,PublicIP=?,Port=?,Relay=?,PubKey=? WHERE PeerIP=?", row.Version, row.APIKey, row.Name, row.PublicIP, row.Port, row.Relay, row.PubKey, row.PeerIP) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @@ -420,8 +419,8 @@ func Peer_Get( | ||||
| 	err error, | ||||
| ) { | ||||
| 	row = &Peer{} | ||||
| 	r := tx.QueryRow("SELECT PeerIP,Version,APIKey,Name,PublicIP,Port,Mediator,EncPubKey,SignPubKey FROM peers WHERE PeerIP=?", PeerIP) | ||||
| 	err = r.Scan(&row.PeerIP, &row.Version, &row.APIKey, &row.Name, &row.PublicIP, &row.Port, &row.Mediator, &row.EncPubKey, &row.SignPubKey) | ||||
| 	r := tx.QueryRow("SELECT PeerIP,Version,APIKey,Name,PublicIP,Port,Relay,PubKey FROM peers WHERE PeerIP=?", PeerIP) | ||||
| 	err = r.Scan(&row.PeerIP, &row.Version, &row.APIKey, &row.Name, &row.PublicIP, &row.Port, &row.Relay, &row.PubKey) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| @@ -435,7 +434,7 @@ func Peer_GetWhere( | ||||
| ) { | ||||
| 	row = &Peer{} | ||||
| 	r := tx.QueryRow(query, args...) | ||||
| 	err = r.Scan(&row.PeerIP, &row.Version, &row.APIKey, &row.Name, &row.PublicIP, &row.Port, &row.Mediator, &row.EncPubKey, &row.SignPubKey) | ||||
| 	err = r.Scan(&row.PeerIP, &row.Version, &row.APIKey, &row.Name, &row.PublicIP, &row.Port, &row.Relay, &row.PubKey) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| @@ -455,7 +454,7 @@ func Peer_Iterate( | ||||
| 		defer rows.Close() | ||||
| 		for rows.Next() { | ||||
| 			row := &Peer{} | ||||
| 			err := rows.Scan(&row.PeerIP, &row.Version, &row.APIKey, &row.Name, &row.PublicIP, &row.Port, &row.Mediator, &row.EncPubKey, &row.SignPubKey) | ||||
| 			err := rows.Scan(&row.PeerIP, &row.Version, &row.APIKey, &row.Name, &row.PublicIP, &row.Port, &row.Relay, &row.PubKey) | ||||
| 			if !yield(row, err) { | ||||
| 				return | ||||
| 			} | ||||
|   | ||||
| @@ -51,7 +51,7 @@ func Peer_Sanitize(p *Peer) { | ||||
| 		} | ||||
| 	} | ||||
| 	if p.Port == 0 { | ||||
| 		p.Port = 515 | ||||
| 		p.Port = 456 | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -20,7 +20,6 @@ TABLE peers OF Peer ( | ||||
|   Name       string, | ||||
|   PublicIP   []byte, | ||||
|   Port       uint16, | ||||
|   Mediator   bool, | ||||
|   EncPubKey  []byte NoUpdate, | ||||
|   SignPubKey []byte NoUpdate | ||||
|   Relay      bool, | ||||
|   PubKey     []byte NoUpdate | ||||
| ); | ||||
|   | ||||
| @@ -22,7 +22,6 @@ CREATE TABLE peers ( | ||||
|   Name       TEXT    NOT NULL UNIQUE,      -- For humans. | ||||
|   PublicIP   BLOB    NOT NULL, | ||||
|   Port       INTEGER NOT NULL, | ||||
|   Mediator   INTEGER NOT NULL DEFAULT 0,   -- Boolean if peer will forward packets. Must also have public address. | ||||
|   EncPubKey  BLOB    NOT NULL, | ||||
|   SignPubKey BLOB    NOT NULL | ||||
|   Relay      INTEGER NOT NULL DEFAULT 0,   -- Boolean if peer will forward packets. Must also have public address. | ||||
|   PubKey     BLOB    NOT NULL | ||||
| ) WITHOUT ROWID; | ||||
|   | ||||
| @@ -4,6 +4,8 @@ import ( | ||||
| 	"errors" | ||||
| 	"log" | ||||
| 	"net/http" | ||||
| 	"net/netip" | ||||
| 	"strings" | ||||
| 	"vppn/hub/api" | ||||
| 	"vppn/m" | ||||
|  | ||||
| @@ -155,6 +157,29 @@ func (a *App) _adminPeerList(s *api.Session, w http.ResponseWriter, r *http.Requ | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (a *App) _adminHosts(s *api.Session, w http.ResponseWriter, r *http.Request) error { | ||||
| 	conf := a.api.Config_Get() | ||||
|  | ||||
| 	peers, err := a.api.Peer_List() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	b := strings.Builder{} | ||||
|  | ||||
| 	for _, peer := range peers { | ||||
| 		ip := conf.VPNNetwork | ||||
| 		ip[3] = peer.PeerIP | ||||
| 		b.WriteString(netip.AddrFrom4([4]byte(ip)).String()) | ||||
| 		b.WriteString(" ") | ||||
| 		b.WriteString(peer.Name) | ||||
| 		b.WriteString("\n") | ||||
| 	} | ||||
|  | ||||
| 	w.Write([]byte(b.String())) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (a *App) _adminPeerCreate(s *api.Session, w http.ResponseWriter, r *http.Request) error { | ||||
| 	return a.render("/admin-peer-create.html", w, struct{ Session *api.Session }{s}) | ||||
| } | ||||
| @@ -167,7 +192,7 @@ func (a *App) _adminPeerCreateSubmit(s *api.Session, w http.ResponseWriter, r *h | ||||
| 		Scan("Name", &args.Name). | ||||
| 		Scan("PublicIP", &ipStr). | ||||
| 		Scan("Port", &args.Port). | ||||
| 		Scan("Mediator", &args.Mediator). | ||||
| 		Scan("Relay", &args.Relay). | ||||
| 		Error() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| @@ -249,7 +274,7 @@ func (a *App) _adminPeerEditSubmit(s *api.Session, w http.ResponseWriter, r *htt | ||||
| 		Scan("Name", &peer.Name). | ||||
| 		Scan("PublicIP", &ipStr). | ||||
| 		Scan("Port", &peer.Port). | ||||
| 		Scan("Mediator", &peer.Mediator). | ||||
| 		Scan("Relay", &peer.Relay). | ||||
| 		Error() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| @@ -311,19 +336,16 @@ func (a *App) _peerCreate(w http.ResponseWriter, r *http.Request) error { | ||||
| func (a *App) _peerFetchState(w http.ResponseWriter, r *http.Request) error { | ||||
| 	_, apiKey, ok := r.BasicAuth() | ||||
| 	if !ok { | ||||
| 		log.Printf("1") | ||||
| 		return api.ErrNotAuthorized | ||||
| 	} | ||||
|  | ||||
| 	peer, err := a.api.Peer_GetByAPIKey(apiKey) | ||||
| 	if err != nil { | ||||
| 		log.Printf("2") | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	peers, err := a.api.Peer_List() | ||||
| 	if err != nil { | ||||
| 		log.Printf("3") | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| @@ -339,14 +361,13 @@ func (a *App) _peerFetchState(w http.ResponseWriter, r *http.Request) error { | ||||
|  | ||||
| 	for _, p := range peers { | ||||
| 		state.Peers[p.PeerIP] = &m.Peer{ | ||||
| 			PeerIP:     p.PeerIP, | ||||
| 			Version:    p.Version, | ||||
| 			Name:       p.Name, | ||||
| 			PublicIP:   p.PublicIP, | ||||
| 			Port:       p.Port, | ||||
| 			Mediator:   p.Mediator, | ||||
| 			EncPubKey:  p.EncPubKey, | ||||
| 			SignPubKey: p.SignPubKey, | ||||
| 			PeerIP:   p.PeerIP, | ||||
| 			Version:  p.Version, | ||||
| 			Name:     p.Name, | ||||
| 			PublicIP: p.PublicIP, | ||||
| 			Port:     p.Port, | ||||
| 			Relay:    p.Relay, | ||||
| 			PubKey:   p.PubKey, | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -17,6 +17,7 @@ func (a *App) registerRoutes() { | ||||
| 	a.handleSignedIn("GET  /admin/password/edit/", a._adminPasswordEdit) | ||||
| 	a.handleSignedIn("POST /admin/password/edit/", a._adminPasswordSubmit) | ||||
| 	a.handleSignedIn("GET  /admin/peer/list/", a._adminPeerList) | ||||
| 	a.handleSignedIn("GET  /admin/peer/hosts/", a._adminHosts) | ||||
| 	a.handleSignedIn("GET  /admin/peer/create/", a._adminPeerCreate) | ||||
| 	a.handleSignedIn("POST /admin/peer/create/", a._adminPeerCreateSubmit) | ||||
| 	a.handleSignedIn("GET  /admin/peer/intent-created/", a._adminPeerIntentCreated) | ||||
|   | ||||
| @@ -13,12 +13,12 @@ | ||||
|   </p> | ||||
|   <p> | ||||
|     <label>Port</label><br> | ||||
|     <input type="number" name="Port" value="515"> | ||||
|     <input type="number" name="Port" value="456"> | ||||
|   </p> | ||||
|   <p> | ||||
|     <label> | ||||
|       <input type="checkbox" name="Mediator"> | ||||
|       Mediator | ||||
|       <input type="checkbox" name="Relay"> | ||||
|       Relay | ||||
|     </label> | ||||
|   </p> | ||||
|   <p> | ||||
|   | ||||
| @@ -22,8 +22,8 @@ | ||||
|   </p> | ||||
|   <p> | ||||
|     <label> | ||||
|       <input type="checkbox" {{if .Mediator}}checked{{end}} disabled> | ||||
|       Mediator | ||||
|       <input type="checkbox" {{if .Relay}}checked{{end}} disabled> | ||||
|       Relay | ||||
|     </label> | ||||
|   </p> | ||||
|   <p> | ||||
|   | ||||
| @@ -22,8 +22,8 @@ | ||||
|   </p> | ||||
|   <p> | ||||
|     <label> | ||||
|       <input type="checkbox" name="Mediator" {{if .Mediator}}checked{{end}}> | ||||
|       Mediator | ||||
|       <input type="checkbox" name="Relay" {{if .Relay}}checked{{end}}> | ||||
|       Relay | ||||
|     </label> | ||||
|   </p> | ||||
|   <p> | ||||
|   | ||||
| @@ -2,7 +2,8 @@ | ||||
| <h2>Peers</h2> | ||||
|  | ||||
| <p> | ||||
|   <a href="/admin/peer/create/">Add Peer</a> | ||||
|   <a href="/admin/peer/create/">Add Peer</a> / | ||||
|   <a href="/admin/peer/hosts/">Hosts</a> | ||||
| </p> | ||||
|  | ||||
| {{if .Peers -}} | ||||
| @@ -13,7 +14,7 @@ | ||||
|       <th>Name</th> | ||||
|       <th>Public IP</th> | ||||
|       <th>Port</th> | ||||
|       <th>Mediator</th> | ||||
|       <th>Relay</th> | ||||
|     </tr> | ||||
|   </thead> | ||||
|   <tbody> | ||||
| @@ -27,7 +28,7 @@ | ||||
|     <td>{{.Name}}</td> | ||||
|     <td>{{ipToString .PublicIP}}</td> | ||||
|     <td>{{.Port}}</td> | ||||
|     <td>{{if .Mediator}}T{{else}}F{{end}}</td> | ||||
|     <td>{{if .Relay}}T{{else}}F{{end}}</td> | ||||
|   </tr> | ||||
|   </tbody> | ||||
|   {{- end}} | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
|   <tr><td>Name</td><td>{{.Name}}</td></tr> | ||||
|   <tr><td>Public IP</td><td>{{ipToString .PublicIP}}</td></tr> | ||||
|   <tr><td>Port</td><td>{{.Port}}</td></tr> | ||||
|   <tr><td>Mediator</td><td>{{if .Mediator}}T{{else}}F{{end}}</td></tr> | ||||
|   <tr><td>Relay</td><td>{{if .Relay}}T{{else}}F{{end}}</td></tr> | ||||
|   <tr><td>API Key</td><td>{{.APIKey}}</td></tr> | ||||
| </table> | ||||
| {{- end}} | ||||
|   | ||||
							
								
								
									
										35
									
								
								m/models.go
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								m/models.go
									
									
									
									
									
								
							| @@ -2,28 +2,25 @@ | ||||
| package m | ||||
|  | ||||
| type PeerConfig struct { | ||||
| 	PeerIP      byte | ||||
| 	HubAddress  string | ||||
| 	Network     []byte | ||||
| 	APIKey      string | ||||
| 	PublicIP    []byte | ||||
| 	Port        uint16 | ||||
| 	Mediator    bool | ||||
| 	EncPubKey   []byte | ||||
| 	EncPrivKey  []byte | ||||
| 	SignPubKey  []byte | ||||
| 	SignPrivKey []byte | ||||
| 	PeerIP     byte | ||||
| 	HubAddress string | ||||
| 	Network    []byte | ||||
| 	APIKey     string | ||||
| 	PublicIP   []byte | ||||
| 	Port       uint16 | ||||
| 	Relay      bool | ||||
| 	PubKey     []byte | ||||
| 	PrivKey    []byte | ||||
| } | ||||
|  | ||||
| type Peer struct { | ||||
| 	PeerIP     byte | ||||
| 	Version    int64 | ||||
| 	Name       string | ||||
| 	PublicIP   []byte | ||||
| 	Port       uint16 | ||||
| 	Mediator   bool | ||||
| 	EncPubKey  []byte | ||||
| 	SignPubKey []byte | ||||
| 	PeerIP   byte | ||||
| 	Version  int64 | ||||
| 	Name     string | ||||
| 	PublicIP []byte | ||||
| 	Port     uint16 | ||||
| 	Relay    bool | ||||
| 	PubKey   []byte | ||||
| } | ||||
|  | ||||
| type NetworkState struct { | ||||
|   | ||||
| @@ -106,7 +106,7 @@ func main(listenIP string, port uint16) { | ||||
| 	// Intialize globals. | ||||
| 	localIP = config.PeerIP | ||||
| 	localPub = addrIsValid(config.PublicIP) | ||||
| 	privateKey = config.EncPrivKey | ||||
| 	privateKey = config.PrivKey | ||||
|  | ||||
| 	_iface = newIFWriter(iface) | ||||
| 	_conn = newConnWriter(conn) | ||||
|   | ||||
| @@ -14,8 +14,6 @@ const ( | ||||
| 	packetTypeSyn = iota + 1 | ||||
| 	packetTypeSynAck | ||||
| 	packetTypeAck | ||||
| 	packetTypeAddrReq | ||||
| 	packetTypeAddrResp | ||||
| ) | ||||
|  | ||||
| // ---------------------------------------------------------------------------- | ||||
| @@ -34,10 +32,6 @@ func (p *controlPacket) ParsePayload(buf []byte) (err error) { | ||||
| 		p.Payload, err = parseSynAckPacket(buf) | ||||
| 	case packetTypeAck: | ||||
| 		p.Payload, err = parseAckPacket(buf) | ||||
| 	case packetTypeAddrReq: | ||||
| 		p.Payload, err = parseAddrReqPacket(buf) | ||||
| 	case packetTypeAddrResp: | ||||
| 		p.Payload, err = parseAddrRespPacket(buf) | ||||
| 	default: | ||||
| 		return errUnknownPacketType | ||||
| 	} | ||||
| @@ -118,46 +112,3 @@ func parseAckPacket(buf []byte) (p ackPacket, err error) { | ||||
| 		Error() | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // ---------------------------------------------------------------------------- | ||||
|  | ||||
| type addrReqPacket struct { | ||||
| 	TraceID uint64 | ||||
| } | ||||
|  | ||||
| func (p addrReqPacket) Marshal(buf []byte) []byte { | ||||
| 	return newBinWriter(buf). | ||||
| 		Byte(packetTypeAddrReq). | ||||
| 		Uint64(p.TraceID). | ||||
| 		Build() | ||||
| } | ||||
|  | ||||
| func parseAddrReqPacket(buf []byte) (p addrReqPacket, err error) { | ||||
| 	err = newBinReader(buf[1:]). | ||||
| 		Uint64(&p.TraceID). | ||||
| 		Error() | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // ---------------------------------------------------------------------------- | ||||
|  | ||||
| type addrRespPacket struct { | ||||
| 	TraceID uint64 | ||||
| 	Addr    netip.AddrPort | ||||
| } | ||||
|  | ||||
| func (p addrRespPacket) Marshal(buf []byte) []byte { | ||||
| 	return newBinWriter(buf). | ||||
| 		Byte(packetTypeAddrResp). | ||||
| 		Uint64(p.TraceID). | ||||
| 		AddrPort(p.Addr). | ||||
| 		Build() | ||||
| } | ||||
|  | ||||
| func parseAddrRespPacket(buf []byte) (p addrRespPacket, err error) { | ||||
| 	err = newBinReader(buf[1:]). | ||||
| 		Uint64(&p.TraceID). | ||||
| 		AddrPort(&p.Addr). | ||||
| 		Error() | ||||
| 	return | ||||
| } | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package node | ||||
|  | ||||
| import ( | ||||
| 	"crypto/rand" | ||||
| 	"net/netip" | ||||
| 	"reflect" | ||||
| 	"testing" | ||||
| ) | ||||
| @@ -24,7 +25,8 @@ func TestPacketSyn(t *testing.T) { | ||||
|  | ||||
| func TestPacketSynAck(t *testing.T) { | ||||
| 	in := synAckPacket{ | ||||
| 		TraceID: newTraceID(), | ||||
| 		TraceID:  newTraceID(), | ||||
| 		RecvAddr: netip.AddrPort{}, | ||||
| 	} | ||||
|  | ||||
| 	out, err := parseSynAckPacket(in.Marshal(make([]byte, bufferSize))) | ||||
|   | ||||
| @@ -102,12 +102,12 @@ func (s *peerSupervisor) _peerUpdate(peer *m.Peer) stateFunc { | ||||
| 	} | ||||
|  | ||||
| 	s.staged.IP = s.remoteIP | ||||
| 	s.staged.ControlCipher = newControlCipher(privateKey, peer.EncPubKey) | ||||
| 	s.staged.ControlCipher = newControlCipher(privateKey, peer.PubKey) | ||||
| 	s.staged.DataCipher = newDataCipher() | ||||
|  | ||||
| 	if ip, isValid := netip.AddrFromSlice(peer.PublicIP); isValid { | ||||
| 		s.remotePub = true | ||||
| 		s.staged.Relay = peer.Mediator | ||||
| 		s.staged.Relay = peer.Relay | ||||
| 		s.staged.RemoteAddr = netip.AddrPortFrom(ip, peer.Port) | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user