From cc0078691ac011796c0b023eb4846c45415d931f Mon Sep 17 00:00:00 2001
From: Benjamin Wenger <ben@elixxir.ioo>
Date: Wed, 23 Sep 2020 14:22:25 -0700
Subject: [PATCH] reorogonized context

---
 api/client.go                                 | 113 +++++++-----------
 api/user.go                                   |  28 +++++
 bindings/interfaces.go                        |   2 +-
 interfaces/healthTracker.go                   |   7 ++
 .../message/encryptionType.go                 |   0
 .../message/receiveMessage.go                 |   0
 .../message/sendMessage.go                    |   0
 {context => interfaces}/message/type.go       |   0
 {context => interfaces}/networkManager.go     |  15 +--
 {context => interfaces}/params/CMIX.go        |   0
 {context => interfaces}/params/CMIX_test.go   |   0
 {context => interfaces}/params/E2E.go         |   0
 {context => interfaces}/params/E2E_test.go    |   0
 {context => interfaces}/params/Unsafe.go      |   0
 {context => interfaces}/params/message.go     |   0
 {context => interfaces}/params/network.go     |   0
 {context => interfaces}/params/node.go        |   0
 {context => interfaces}/params/rounds.go      |   0
 .../keyExchange => keyExchange}/confirm.go    |   4 +-
 .../keyExchange => keyExchange}/exchange.go   |   8 +-
 .../keyExchange => keyExchange}/generate.sh   |   0
 {network/keyExchange => keyExchange}/rekey.go |  21 ++--
 .../keyExchange => keyExchange}/trigger.go    |  16 +--
 .../keyExchange => keyExchange}/xchange.pb.go |   0
 .../keyExchange => keyExchange}/xchange.proto |   0
 network/health/healthTracker.go               |   2 +-
 network/manager.go                            |  22 ++--
 network/message/critical.go                   |   8 +-
 network/message/garbled.go                    |   2 +-
 network/message/manager.go                    |   4 +-
 network/message/parse/firstMessagePart.go     |   2 +-
 network/message/parse/partition.go            |   2 +-
 network/message/reception.go                  |   4 +-
 network/message/sendCmix.go                   |   2 +-
 network/message/sendE2E.go                    |   6 +-
 network/message/sendUnsafe.go                 |   4 +-
 network/node/register.go                      |   2 +-
 network/node/register_test.go                 |   2 +-
 network/rounds/manager.go                     |   4 +-
 network/send.go                               |   4 +-
 {context/utility => network}/trackResults.go  |   2 +-
 {context/stoppable => stoppable}/cleanup.go   |  10 +-
 .../stoppable => stoppable}/cleanup_test.go   |   0
 {context/stoppable => stoppable}/multi.go     |   4 +-
 .../stoppable => stoppable}/multi_test.go     |   0
 {context/stoppable => stoppable}/single.go    |   0
 .../stoppable => stoppable}/single_test.go    |   0
 {context/stoppable => stoppable}/stoppable.go |   0
 storage/e2e/manager.go                        |   2 +-
 storage/partition/multiPartMessage.go         |   2 +-
 storage/partition/store.go                    |   2 +-
 storage/utility/e2eMessageBuffer.go           |   4 +-
 storage/utility/e2eMessageBuffer_test.go      |   4 +-
 switchboard/any.go                            |   2 +-
 switchboard/byType.go                         |   2 +-
 switchboard/byType_test.go                    |   2 +-
 switchboard/listener.go                       |   2 +-
 switchboard/listener_test.go                  |   2 +-
 switchboard/switchboard.go                    |   4 +-
 switchboard/switchboard_test.go               |   2 +-
 60 files changed, 167 insertions(+), 163 deletions(-)
 create mode 100644 interfaces/healthTracker.go
 rename {context => interfaces}/message/encryptionType.go (100%)
 rename {context => interfaces}/message/receiveMessage.go (100%)
 rename {context => interfaces}/message/sendMessage.go (100%)
 rename {context => interfaces}/message/type.go (100%)
 rename {context => interfaces}/networkManager.go (61%)
 rename {context => interfaces}/params/CMIX.go (100%)
 rename {context => interfaces}/params/CMIX_test.go (100%)
 rename {context => interfaces}/params/E2E.go (100%)
 rename {context => interfaces}/params/E2E_test.go (100%)
 rename {context => interfaces}/params/Unsafe.go (100%)
 rename {context => interfaces}/params/message.go (100%)
 rename {context => interfaces}/params/network.go (100%)
 rename {context => interfaces}/params/node.go (100%)
 rename {context => interfaces}/params/rounds.go (100%)
 rename {network/keyExchange => keyExchange}/confirm.go (96%)
 rename {network/keyExchange => keyExchange}/exchange.go (88%)
 rename {network/keyExchange => keyExchange}/generate.sh (100%)
 rename {network/keyExchange => keyExchange}/rekey.go (86%)
 rename {network/keyExchange => keyExchange}/trigger.go (91%)
 rename {network/keyExchange => keyExchange}/xchange.pb.go (100%)
 rename {network/keyExchange => keyExchange}/xchange.proto (100%)
 rename {context/utility => network}/trackResults.go (97%)
 rename {context/stoppable => stoppable}/cleanup.go (90%)
 rename {context/stoppable => stoppable}/cleanup_test.go (100%)
 rename {context/stoppable => stoppable}/multi.go (96%)
 rename {context/stoppable => stoppable}/multi_test.go (100%)
 rename {context/stoppable => stoppable}/single.go (100%)
 rename {context/stoppable => stoppable}/single_test.go (100%)
 rename {context/stoppable => stoppable}/stoppable.go (100%)

diff --git a/api/client.go b/api/client.go
index 1d1e91815..d2735cd86 100644
--- a/api/client.go
+++ b/api/client.go
@@ -7,17 +7,13 @@
 package api
 
 import (
-	"bufio"
-	"crypto"
-	"crypto/sha256"
-	"encoding/base64"
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context"
-	"gitlab.com/elixxir/client/context/params"
-	"gitlab.com/elixxir/client/context/stoppable"
+	"gitlab.com/elixxir/client/interfaces"
+	"gitlab.com/elixxir/client/interfaces/params"
 	"gitlab.com/elixxir/client/network"
 	"gitlab.com/elixxir/client/permissioning"
+	"gitlab.com/elixxir/client/stoppable"
 	"gitlab.com/elixxir/client/storage"
 	"gitlab.com/elixxir/client/switchboard"
 	"gitlab.com/elixxir/comms/client"
@@ -27,10 +23,8 @@ import (
 	"gitlab.com/elixxir/crypto/fastRNG"
 	"gitlab.com/elixxir/crypto/large"
 	"gitlab.com/xx_network/crypto/signature/rsa"
-	"gitlab.com/xx_network/crypto/tls"
 	"gitlab.com/xx_network/primitives/id"
 	"gitlab.com/xx_network/primitives/ndf"
-	"strings"
 )
 
 type Client struct {
@@ -47,7 +41,7 @@ type Client struct {
 	// note that the manager has a pointer to the context in many cases, but
 	// this interface allows it to be mocked for easy testing without the
 	// loop
-	network context.NetworkManager
+	network interfaces.NetworkManager
 	//object used to register and communicate with permissioning
 	permissioning *permissioning.Permissioning
 }
@@ -57,11 +51,41 @@ type Client struct {
 // merely creates a new cryptographic identity for adding such information
 // at a later date.
 func NewClient(defJSON, storageDir string, password []byte) (*Client, error) {
-	if clientStorageExists(storageDir) {
-		return nil, errors.Errorf("client already exists at %s",
-			storageDir)
+	// Use fastRNG for RNG ops (AES fortuna based RNG using system RNG)
+	rngStreamGen := fastRNG.NewStreamGenerator(12, 3, csprng.NewSystemRNG)
+	rngStream := rngStreamGen.GetStream()
+
+	// Parse the NDF
+	def, err := parseNDF(defJSON)
+	if err != nil {
+		return nil, err
 	}
+	cmixGrp, e2eGrp := decodeGroups(def)
+
+	protoUser := createNewUser(rngStream, cmixGrp, e2eGrp)
 
+	// Create Storage
+	passwordStr := string(password)
+	storageSess, err := storage.New(storageDir, passwordStr,
+		protoUser.UID, protoUser.Salt, protoUser.RSAKey, protoUser.IsPrecanned,
+		protoUser.CMixKey, protoUser.E2EKey, cmixGrp, e2eGrp, rngStreamGen)
+	if err != nil {
+		return nil, err
+	}
+
+	// Save NDF to be used in the future
+	storageSess.SetBaseNDF(def)
+
+	//execute the rest of the loading as normal
+	return loadClient(storageSess, rngStreamGen)
+}
+
+// NewPrecannedClient creates an insecure user with predetermined keys with nodes
+// It creates client storage, generates keys, connects, and registers
+// with the network. Note that this does not register a username/identity, but
+// merely creates a new cryptographic identity for adding such information
+// at a later date.
+func NewPrecannedClient(precannedID uint, defJSON, storageDir string, password []byte) (*Client, error) {
 	// Use fastRNG for RNG ops (AES fortuna based RNG using system RNG)
 	rngStreamGen := fastRNG.NewStreamGenerator(12, 3, csprng.NewSystemRNG)
 	rngStream := rngStreamGen.GetStream()
@@ -73,7 +97,7 @@ func NewClient(defJSON, storageDir string, password []byte) (*Client, error) {
 	}
 	cmixGrp, e2eGrp := decodeGroups(def)
 
-	protoUser := createNewUser(rngStream, cmixGrp, e2eGrp)
+	protoUser := createPrecannedUser(precannedID, rngStream, cmixGrp, e2eGrp)
 
 	// Create Storage
 	passwordStr := string(password)
@@ -91,13 +115,9 @@ func NewClient(defJSON, storageDir string, password []byte) (*Client, error) {
 	return loadClient(storageSess, rngStreamGen)
 }
 
+
 // LoadClient initalizes a client object from existing storage.
 func LoadClient(storageDir string, password []byte) (*Client, error) {
-	if !clientStorageExists(storageDir) {
-		return nil, errors.Errorf("client does not exist at %s",
-			storageDir)
-	}
-
 	// Use fastRNG for RNG ops (AES fortuna based RNG using system RNG)
 	rngStreamGen := fastRNG.NewStreamGenerator(12, 3, csprng.NewSystemRNG)
 
@@ -392,69 +412,18 @@ func (c *Client) RegisterRoundEventsCb(
 }
 
 // ----- Utility Functions -----
-
-// clientStorageExists returns true if an EKV (storage.Session) exists in the
-// given location or not.
-func clientStorageExists(storageDir string) bool {
-	// Check if diretory exists.
-
-	// If directory exists, check if either .ekv.1 or .ekv.2 files exist in
-	// the directory.
-
-	return false
-}
-
-// parseNDF parses the initial ndf string for the client. This includes a
-// network public key that is also used to verify integrity of the ndf.
+// parseNDF parses the initial ndf string for the client. do not check the
+// signature, it is deprecated.
 func parseNDF(ndfString string) (*ndf.NetworkDefinition, error) {
 	if ndfString == "" {
 		return nil, errors.New("ndf file empty")
 	}
 
-	ndfReader := bufio.NewReader(strings.NewReader(ndfString))
-
-	// ndfData is the json string defining the ndf
-	ndfData, err := ndfReader.ReadBytes('\n')
-	ndfData = ndfData[:len(ndfData)-1]
-	if err != nil {
-		return nil, err
-	}
-
-	// ndfSignature is the second line of the file, used to verify
-	// integrity.
-	ndfSignature, err := ndfReader.ReadBytes('\n')
-	if err != nil {
-		return nil, err
-	}
-	ndfSignature, err = base64.StdEncoding.DecodeString(
-		string(ndfSignature[:len(ndfSignature)-1]))
-	if err != nil {
-		return nil, err
-	}
-
 	ndf, _, err := ndf.DecodeNDF(ndfString)
 	if err != nil {
 		return nil, err
 	}
 
-	// Load the TLS cert given to us, and from that get the RSA public key
-	cert, err := tls.LoadCertificate(ndf.Registration.TlsCertificate)
-	if err != nil {
-		return nil, err
-	}
-	pubKey := cert.PublicKey.(*rsa.PublicKey)
-
-	// Hash NDF JSON
-	rsaHash := sha256.New()
-	rsaHash.Write(ndfData)
-
-	// Verify signature
-	err = rsa.Verify(pubKey, crypto.SHA256,
-		rsaHash.Sum(nil), ndfSignature, nil)
-	if err != nil {
-		return nil, err
-	}
-
 	return ndf, nil
 }
 
diff --git a/api/user.go b/api/user.go
index bc1903277..7151a8843 100644
--- a/api/user.go
+++ b/api/user.go
@@ -7,6 +7,7 @@
 package api
 
 import (
+	"encoding/binary"
 	jww "github.com/spf13/jwalterweatherman"
 	"gitlab.com/elixxir/crypto/csprng"
 	"gitlab.com/elixxir/crypto/cyclic"
@@ -80,3 +81,30 @@ func createNewUser(rng csprng.Source, cmix, e2e *cyclic.Group) user {
 }
 
 // TODO: Add precanned user code structures here.
+// creates a precanned user
+func createPrecannedUser(precannedID uint, rng csprng.Source, cmix, e2e *cyclic.Group) user {
+	// DH Keygen
+	// FIXME: Why 256 bits? -- this is spec but not explained, it has
+	// to do with optimizing operations on one side and still preserves
+	// decent security -- cite this. Why valid for BOTH e2e and cmix?
+	e2eKeyBytes, err := csprng.GenerateInGroup(e2e.GetPBytes(), 256, rng)
+	if err != nil {
+		jww.FATAL.Panicf(err.Error())
+	}
+
+	// Salt, UID, etc gen
+	salt := make([]byte, SaltSize)
+
+	userID := id.ID{}
+	binary.BigEndian.PutUint64(userID[:], uint64(precannedID))
+	userID.SetType(id.User)
+
+	return user{
+		UID:         &userID,
+		Salt:        salt,
+		RSAKey:      &rsa.PrivateKey{},
+		CMixKey:     cmix.NewInt(1),
+		E2EKey:      e2e.NewIntFromBytes(e2eKeyBytes),
+		IsPrecanned: true,
+	}
+}
\ No newline at end of file
diff --git a/bindings/interfaces.go b/bindings/interfaces.go
index 5156dd6b8..e7d3f4e27 100644
--- a/bindings/interfaces.go
+++ b/bindings/interfaces.go
@@ -8,7 +8,7 @@ package bindings
 
 import (
 	"gitlab.com/elixxir/client/api"
-	"gitlab.com/elixxir/client/context/stoppable"
+	"gitlab.com/elixxir/client/stoppable"
 )
 
 // Client is defined inside the api package. At minimum, it implements all of
diff --git a/interfaces/healthTracker.go b/interfaces/healthTracker.go
new file mode 100644
index 000000000..6208e6cdc
--- /dev/null
+++ b/interfaces/healthTracker.go
@@ -0,0 +1,7 @@
+package interfaces
+
+type HealthTracker interface {
+	AddChannel(chan bool)
+	AddFunc(f func(bool))
+	IsHealthy() bool
+}
diff --git a/context/message/encryptionType.go b/interfaces/message/encryptionType.go
similarity index 100%
rename from context/message/encryptionType.go
rename to interfaces/message/encryptionType.go
diff --git a/context/message/receiveMessage.go b/interfaces/message/receiveMessage.go
similarity index 100%
rename from context/message/receiveMessage.go
rename to interfaces/message/receiveMessage.go
diff --git a/context/message/sendMessage.go b/interfaces/message/sendMessage.go
similarity index 100%
rename from context/message/sendMessage.go
rename to interfaces/message/sendMessage.go
diff --git a/context/message/type.go b/interfaces/message/type.go
similarity index 100%
rename from context/message/type.go
rename to interfaces/message/type.go
diff --git a/context/networkManager.go b/interfaces/networkManager.go
similarity index 61%
rename from context/networkManager.go
rename to interfaces/networkManager.go
index b2803eb68..d2414bd97 100644
--- a/context/networkManager.go
+++ b/interfaces/networkManager.go
@@ -1,9 +1,9 @@
-package context
+package interfaces
 
 import (
-	"gitlab.com/elixxir/client/context/message"
-	"gitlab.com/elixxir/client/context/params"
-	"gitlab.com/elixxir/client/context/stoppable"
+	"gitlab.com/elixxir/client/interfaces/message"
+	"gitlab.com/elixxir/client/interfaces/params"
+	"gitlab.com/elixxir/client/stoppable"
 	"gitlab.com/elixxir/comms/network"
 	"gitlab.com/elixxir/primitives/format"
 	"gitlab.com/xx_network/primitives/id"
@@ -18,8 +18,5 @@ type NetworkManager interface {
 	GetStoppable() stoppable.Stoppable
 }
 
-type HealthTracker interface {
-	AddChannel(chan bool)
-	AddFunc(f func(bool))
-	IsHealthy() bool
-}
+//for use in key exchange which needs to be callable inside of network
+type SendE2E func(m message.Send, p params.E2E) ([]id.Round, error)
\ No newline at end of file
diff --git a/context/params/CMIX.go b/interfaces/params/CMIX.go
similarity index 100%
rename from context/params/CMIX.go
rename to interfaces/params/CMIX.go
diff --git a/context/params/CMIX_test.go b/interfaces/params/CMIX_test.go
similarity index 100%
rename from context/params/CMIX_test.go
rename to interfaces/params/CMIX_test.go
diff --git a/context/params/E2E.go b/interfaces/params/E2E.go
similarity index 100%
rename from context/params/E2E.go
rename to interfaces/params/E2E.go
diff --git a/context/params/E2E_test.go b/interfaces/params/E2E_test.go
similarity index 100%
rename from context/params/E2E_test.go
rename to interfaces/params/E2E_test.go
diff --git a/context/params/Unsafe.go b/interfaces/params/Unsafe.go
similarity index 100%
rename from context/params/Unsafe.go
rename to interfaces/params/Unsafe.go
diff --git a/context/params/message.go b/interfaces/params/message.go
similarity index 100%
rename from context/params/message.go
rename to interfaces/params/message.go
diff --git a/context/params/network.go b/interfaces/params/network.go
similarity index 100%
rename from context/params/network.go
rename to interfaces/params/network.go
diff --git a/context/params/node.go b/interfaces/params/node.go
similarity index 100%
rename from context/params/node.go
rename to interfaces/params/node.go
diff --git a/context/params/rounds.go b/interfaces/params/rounds.go
similarity index 100%
rename from context/params/rounds.go
rename to interfaces/params/rounds.go
diff --git a/network/keyExchange/confirm.go b/keyExchange/confirm.go
similarity index 96%
rename from network/keyExchange/confirm.go
rename to keyExchange/confirm.go
index 2e4e743f0..8083b3d8a 100644
--- a/network/keyExchange/confirm.go
+++ b/keyExchange/confirm.go
@@ -4,8 +4,8 @@ import (
 	"github.com/golang/protobuf/proto"
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context/message"
-	"gitlab.com/elixxir/client/context/stoppable"
+	"gitlab.com/elixxir/client/interfaces/message"
+	"gitlab.com/elixxir/client/stoppable"
 	"gitlab.com/elixxir/client/storage"
 	"gitlab.com/elixxir/client/storage/e2e"
 )
diff --git a/network/keyExchange/exchange.go b/keyExchange/exchange.go
similarity index 88%
rename from network/keyExchange/exchange.go
rename to keyExchange/exchange.go
index c498d37a3..604d1b1d2 100644
--- a/network/keyExchange/exchange.go
+++ b/keyExchange/exchange.go
@@ -1,9 +1,9 @@
 package keyExchange
 
 import (
-	"gitlab.com/elixxir/client/context"
-	"gitlab.com/elixxir/client/context/message"
-	"gitlab.com/elixxir/client/context/stoppable"
+	"gitlab.com/elixxir/client/interfaces"
+	"gitlab.com/elixxir/client/interfaces/message"
+	"gitlab.com/elixxir/client/stoppable"
 	"gitlab.com/elixxir/client/storage"
 	"gitlab.com/elixxir/client/switchboard"
 	"gitlab.com/xx_network/primitives/id"
@@ -15,7 +15,7 @@ const keyExchangeConfirmName = "KeyExchangeConfirm"
 const keyExchangeMulti = "KeyExchange"
 
 func Start(switchboard *switchboard.Switchboard, sess *storage.Session,
-	net context.NetworkManager, garbledMessageTrigger chan<- struct{}) stoppable.Stoppable {
+	net interfaces.NetworkManager, garbledMessageTrigger chan<- struct{}) stoppable.Stoppable {
 
 	// register the rekey trigger thread
 	triggerCh := make(chan message.Receive, 100)
diff --git a/network/keyExchange/generate.sh b/keyExchange/generate.sh
similarity index 100%
rename from network/keyExchange/generate.sh
rename to keyExchange/generate.sh
diff --git a/network/keyExchange/rekey.go b/keyExchange/rekey.go
similarity index 86%
rename from network/keyExchange/rekey.go
rename to keyExchange/rekey.go
index a513c9739..a0f3b4163 100644
--- a/network/keyExchange/rekey.go
+++ b/keyExchange/rekey.go
@@ -10,22 +10,21 @@ import (
 	"github.com/golang/protobuf/proto"
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context/message"
-	"gitlab.com/elixxir/client/context/params"
-	"gitlab.com/elixxir/client/context/utility"
+	"gitlab.com/elixxir/client/interfaces"
+	"gitlab.com/elixxir/client/interfaces/message"
+	"gitlab.com/elixxir/client/interfaces/params"
+	network2 "gitlab.com/elixxir/client/network"
 	"gitlab.com/elixxir/client/storage"
 	"gitlab.com/elixxir/client/storage/e2e"
 	"gitlab.com/elixxir/comms/network"
 	ds "gitlab.com/elixxir/comms/network/dataStructures"
 	"gitlab.com/elixxir/crypto/diffieHellman"
 	"gitlab.com/elixxir/primitives/states"
-	"gitlab.com/xx_network/primitives/id"
 	"time"
 )
 
-type SendE2E func(msg message.Send, param params.E2E) ([]id.Round, error)
-
-func CheckKeyExchanges(instance *network.Instance, sendE2E SendE2E, sess *storage.Session, manager *e2e.Manager) {
+func CheckKeyExchanges(instance *network.Instance, sendE2E interfaces.SendE2E,
+	sess *storage.Session, manager *e2e.Manager) {
 	sessions := manager.TriggerNegotiations()
 	for _, session := range sessions {
 		go trigger(instance, sendE2E, sess, manager, session)
@@ -36,7 +35,8 @@ func CheckKeyExchanges(instance *network.Instance, sendE2E SendE2E, sess *storag
 // session and negotiation, or resenting a negotiation for an already created
 // session. They run the same negotiation, the former does it on a newly created
 // session while the latter on an extand
-func trigger(instance *network.Instance, sendE2E SendE2E, sess *storage.Session, manager *e2e.Manager, session *e2e.Session) {
+func trigger(instance *network.Instance, sendE2E interfaces.SendE2E,
+	sess *storage.Session, manager *e2e.Manager, session *e2e.Session) {
 	var negotiatingSession *e2e.Session
 	switch session.NegotiationStatus() {
 	// If the passed session is triggering a negotiation on a new session to
@@ -65,7 +65,8 @@ func trigger(instance *network.Instance, sendE2E SendE2E, sess *storage.Session,
 	}
 }
 
-func negotiate(instance *network.Instance, sendE2E SendE2E, sess *storage.Session, session *e2e.Session) error {
+func negotiate(instance *network.Instance, sendE2E interfaces.SendE2E,
+	sess *storage.Session, session *e2e.Session) error {
 	e2eStore := sess.E2e()
 
 	//generate public key
@@ -115,7 +116,7 @@ func negotiate(instance *network.Instance, sendE2E SendE2E, sess *storage.Sessio
 	}
 
 	//Wait until the result tracking responds
-	success, numTimeOut, numRoundFail := utility.TrackResults(sendResults, len(rounds))
+	success, numTimeOut, numRoundFail := network2.TrackResults(sendResults, len(rounds))
 
 	// If a single partition of the Key Negotiation request does not
 	// transmit, the partner cannot read the result. Log the error and set
diff --git a/network/keyExchange/trigger.go b/keyExchange/trigger.go
similarity index 91%
rename from network/keyExchange/trigger.go
rename to keyExchange/trigger.go
index a4c642e74..19d31d52d 100644
--- a/network/keyExchange/trigger.go
+++ b/keyExchange/trigger.go
@@ -5,11 +5,11 @@ import (
 	"github.com/golang/protobuf/proto"
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context"
-	"gitlab.com/elixxir/client/context/message"
-	"gitlab.com/elixxir/client/context/params"
-	"gitlab.com/elixxir/client/context/stoppable"
-	"gitlab.com/elixxir/client/context/utility"
+	"gitlab.com/elixxir/client/interfaces"
+	"gitlab.com/elixxir/client/interfaces/message"
+	"gitlab.com/elixxir/client/interfaces/params"
+	"gitlab.com/elixxir/client/network"
+	"gitlab.com/elixxir/client/stoppable"
 	"gitlab.com/elixxir/client/storage"
 	"gitlab.com/elixxir/client/storage/e2e"
 	ds "gitlab.com/elixxir/comms/network/dataStructures"
@@ -23,7 +23,7 @@ const (
 	errUnknown    = "unknown trigger from partner %s"
 )
 
-func startTrigger(sess *storage.Session, net context.NetworkManager, c chan message.Receive,
+func startTrigger(sess *storage.Session, net interfaces.NetworkManager, c chan message.Receive,
 	stop *stoppable.Single, garbledMessageTrigger chan<- struct{}) {
 	for true {
 		select {
@@ -39,7 +39,7 @@ func startTrigger(sess *storage.Session, net context.NetworkManager, c chan mess
 	}
 }
 
-func handleTrigger(sess *storage.Session, net context.NetworkManager, request message.Receive,
+func handleTrigger(sess *storage.Session, net interfaces.NetworkManager, request message.Receive,
 	garbledMessageTrigger chan<- struct{}) error {
 	//ensure the message was encrypted properly
 	if request.Encryption != message.E2E {
@@ -131,7 +131,7 @@ func handleTrigger(sess *storage.Session, net context.NetworkManager, request me
 	}
 
 	//Wait until the result tracking responds
-	success, numTimeOut, numRoundFail := utility.TrackResults(sendResults, len(rounds))
+	success, numTimeOut, numRoundFail := network.TrackResults(sendResults, len(rounds))
 
 	// If a single partition of the Key Negotiation request does not
 	// transmit, the partner will not be able to read the confirmation. If
diff --git a/network/keyExchange/xchange.pb.go b/keyExchange/xchange.pb.go
similarity index 100%
rename from network/keyExchange/xchange.pb.go
rename to keyExchange/xchange.pb.go
diff --git a/network/keyExchange/xchange.proto b/keyExchange/xchange.proto
similarity index 100%
rename from network/keyExchange/xchange.proto
rename to keyExchange/xchange.proto
diff --git a/network/health/healthTracker.go b/network/health/healthTracker.go
index 81008b098..3fd4f78db 100644
--- a/network/health/healthTracker.go
+++ b/network/health/healthTracker.go
@@ -10,7 +10,7 @@ package health
 
 import (
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context/stoppable"
+	"gitlab.com/elixxir/client/stoppable"
 	"gitlab.com/elixxir/comms/network"
 	"sync"
 	"time"
diff --git a/network/manager.go b/network/manager.go
index 48fc5d3fd..0231702d2 100644
--- a/network/manager.go
+++ b/network/manager.go
@@ -11,15 +11,15 @@ package network
 
 import (
 	"github.com/pkg/errors"
-	"gitlab.com/elixxir/client/context"
-	"gitlab.com/elixxir/client/context/params"
-	"gitlab.com/elixxir/client/context/stoppable"
+	"gitlab.com/elixxir/client/interfaces"
+	"gitlab.com/elixxir/client/interfaces/params"
+	"gitlab.com/elixxir/client/keyExchange"
 	"gitlab.com/elixxir/client/network/health"
 	"gitlab.com/elixxir/client/network/internal"
-	"gitlab.com/elixxir/client/network/keyExchange"
 	"gitlab.com/elixxir/client/network/message"
 	"gitlab.com/elixxir/client/network/node"
 	"gitlab.com/elixxir/client/network/rounds"
+	"gitlab.com/elixxir/client/stoppable"
 	"gitlab.com/elixxir/client/storage"
 	"gitlab.com/elixxir/client/switchboard"
 	"gitlab.com/elixxir/comms/client"
@@ -51,7 +51,7 @@ type manager struct {
 // NewManager builds a new reception manager object using inputted key fields
 func NewManager(session *storage.Session, switchboard *switchboard.Switchboard,
 	rng *fastRNG.StreamGenerator, comms *client.Comms,
-	params params.Network, ndf *ndf.NetworkDefinition) (context.NetworkManager, error) {
+	params params.Network, ndf *ndf.NetworkDefinition) (interfaces.NetworkManager, error) {
 
 	//start network instance
 	instance, err := network.NewInstance(comms.ProtoComms, ndf, nil, nil)
@@ -62,8 +62,8 @@ func NewManager(session *storage.Session, switchboard *switchboard.Switchboard,
 
 	//create manager object
 	m := manager{
-		param:    params,
-		runners:  stoppable.NewMulti("network.Manager"),
+		param:   params,
+		runners: stoppable.NewMulti("network.Manager"),
 	}
 
 	m.Internal = internal.Internal{
@@ -95,7 +95,8 @@ func (m *manager) StartRunners() error {
 	m.runners.Add(m.Health)
 
 	// Node Updates
-	m.runners.Add(node.StartRegistration(m.Instance, m.Session, m.Rng, m.Comms, m.NodeRegistration)) // Adding/Keys
+	m.runners.Add(node.StartRegistration(m.Instance, m.Session, m.Rng,
+		m.Comms, m.NodeRegistration)) // Adding/Keys
 	//TODO-remover
 	//m.runners.Add(StartNodeRemover(m.Context))        // Removing
 
@@ -111,7 +112,8 @@ func (m *manager) StartRunners() error {
 	m.runners.Add(m.round.StartProcessors())
 
 	// Key exchange
-	m.runners.Add(keyExchange.Start(m.Switchboard, m.Session, m, m.message.GetTriggerGarbledCheckChannel()))
+	m.runners.Add(keyExchange.Start(m.Switchboard, m.Session, m,
+		m.message.GetTriggerGarbledCheckChannel()))
 
 	return nil
 }
@@ -122,7 +124,7 @@ func (m *manager) GetStoppable() stoppable.Stoppable {
 }
 
 // GetHealthTracker returns the health tracker
-func (m *manager) GetHealthTracker() context.HealthTracker {
+func (m *manager) GetHealthTracker() interfaces.HealthTracker {
 	return m.Health
 }
 
diff --git a/network/message/critical.go b/network/message/critical.go
index 130b43afc..42caa9421 100644
--- a/network/message/critical.go
+++ b/network/message/critical.go
@@ -2,9 +2,9 @@ package message
 
 import (
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context/message"
-	"gitlab.com/elixxir/client/context/params"
-	"gitlab.com/elixxir/client/context/utility"
+	"gitlab.com/elixxir/client/interfaces/message"
+	"gitlab.com/elixxir/client/interfaces/params"
+	"gitlab.com/elixxir/client/network"
 	ds "gitlab.com/elixxir/comms/network/dataStructures"
 	"gitlab.com/elixxir/primitives/states"
 	"time"
@@ -46,7 +46,7 @@ func (m *Manager) criticalMessages() {
 				roundEvents.AddRoundEventChan(r, sendResults, 1*time.Minute,
 					states.COMPLETED, states.FAILED)
 			}
-			success, numTimeOut, numRoundFail := utility.TrackResults(sendResults, len(rounds))
+			success, numTimeOut, numRoundFail := network.TrackResults(sendResults, len(rounds))
 			if !success {
 				jww.ERROR.Printf("critical message send failed to transmit "+
 					"transmit %v/%v paritions: %v round failures, %v timeouts",
diff --git a/network/message/garbled.go b/network/message/garbled.go
index b9327fe19..c4fe424b9 100644
--- a/network/message/garbled.go
+++ b/network/message/garbled.go
@@ -1,7 +1,7 @@
 package message
 
 import (
-	"gitlab.com/elixxir/client/context/message"
+	"gitlab.com/elixxir/client/interfaces/message"
 	"time"
 )
 
diff --git a/network/message/manager.go b/network/message/manager.go
index 6776f8864..56a45a49f 100644
--- a/network/message/manager.go
+++ b/network/message/manager.go
@@ -2,10 +2,10 @@ package message
 
 import (
 	"fmt"
-	"gitlab.com/elixxir/client/context/params"
-	"gitlab.com/elixxir/client/context/stoppable"
+	"gitlab.com/elixxir/client/interfaces/params"
 	"gitlab.com/elixxir/client/network/internal"
 	"gitlab.com/elixxir/client/network/message/parse"
+	"gitlab.com/elixxir/client/stoppable"
 	"gitlab.com/elixxir/comms/network"
 	"gitlab.com/elixxir/primitives/format"
 )
diff --git a/network/message/parse/firstMessagePart.go b/network/message/parse/firstMessagePart.go
index 3b208326b..1d928536a 100644
--- a/network/message/parse/firstMessagePart.go
+++ b/network/message/parse/firstMessagePart.go
@@ -3,7 +3,7 @@ package parse
 import (
 	"encoding/binary"
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context/message"
+	"gitlab.com/elixxir/client/interfaces/message"
 	"time"
 )
 
diff --git a/network/message/parse/partition.go b/network/message/parse/partition.go
index 8cbd07cd6..b785e166c 100644
--- a/network/message/parse/partition.go
+++ b/network/message/parse/partition.go
@@ -3,7 +3,7 @@ package parse
 import (
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context/message"
+	"gitlab.com/elixxir/client/interfaces/message"
 	"gitlab.com/elixxir/client/storage"
 	"gitlab.com/xx_network/primitives/id"
 	"time"
diff --git a/network/message/reception.go b/network/message/reception.go
index 656a893ea..e3cff5f91 100644
--- a/network/message/reception.go
+++ b/network/message/reception.go
@@ -1,11 +1,11 @@
 package message
 
 import (
-	"gitlab.com/elixxir/client/context/message"
+	jww "github.com/spf13/jwalterweatherman"
+	"gitlab.com/elixxir/client/interfaces/message"
 	"gitlab.com/elixxir/crypto/e2e"
 	"gitlab.com/elixxir/primitives/format"
 	"gitlab.com/xx_network/primitives/id"
-	jww "github.com/spf13/jwalterweatherman"
 	"time"
 )
 
diff --git a/network/message/sendCmix.go b/network/message/sendCmix.go
index 669fff559..34f910ee7 100644
--- a/network/message/sendCmix.go
+++ b/network/message/sendCmix.go
@@ -4,7 +4,7 @@ import (
 	"github.com/golang-collections/collections/set"
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context/params"
+	"gitlab.com/elixxir/client/interfaces/params"
 	"gitlab.com/elixxir/comms/mixmessages"
 	"gitlab.com/elixxir/comms/network"
 	"gitlab.com/elixxir/primitives/format"
diff --git a/network/message/sendE2E.go b/network/message/sendE2E.go
index c36cc9d25..92907519a 100644
--- a/network/message/sendE2E.go
+++ b/network/message/sendE2E.go
@@ -8,9 +8,9 @@ package message
 
 import (
 	"github.com/pkg/errors"
-	"gitlab.com/elixxir/client/context/message"
-	"gitlab.com/elixxir/client/context/params"
-	"gitlab.com/elixxir/client/network/keyExchange"
+	"gitlab.com/elixxir/client/interfaces/message"
+	"gitlab.com/elixxir/client/interfaces/params"
+	"gitlab.com/elixxir/client/keyExchange"
 	"gitlab.com/elixxir/primitives/format"
 	"gitlab.com/xx_network/primitives/id"
 	"sync"
diff --git a/network/message/sendUnsafe.go b/network/message/sendUnsafe.go
index 9dc16de88..2cabff6fc 100644
--- a/network/message/sendUnsafe.go
+++ b/network/message/sendUnsafe.go
@@ -2,8 +2,8 @@ package message
 
 import (
 	"github.com/pkg/errors"
-	"gitlab.com/elixxir/client/context/message"
-	"gitlab.com/elixxir/client/context/params"
+	"gitlab.com/elixxir/client/interfaces/message"
+	"gitlab.com/elixxir/client/interfaces/params"
 	"gitlab.com/elixxir/crypto/e2e"
 	"gitlab.com/elixxir/primitives/format"
 	"gitlab.com/xx_network/primitives/id"
diff --git a/network/node/register.go b/network/node/register.go
index 02a882f3f..37859fee5 100644
--- a/network/node/register.go
+++ b/network/node/register.go
@@ -8,7 +8,7 @@ import (
 	"fmt"
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context/stoppable"
+	"gitlab.com/elixxir/client/stoppable"
 	"gitlab.com/elixxir/client/storage"
 	"gitlab.com/elixxir/client/storage/cmix"
 	"gitlab.com/elixxir/client/storage/user"
diff --git a/network/node/register_test.go b/network/node/register_test.go
index 3d5c27bcd..a00573313 100644
--- a/network/node/register_test.go
+++ b/network/node/register_test.go
@@ -2,7 +2,7 @@ package node
 
 import (
 	"crypto/rand"
-	"gitlab.com/elixxir/client/context/stoppable"
+	"gitlab.com/elixxir/client/stoppable"
 	"gitlab.com/elixxir/client/storage"
 	pb "gitlab.com/elixxir/comms/mixmessages"
 	"gitlab.com/elixxir/comms/network"
diff --git a/network/rounds/manager.go b/network/rounds/manager.go
index 8ebedad10..23d53cd36 100644
--- a/network/rounds/manager.go
+++ b/network/rounds/manager.go
@@ -2,10 +2,10 @@ package rounds
 
 import (
 	"fmt"
-	"gitlab.com/elixxir/client/context/params"
-	"gitlab.com/elixxir/client/context/stoppable"
+	"gitlab.com/elixxir/client/interfaces/params"
 	"gitlab.com/elixxir/client/network/internal"
 	"gitlab.com/elixxir/client/network/message"
+	"gitlab.com/elixxir/client/stoppable"
 	"gitlab.com/elixxir/comms/mixmessages"
 	"gitlab.com/xx_network/primitives/id"
 )
diff --git a/network/send.go b/network/send.go
index 017704acf..7e6aeb84e 100644
--- a/network/send.go
+++ b/network/send.go
@@ -3,8 +3,8 @@ package network
 import (
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context/message"
-	"gitlab.com/elixxir/client/context/params"
+	"gitlab.com/elixxir/client/interfaces/message"
+	"gitlab.com/elixxir/client/interfaces/params"
 	"gitlab.com/elixxir/primitives/format"
 	"gitlab.com/xx_network/primitives/id"
 )
diff --git a/context/utility/trackResults.go b/network/trackResults.go
similarity index 97%
rename from context/utility/trackResults.go
rename to network/trackResults.go
index 200615a6e..9b0bd2416 100644
--- a/context/utility/trackResults.go
+++ b/network/trackResults.go
@@ -1,4 +1,4 @@
-package utility
+package network
 
 import (
 	ds "gitlab.com/elixxir/comms/network/dataStructures"
diff --git a/context/stoppable/cleanup.go b/stoppable/cleanup.go
similarity index 90%
rename from context/stoppable/cleanup.go
rename to stoppable/cleanup.go
index a733d74bc..ffe3cdae6 100644
--- a/context/stoppable/cleanup.go
+++ b/stoppable/cleanup.go
@@ -37,7 +37,7 @@ func (c *Cleanup) IsRunning() bool {
 
 // Name returns the name of the stoppable denoting it has cleanup.
 func (c *Cleanup) Name() string {
-	return c.stop.Name() + " with cleanup"
+	return Name() + " with cleanup"
 }
 
 // Close stops the contained stoppable and runs the cleanup function after. The
@@ -51,9 +51,9 @@ func (c *Cleanup) Close(timeout time.Duration) error {
 			start := time.Now()
 
 			// Run the stoppable
-			if err := c.stop.Close(timeout); err != nil {
+			if err := Close(timeout); err != nil {
 				err = errors.WithMessagef(err, "Cleanup for %s not executed",
-					c.stop.Name())
+					Name())
 				return
 			}
 
@@ -71,10 +71,10 @@ func (c *Cleanup) Close(timeout time.Duration) error {
 			case err := <-complete:
 				if err != nil {
 					err = errors.WithMessagef(err, "Cleanup for %s failed",
-						c.stop.Name())
+						Name())
 				}
 			case <-timer.C:
-				err = errors.Errorf("Clean up for %s timeout", c.stop.Name())
+				err = errors.Errorf("Clean up for %s timeout", Name())
 			}
 		})
 
diff --git a/context/stoppable/cleanup_test.go b/stoppable/cleanup_test.go
similarity index 100%
rename from context/stoppable/cleanup_test.go
rename to stoppable/cleanup_test.go
diff --git a/context/stoppable/multi.go b/stoppable/multi.go
similarity index 96%
rename from context/stoppable/multi.go
rename to stoppable/multi.go
index 061be492d..a0f947d02 100644
--- a/context/stoppable/multi.go
+++ b/stoppable/multi.go
@@ -43,7 +43,7 @@ func (m *Multi) Name() string {
 	m.mux.RLock()
 	names := m.name + ": {"
 	for _, s := range m.stoppables {
-		names += s.Name() + ", "
+		names += Name() + ", "
 	}
 	if len(m.stoppables) > 0 {
 		names = names[:len(names)-2]
@@ -69,7 +69,7 @@ func (m *Multi) Close(timeout time.Duration) error {
 			for _, stoppable := range m.stoppables {
 				wg.Add(1)
 				go func(stoppable Stoppable) {
-					if stoppable.Close(timeout) != nil {
+					if Close(timeout) != nil {
 						atomic.AddUint32(&numErrors, 1)
 					}
 					wg.Done()
diff --git a/context/stoppable/multi_test.go b/stoppable/multi_test.go
similarity index 100%
rename from context/stoppable/multi_test.go
rename to stoppable/multi_test.go
diff --git a/context/stoppable/single.go b/stoppable/single.go
similarity index 100%
rename from context/stoppable/single.go
rename to stoppable/single.go
diff --git a/context/stoppable/single_test.go b/stoppable/single_test.go
similarity index 100%
rename from context/stoppable/single_test.go
rename to stoppable/single_test.go
diff --git a/context/stoppable/stoppable.go b/stoppable/stoppable.go
similarity index 100%
rename from context/stoppable/stoppable.go
rename to stoppable/stoppable.go
diff --git a/storage/e2e/manager.go b/storage/e2e/manager.go
index e8b4f6f36..306aeeb37 100644
--- a/storage/e2e/manager.go
+++ b/storage/e2e/manager.go
@@ -9,7 +9,7 @@ package e2e
 import (
 	"fmt"
 	"github.com/pkg/errors"
-	"gitlab.com/elixxir/client/context/params"
+	"gitlab.com/elixxir/client/interfaces/params"
 	"gitlab.com/elixxir/client/storage/versioned"
 	"gitlab.com/elixxir/crypto/cyclic"
 	dh "gitlab.com/elixxir/crypto/diffieHellman"
diff --git a/storage/partition/multiPartMessage.go b/storage/partition/multiPartMessage.go
index 9ffa13cac..4fadbc03b 100644
--- a/storage/partition/multiPartMessage.go
+++ b/storage/partition/multiPartMessage.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context/message"
+	"gitlab.com/elixxir/client/interfaces/message"
 	"gitlab.com/elixxir/client/storage/versioned"
 	"gitlab.com/xx_network/primitives/id"
 	"os"
diff --git a/storage/partition/store.go b/storage/partition/store.go
index 112629232..b372bf170 100644
--- a/storage/partition/store.go
+++ b/storage/partition/store.go
@@ -3,7 +3,7 @@ package partition
 import (
 	"crypto/md5"
 	"encoding/binary"
-	"gitlab.com/elixxir/client/context/message"
+	"gitlab.com/elixxir/client/interfaces/message"
 	"gitlab.com/elixxir/client/storage/versioned"
 	"gitlab.com/xx_network/primitives/id"
 	"sync"
diff --git a/storage/utility/e2eMessageBuffer.go b/storage/utility/e2eMessageBuffer.go
index ae9cd73d4..2600016e8 100644
--- a/storage/utility/e2eMessageBuffer.go
+++ b/storage/utility/e2eMessageBuffer.go
@@ -5,8 +5,8 @@ import (
 	"encoding/binary"
 	"encoding/json"
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context/message"
-	"gitlab.com/elixxir/client/context/params"
+	"gitlab.com/elixxir/client/interfaces/message"
+	"gitlab.com/elixxir/client/interfaces/params"
 	"gitlab.com/elixxir/client/storage/versioned"
 	"gitlab.com/xx_network/primitives/id"
 	"time"
diff --git a/storage/utility/e2eMessageBuffer_test.go b/storage/utility/e2eMessageBuffer_test.go
index 067f5d46a..c5bc81013 100644
--- a/storage/utility/e2eMessageBuffer_test.go
+++ b/storage/utility/e2eMessageBuffer_test.go
@@ -2,8 +2,8 @@ package utility
 
 import (
 	"encoding/json"
-	"gitlab.com/elixxir/client/context/message"
-	"gitlab.com/elixxir/client/context/params"
+	"gitlab.com/elixxir/client/interfaces/message"
+	"gitlab.com/elixxir/client/interfaces/params"
 	"gitlab.com/elixxir/client/storage/versioned"
 	"gitlab.com/elixxir/ekv"
 	"gitlab.com/xx_network/primitives/id"
diff --git a/switchboard/any.go b/switchboard/any.go
index aef95e378..b460ecac0 100644
--- a/switchboard/any.go
+++ b/switchboard/any.go
@@ -1,7 +1,7 @@
 package switchboard
 
 import (
-	"gitlab.com/elixxir/client/context/message"
+	"gitlab.com/elixxir/client/interfaces/message"
 	"gitlab.com/xx_network/primitives/id"
 )
 
diff --git a/switchboard/byType.go b/switchboard/byType.go
index f9a7c6a27..7bf703d75 100644
--- a/switchboard/byType.go
+++ b/switchboard/byType.go
@@ -2,7 +2,7 @@ package switchboard
 
 import (
 	"github.com/golang-collections/collections/set"
-	"gitlab.com/elixxir/client/context/message"
+	"gitlab.com/elixxir/client/interfaces/message"
 )
 
 type byType struct {
diff --git a/switchboard/byType_test.go b/switchboard/byType_test.go
index fb385195f..2570f6a33 100644
--- a/switchboard/byType_test.go
+++ b/switchboard/byType_test.go
@@ -2,7 +2,7 @@ package switchboard
 
 import (
 	"github.com/golang-collections/collections/set"
-	"gitlab.com/elixxir/client/context/message"
+	"gitlab.com/elixxir/client/interfaces/message"
 	"testing"
 )
 
diff --git a/switchboard/listener.go b/switchboard/listener.go
index abd6bea71..8bc313f51 100644
--- a/switchboard/listener.go
+++ b/switchboard/listener.go
@@ -8,7 +8,7 @@ package switchboard
 
 import (
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context/message"
+	"gitlab.com/elixxir/client/interfaces/message"
 	"gitlab.com/xx_network/primitives/id"
 )
 
diff --git a/switchboard/listener_test.go b/switchboard/listener_test.go
index 295310bfb..11ea51599 100644
--- a/switchboard/listener_test.go
+++ b/switchboard/listener_test.go
@@ -7,7 +7,7 @@
 package switchboard
 
 import (
-	"gitlab.com/elixxir/client/context/message"
+	"gitlab.com/elixxir/client/interfaces/message"
 	"gitlab.com/xx_network/primitives/id"
 	"reflect"
 	"testing"
diff --git a/switchboard/switchboard.go b/switchboard/switchboard.go
index 3c04a5a55..2c4eb69ce 100644
--- a/switchboard/switchboard.go
+++ b/switchboard/switchboard.go
@@ -3,7 +3,7 @@ package switchboard
 import (
 	"github.com/golang-collections/collections/set"
 	jww "github.com/spf13/jwalterweatherman"
-	"gitlab.com/elixxir/client/context/message"
+	"gitlab.com/elixxir/client/interfaces/message"
 	"gitlab.com/xx_network/primitives/id"
 	"sync"
 )
@@ -135,7 +135,7 @@ func (sw *Switchboard) Speak(item message.Receive) {
 	//Execute hear on all matched listeners in a new goroutine
 	matches.Do(func(i interface{}) {
 		r := i.(Listener)
-		go Hear(item)
+		go r.Hear(item)
 	})
 
 	// print to log if nothing was heard
diff --git a/switchboard/switchboard_test.go b/switchboard/switchboard_test.go
index de5a5bbc9..27a7635c2 100644
--- a/switchboard/switchboard_test.go
+++ b/switchboard/switchboard_test.go
@@ -1,7 +1,7 @@
 package switchboard
 
 import (
-	"gitlab.com/elixxir/client/context/message"
+	"gitlab.com/elixxir/client/interfaces/message"
 	"gitlab.com/xx_network/primitives/id"
 	"strings"
 	"testing"
-- 
GitLab