diff --git a/router/crypto.go b/router/crypto.go index f019502e..1f1b9b10 100644 --- a/router/crypto.go +++ b/router/crypto.go @@ -19,11 +19,11 @@ func GenerateKeyPair() (publicKey, privateKey *[32]byte, err error) { return box.GenerateKey(rand.Reader) } -func FormSessionKey(remotePublicKey, localPrivateKey *[32]byte, secretKey *[]byte) *[32]byte { +func FormSessionKey(remotePublicKey, localPrivateKey *[32]byte, secretKey []byte) *[32]byte { var sharedKey [32]byte box.Precompute(&sharedKey, remotePublicKey, localPrivateKey) sharedKeySlice := sharedKey[:] - sharedKeySlice = append(sharedKeySlice, *secretKey...) + sharedKeySlice = append(sharedKeySlice, secretKey...) sessionKey := sha256.Sum256(sharedKeySlice) return &sessionKey } diff --git a/router/router.go b/router/router.go index 5fc5dc0b..feb37cb2 100644 --- a/router/router.go +++ b/router/router.go @@ -27,7 +27,7 @@ type Router struct { GossipChannels map[uint32]*GossipChannel TopologyGossip Gossip UDPListener *net.UDPConn - Password *[]byte + Password []byte ConnLimit int BufSz int LogFrame func(string, []byte, *layers.Ethernet) @@ -50,12 +50,10 @@ func NewRouter(iface *net.Interface, name PeerName, nickName string, password [] router := &Router{ Iface: iface, GossipChannels: make(map[uint32]*GossipChannel), + Password: password, ConnLimit: connLimit, BufSz: bufSz, LogFrame: logFrame} - if len(password) > 0 { - router.Password = &password - } onMacExpiry := func(mac net.HardwareAddr, peer *Peer) { log.Println("Expired MAC", mac, "at", peer.Name) } diff --git a/weaver/main.go b/weaver/main.go index da9c5836..f4ebb436 100644 --- a/weaver/main.go +++ b/weaver/main.go @@ -104,9 +104,12 @@ func main() { if password == "" { password = os.Getenv("WEAVE_PASSWORD") } + + var pwSlice []byte if password == "" { log.Println("Communication between peers is unencrypted.") } else { + pwSlice = []byte(password) log.Println("Communication between peers is encrypted.") } @@ -130,7 +133,7 @@ func main() { defer profile.Start(&p).Stop() } - router := weave.NewRouter(iface, ourName, nickName, []byte(password), connLimit, bufSz*1024*1024, logFrame) + router := weave.NewRouter(iface, ourName, nickName, pwSlice, connLimit, bufSz*1024*1024, logFrame) log.Println("Our name is", router.Ourself.Name, "("+router.Ourself.NickName+")") router.Start() for _, peer := range peers { @@ -146,7 +149,7 @@ func main() { func handleHttp(router *weave.Router) { encryption := "off" - if router.Password != nil && len(*router.Password) > 0 { + if router.Password != nil { encryption = "on" } http.HandleFunc("/status", func(w http.ResponseWriter, r *http.Request) {