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