diff --git a/api/client.go b/api/client.go index 9d2bfe9795f391cc8bb4e409ec6a1c21f8423aa2..b775354dcbd951d04bd289a05ef91bd099b58f96 100644 --- a/api/client.go +++ b/api/client.go @@ -218,7 +218,7 @@ func OpenClient(storageDir string, password []byte, parameters params.Network) ( // Use fastRNG for RNG ops (AES fortuna based RNG using system RNG) rngStreamGen := fastRNG.NewStreamGenerator(12, 1024, csprng.NewSystemRNG) - // Get current client version + // get current client version currentVersion, err := version.ParseVersion(SEMVER) if err != nil { return nil, errors.WithMessage(err, "Could not parse version string.") @@ -590,7 +590,7 @@ func (c *Client) GetErrorsChannel() <-chan interfaces.ClientError { // - Historical Round Retrieval (/network/rounds/historical.go) // Retrieves data about rounds which are too old to be stored by the client // - Message Retrieval Worker Group (/network/rounds/retrieve.go) -// Requests all messages in a given round from the gateway of the last node +// Requests all messages in a given round from the gateway of the last nodes // - Message Handling Worker Group (/network/message/handle.go) // Decrypts and partitions messages when signals via the Switchboard // - Health Tracker (/network/health) @@ -707,14 +707,14 @@ func (c *Client) GetRateLimitParams() (uint32, uint32, int64) { rateLimitParams.LeakDuration.Nanoseconds() } -// GetNodeRegistrationStatus gets the current state of node registration. It +// GetNodeRegistrationStatus gets the current state of nodes registration. It // returns the total number of nodes in the NDF and the number of those which // are currently registers with. An error is returned if the network is not // healthy. func (c *Client) GetNodeRegistrationStatus() (int, int, error) { // Return an error if the network is not healthy if !c.GetHealth().IsHealthy() { - return 0, 0, errors.New("Cannot get number of node registrations when " + + return 0, 0, errors.New("Cannot get number of nodes registrations when " + "network is not healthy") } @@ -727,7 +727,7 @@ func (c *Client) GetNodeRegistrationStatus() (int, int, error) { for i, n := range nodes { nid, err := id.Unmarshal(n.ID) if err != nil { - return 0, 0, errors.Errorf("Failed to unmarshal node ID %v "+ + return 0, 0, errors.Errorf("Failed to unmarshal nodes ID %v "+ "(#%d): %s", n.ID, i, err.Error()) } if n.Status == ndf.Stale { @@ -739,7 +739,7 @@ func (c *Client) GetNodeRegistrationStatus() (int, int, error) { } } - // Get the number of in progress node registrations + // get the number of in progress nodes registrations return numRegistered, len(nodes) - numStale, nil } @@ -873,7 +873,7 @@ func (c *Client) SetProxiedBins(binStrings []string) error { // GetPreferredBins returns the geographic bin or bins that the provided two // character country code is a part of. func (c *Client) GetPreferredBins(countryCode string) ([]string, error) { - // Get the bin that the country is in + // get the bin that the country is in bin, exists := region.GetCountryBin(countryCode) if !exists { return nil, errors.Errorf("failed to find geographic bin for country %q", @@ -943,7 +943,7 @@ func checkVersionAndSetupStorage(def *ndf.NetworkDefinition, protoUser user.User, cmixGrp, e2eGrp *cyclic.Group, rngStreamGen *fastRNG.StreamGenerator, isPrecanned bool, registrationCode string) (*storage.Session, error) { - // Get current client version + // get current client version currentVersion, err := version.ParseVersion(SEMVER) if err != nil { return nil, errors.WithMessage(err, "Could not parse version string.") diff --git a/api/utils_test.go b/api/utils_test.go index f1fea1358c4bd46a33c3a8f66d7cf56568485d67..d53aa46eaa616c321881457ee99f84a4d30232bf 100644 --- a/api/utils_test.go +++ b/api/utils_test.go @@ -147,7 +147,7 @@ func getNDF(face interface{}) *ndf.NetworkDefinition { } } -// Signs a passed round info with the key tied to the test node cert +// Signs a passed round info with the key tied to the test nodes cert // used throughout utils and other tests func signRoundInfo(ri *pb.RoundInfo) error { privKeyFromFile := testkeys.LoadFromPath(testkeys.GetNodeKeyPath()) diff --git a/auth/fmt_test.go b/auth/fmt_test.go index 30580ec1bef400eb05409d3033076e9f0b00b4cd..59e63cba01f78904fa594947a40726b26492ff5d 100644 --- a/auth/fmt_test.go +++ b/auth/fmt_test.go @@ -58,7 +58,7 @@ func TestNewBaseFormat(t *testing.T) { /* Tests the setter/getter methods for baseFormat */ -// Set/Get PubKey tests +// Set/get PubKey tests func TestBaseFormat_SetGetPubKey(t *testing.T) { // Construct message pubKeySize := 256 @@ -86,7 +86,7 @@ func TestBaseFormat_SetGetPubKey(t *testing.T) { } -// Set/Get EcrPayload tests +// Set/get EcrPayload tests func TestBaseFormat_SetGetEcrPayload(t *testing.T) { // Construct message pubKeySize := 256 @@ -201,7 +201,7 @@ func TestNewEcrFormat(t *testing.T) { /* Tests the setter/getter methods for ecrFormat */ -// Set/Get ownership tests +// Set/get ownership tests func TestEcrFormat_SetGetOwnership(t *testing.T) { // Construct message payloadSize := ownershipSize*2 + sidhinterface.PubKeyByteSize + 1 @@ -237,7 +237,7 @@ func TestEcrFormat_SetGetOwnership(t *testing.T) { ecrMsg.SetOwnership([]byte("ownership")) } -// Set/Get payload tests +// Set/get payload tests func TestEcrFormat_SetGetPayload(t *testing.T) { // Construct message payloadSize := ownershipSize*2 + sidhinterface.PubKeyByteSize + 1 @@ -358,7 +358,7 @@ func TestNewRequestFormat(t *testing.T) { /* Setter/Getter tests for RequestFormat */ -// Unit test for Get/SetID +// Unit test for get/SetID func TestRequestFormat_SetGetID(t *testing.T) { // Construct message payloadSize := id.ArrIDLen*2 - 1 + sidhinterface.PubKeyByteSize + 1 @@ -399,7 +399,7 @@ func TestRequestFormat_SetGetID(t *testing.T) { } -// Unit test for Get/SetMsgPayload +// Unit test for get/SetMsgPayload func TestRequestFormat_SetGetMsgPayload(t *testing.T) { // Construct message payloadSize := id.ArrIDLen*3 - 1 + sidhinterface.PubKeyByteSize + 1 diff --git a/backup/backup.go b/backup/backup.go index b8b72f2563844980c21d8d0ebb9309b85c996221..ea9667c0391b495b6c1c814cf5cf27f19341002e 100644 --- a/backup/backup.go +++ b/backup/backup.go @@ -268,18 +268,18 @@ func (b *Backup) assembleBackup() backup.Backup { Contacts: backup.Contacts{}, } - // Get user and storage user + // get user and storage user u := b.store.GetUser() su := b.store.User() - // Get registration timestamp + // get registration timestamp bu.RegistrationTimestamp = u.RegistrationTimestamp - // Get registration code; ignore the error because if there is no + // get registration code; ignore the error because if there is no // registration, then an empty string is returned bu.RegistrationCode, _ = b.store.GetRegCode() - // Get transmission identity + // get transmission identity bu.TransmissionIdentity = backup.TransmissionIdentity{ RSASigningPrivateKey: u.TransmissionRSA, RegistrarSignature: su.GetTransmissionRegistrationValidationSignature(), @@ -287,7 +287,7 @@ func (b *Backup) assembleBackup() backup.Backup { ComputedID: u.TransmissionID, } - // Get reception identity + // get reception identity bu.ReceptionIdentity = backup.ReceptionIdentity{ RSASigningPrivateKey: u.ReceptionRSA, RegistrarSignature: su.GetReceptionRegistrationValidationSignature(), @@ -297,10 +297,10 @@ func (b *Backup) assembleBackup() backup.Backup { DHPublicKey: u.E2eDhPublicKey, } - // Get facts + // get facts bu.UserDiscoveryRegistration.FactList = b.store.GetUd().GetFacts() - // Get contacts + // get contacts bu.Contacts.Identities = b.store.E2e().GetPartners() //add the memoized json params diff --git a/backup/backup_test.go b/backup/backup_test.go index 1dc785aa311e0916f06f71618975dc9afadb1c25..434c76e78665692524849952b599652be428600a 100644 --- a/backup/backup_test.go +++ b/backup/backup_test.go @@ -101,7 +101,7 @@ func Test_resumeBackup(t *testing.T) { t.Error("Timed out waiting for callback.") } - // Get key and salt to compare to later + // get key and salt to compare to later key1, salt1, _, err := loadBackup(b.store.GetKV()) if err != nil { t.Errorf("Failed to load key, salt, and params from newly "+ @@ -127,7 +127,7 @@ func Test_resumeBackup(t *testing.T) { expectedPassword, loadedPassword) } - // Get key, salt, and parameters of resumed backup + // get key, salt, and parameters of resumed backup key2, salt2, _, err := loadBackup(b.store.GetKV()) if err != nil { t.Errorf("Failed to load key, salt, and params from resumed "+ @@ -177,7 +177,7 @@ func TestBackup_TriggerBackup(t *testing.T) { cb := func(encryptedBackup []byte) { cbChan <- encryptedBackup } b := newTestBackup("MySuperSecurePassword", cb, t) - // Get password + // get password password, err := loadPassword(b.store.GetKV()) if err != nil { t.Errorf("Failed to load password from storage: %+v", err) diff --git a/backup/keyStorage.go b/backup/keyStorage.go index c4627396d6c4abb8be19c6d0d0d3c8d1859c57e4..9a3f5cfe564abc782e4eb199ed7dbde254318fea 100644 --- a/backup/keyStorage.go +++ b/backup/keyStorage.go @@ -76,7 +76,7 @@ func marshalBackup(key, salt []byte, params backup.Params) []byte { // unmarshalBackup unmarshalls the byte slice into a key, salt, and params. func unmarshalBackup(buf []byte) (key, salt []byte, params backup.Params, err error) { buff := bytes.NewBuffer(buf) - // Get key + // get key key = make([]byte, keyLen) n, err := buff.Read(key) if err != nil || n != keyLen { @@ -84,7 +84,7 @@ func unmarshalBackup(buf []byte) (key, salt []byte, params backup.Params, err er return } - // Get salt + // get salt salt = make([]byte, saltLen) n, err = buff.Read(salt) if err != nil || n != saltLen { @@ -92,7 +92,7 @@ func unmarshalBackup(buf []byte) (key, salt []byte, params backup.Params, err er return } - // Get params from remaining bytes + // get params from remaining bytes err = params.Unmarshal(buff.Bytes()) if err != nil { err = errors.Errorf("reading params failed: %+v", err) diff --git a/bindings/client.go b/bindings/client.go index edda4a31dfa78239b4f7593f0a3db71af0a2021d..6e0f519a4d69b6df52b2631afb2023ab0efe0c86 100644 --- a/bindings/client.go +++ b/bindings/client.go @@ -227,7 +227,7 @@ func UnmarshalSendReport(b []byte) (*SendReport, error) { // - Historical Round Retrieval (/network/rounds/historical.go) // Retrieves data about rounds which are too old to be stored by the client // - Message Retrieval Worker Group (/network/rounds/retrieve.go) -// Requests all messages in a given round from the gateway of the last node +// Requests all messages in a given round from the gateway of the last nodes // - Message Handling Worker Group (/network/message/handle.go) // Decrypts and partitions messages when signals via the Switchboard // - Health Tracker (/network/health) diff --git a/bindings/registrationStatus.go b/bindings/registrationStatus.go index 5d33cbd6e2031b39455363e096153afcf6c38833..eab2590984413d014695f1489989ae805653fff3 100644 --- a/bindings/registrationStatus.go +++ b/bindings/registrationStatus.go @@ -7,7 +7,7 @@ package bindings -// NodeRegistrationsStatus structure for returning node registration statuses +// NodeRegistrationsStatus structure for returning nodes registration statuses // for bindings. type NodeRegistrationsStatus struct { registered int diff --git a/bindings/ud.go b/bindings/ud.go index 5f3bd861ed7a67f419e31751e2afaad1152f93ee..df34f572de41569a8c2969c24c9fc24b869348a0 100644 --- a/bindings/ud.go +++ b/bindings/ud.go @@ -307,7 +307,7 @@ func (ud UserDiscovery) MultiLookup(ids *IdList, callback MultiLookupCallback, failedIDList := make([]*id.ID, 0, len(idList)) var concatonatedErrs string - //Get the responses and return + //get the responses and return for numReturned := 0; numReturned < len(idList); numReturned++ { response := <-results if response.err == nil { diff --git a/cmd/fileTransfer.go b/cmd/fileTransfer.go index 932abff2a8cc1a99574fb4128c6762ba6f84a535..c259a6250e769808921694d0d828a0072107664b 100644 --- a/cmd/fileTransfer.go +++ b/cmd/fileTransfer.go @@ -62,7 +62,7 @@ var ftCmd = &cobra.Command{ numReg, total, err = client.GetNodeRegistrationStatus() if err != nil { - jww.FATAL.Panicf("Failed to get node registration status: %+v", + jww.FATAL.Panicf("Failed to get nodes registration status: %+v", err) } @@ -170,13 +170,13 @@ func sendFile(filePath, fileType, filePreviewPath, filePreviewString, recipientContactPath string, retry float32, m *ft.Manager, done chan struct{}) { - // Get file from path + // get file from path fileData, err := utils.ReadFile(filePath) if err != nil { jww.FATAL.Panicf("[FT] Failed to read file %q: %+v", filePath, err) } - // Get file preview from path + // get file preview from path filePreviewData := []byte(filePreviewString) if filePreviewPath != "" { filePreviewData, err = utils.ReadFile(filePreviewPath) @@ -192,7 +192,7 @@ func sendFile(filePath, fileType, filePreviewPath, filePreviewString, fileName = fileName[:ft.FileNameMaxLen] } - // Get recipient contact from file + // get recipient contact from file recipient := getContactFromFile(recipientContactPath) jww.INFO.Printf("[FT] Going to start sending file %q to %s {type: %q, "+ diff --git a/cmd/group.go b/cmd/group.go index 1c7365921187bc6fda2754b2950498709c5f46f9..f0e1d463c62afd5fba13963a59a796b932354600 100644 --- a/cmd/group.go +++ b/cmd/group.go @@ -63,7 +63,7 @@ var groupCmd = &cobra.Command{ jww.INFO.Printf("Registering with nodes (%d/%d)...", numReg, total) } - // Get group message and name + // get group message and name msgBody := []byte(viper.GetString("message")) name := []byte(viper.GetString("name")) timeout := viper.GetDuration("receiveTimeout") diff --git a/cmd/root.go b/cmd/root.go index d7bb3d6f5c65399751fb00a454752cc103c70902..22615567e290d6c8e1ded8c89d972de52a304a74 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -191,7 +191,7 @@ var rootCmd = &cobra.Command{ jww.INFO.Printf("User: %s", user.ReceptionID) writeContact(user.GetContact()) - // Get Recipient and/or set it to myself + // get Recipient and/or set it to myself isPrecanPartner := false recipientContact := readContact() recipientID := recipientContact.ID diff --git a/cmd/single.go b/cmd/single.go index cd6cc0a8815caa9969f02123274a0023512988e9..bacc818dbeab9591c4d6b0e6a582352de94b7b3b 100644 --- a/cmd/single.go +++ b/cmd/single.go @@ -75,7 +75,7 @@ var singleCmd = &cobra.Command{ // Make single-use manager and start receiving process singleMng := single.NewManager(client) - // Get the tag + // get the tag tag := viper.GetString("tag") // Register the callback @@ -103,7 +103,7 @@ var singleCmd = &cobra.Command{ // If the send flag is set, then send a message if viper.GetBool("send") { - // Get message details + // get message details payload := []byte(viper.GetString("message")) partner := readSingleUseContact("contact") maxMessages := uint8(viper.GetUint("maxMessages")) @@ -260,7 +260,7 @@ func makeResponsePayloadPart(m *single.Manager, payload []byte) []byte { // readSingleUseContact opens the contact specified in the CLI flags. Panics if // no file provided or if an error occurs while reading or unmarshalling it. func readSingleUseContact(key string) contact.Contact { - // Get path + // get path filePath := viper.GetString(key) if filePath == "" { jww.FATAL.Panicf("Failed to read contact file: no file path provided.") diff --git a/cmd/ud.go b/cmd/ud.go index dc940811b9ff1888ae4b221b8fa8ad5accb66e7a..39d5a8aa764c7c3509b76bf474ebd5de11b11562 100644 --- a/cmd/ud.go +++ b/cmd/ud.go @@ -36,7 +36,7 @@ var udCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { client := initClient() - // Get user and save contact to file + // get user and save contact to file user := client.GetUser() jww.INFO.Printf("User: %s", user.ReceptionID) writeContact(user.GetContact()) diff --git a/dummy/send.go b/dummy/send.go index a01f6ba69cc1940fda4735a9278cf460fbd3b7a9..e3d0818e31e57000c5a6cfc2b553e2899b2ee539 100644 --- a/dummy/send.go +++ b/dummy/send.go @@ -54,7 +54,7 @@ func (m *Manager) sendThread(stop *stoppable.Single) { nextSendChanPtr = &(m.randomTimer().C) go func() { - // Get list of random messages and recipients + // get list of random messages and recipients rng := m.rng.GetStream() msgs, err := m.newRandomMessages(rng) if err != nil { diff --git a/dummy/send_test.go b/dummy/send_test.go index 11d40fbc6548150723ba5f865913e8312127cbda..6a5a91feff0c152b70982e60e769aae53c37813e 100644 --- a/dummy/send_test.go +++ b/dummy/send_test.go @@ -114,7 +114,7 @@ func TestManager_sendMessages(t *testing.T) { t.Errorf("sendMessages returned an error: %+v", err) } - // Get sent messages + // get sent messages receivedMsgs := m.net.(*testNetworkManager).GetMsgList() // Test that all messages were received diff --git a/fileTransfer/manager.go b/fileTransfer/manager.go index b188bcc203fe5e286507a5f7e7de4cb34485a836..236881b0693d24eabf43f2684f36eda90641cc05 100644 --- a/fileTransfer/manager.go +++ b/fileTransfer/manager.go @@ -280,7 +280,7 @@ func (m Manager) Send(fileName, fileType string, fileData []byte, } rng.Close() - // Get the size of each file part + // get the size of each file part partSize, err := m.getPartSize() if err != nil { return ftCrypto.TransferID{}, errors.Errorf(getPartSizeErr, err) @@ -329,7 +329,7 @@ func (m Manager) Send(fileName, fileType string, fileData []byte, // most once per period. func (m Manager) RegisterSentProgressCallback(tid ftCrypto.TransferID, progressCB interfaces.SentProgressCallback, period time.Duration) error { - // Get the transfer for the given ID + // get the transfer for the given ID transfer, err := m.sent.GetTransfer(tid) if err != nil { return err @@ -350,7 +350,7 @@ func (m Manager) RegisterSentProgressCallback(tid ftCrypto.TransferID, // - Can you reuse fingerprints? // - What to do if sendE2E fails? func (m Manager) Resend(tid ftCrypto.TransferID) error { - // Get the transfer for the given ID + // get the transfer for the given ID transfer, err := m.sent.GetTransfer(tid) if err != nil { return err @@ -369,7 +369,7 @@ func (m Manager) Resend(tid ftCrypto.TransferID) error { // storage once a transfer has completed or reached the retry limit. Returns an // error if the transfer has not run out of retries. func (m Manager) CloseSend(tid ftCrypto.TransferID) error { - // Get the transfer for the given ID + // get the transfer for the given ID st, err := m.sent.GetTransfer(tid) if err != nil { return err @@ -395,13 +395,13 @@ func (m Manager) CloseSend(tid ftCrypto.TransferID) error { // Returns an error if the transfer is not complete, the full file cannot be // verified, or if the transfer cannot be found. func (m Manager) Receive(tid ftCrypto.TransferID) ([]byte, error) { - // Get the transfer for the given ID + // get the transfer for the given ID rt, err := m.received.GetTransfer(tid) if err != nil { return nil, err } - // Get the file from the transfer + // get the file from the transfer file, err := rt.GetFile() if err != nil { return nil, err @@ -421,7 +421,7 @@ func (m Manager) Receive(tid ftCrypto.TransferID) ([]byte, error) { // updates, at most once per period. func (m Manager) RegisterReceivedProgressCallback(tid ftCrypto.TransferID, progressCB interfaces.ReceivedProgressCallback, period time.Duration) error { - // Get the transfer for the given ID + // get the transfer for the given ID transfer, err := m.received.GetTransfer(tid) if err != nil { return err diff --git a/fileTransfer/manager_test.go b/fileTransfer/manager_test.go index 63952f154487962fc6e504c56d58f6d0d00cda02..a4b06b61db081fd98e8ee7b8b643f42f49e73e7c 100644 --- a/fileTransfer/manager_test.go +++ b/fileTransfer/manager_test.go @@ -125,7 +125,7 @@ func TestManager_Send(t *testing.T) { } //// - // Get NewFileTransfer E2E message + // get NewFileTransfer E2E message //// sendMsg := m.net.(*testNetworkManager).GetE2eMsg(0) if sendMsg.MessageType != message.NewFileTransfer { diff --git a/fileTransfer/oldTransferRecovery.go b/fileTransfer/oldTransferRecovery.go index 7fc4d41c61915d070717a3001c4154237cf0f81c..9bcb95f74719bd721a1c4b7e3591c237ac5f3304 100644 --- a/fileTransfer/oldTransferRecovery.go +++ b/fileTransfer/oldTransferRecovery.go @@ -38,7 +38,7 @@ func (m Manager) oldTransferRecovery(healthyChan chan bool, chanID uint64) { return } - // Get list of unsent parts and rounds that parts were sent on + // get list of unsent parts and rounds that parts were sent on unsentParts, sentRounds, err := m.sent.GetUnsentPartsAndSentRounds() jww.DEBUG.Printf("Adding unsent parts from %d recovered transfers: %v", diff --git a/fileTransfer/oldTransferRecovery_test.go b/fileTransfer/oldTransferRecovery_test.go index 341b39542ae7540282669a1cb293ca763cb8e92f..252df434401beb2a524b5541c39f0011e080d962 100644 --- a/fileTransfer/oldTransferRecovery_test.go +++ b/fileTransfer/oldTransferRecovery_test.go @@ -264,7 +264,7 @@ func TestManager_updateSentRounds(t *testing.T) { healthyRecover := make(chan bool, networkHealthBuffLen) healthyRecover <- true - // Get list of rounds that parts were sent on + // get list of rounds that parts were sent on _, loadedSentRounds, _ := m.sent.GetUnsentPartsAndSentRounds() err = loadedManager.updateSentRounds(healthyRecover, loadedSentRounds) diff --git a/fileTransfer/receiveNew.go b/fileTransfer/receiveNew.go index 67f3ce3e44570f4f6647c69b7ba098f965b19c62..e35539d1fa490e67306311104cdad0da469acfb0 100644 --- a/fileTransfer/receiveNew.go +++ b/fileTransfer/receiveNew.go @@ -83,7 +83,7 @@ func (m *Manager) readNewFileTransferMessage(msg message.Receive) ( return } - // Get RNG from stream + // get RNG from stream rng := m.rng.GetStream() defer rng.Close() diff --git a/fileTransfer/receive_test.go b/fileTransfer/receive_test.go index cc28fc24f1b910128ceba15d1486b1ef9e120966..31ac0d40913bb7ddfc08eaca34b51bcd1eeed466 100644 --- a/fileTransfer/receive_test.go +++ b/fileTransfer/receive_test.go @@ -332,7 +332,7 @@ func TestManager_readMessage(t *testing.T) { <-done1 - // Get the file and check that the part was added to it + // get the file and check that the part was added to it fileData, err := rt.GetFile() if err == nil { t.Error("GetFile did not return an error when parts are missing.") diff --git a/fileTransfer/send.go b/fileTransfer/send.go index 875e01890fba131b0acc1273b388158ea3c06698..27c81207399056999af73731532d29389c816102 100644 --- a/fileTransfer/send.go +++ b/fileTransfer/send.go @@ -365,7 +365,7 @@ func (m *Manager) newCmixMessage(transfer *ftStorage.SentTransfer, // Create new empty cMix message cmixMsg := format.NewMessage(m.store.Cmix().GetGroup().GetP().ByteLen()) - // Get encrypted file part, file part MAC, nonce (nonce), and fingerprint + // get encrypted file part, file part MAC, nonce (nonce), and fingerprint encPart, mac, fp, err := transfer.GetEncryptedPart(partNum, cmixMsg.ContentsSize()) if err != nil { return format.Message{}, err @@ -463,7 +463,7 @@ func (m *Manager) makeRoundEventCallback( // sendEndE2eMessage sends an E2E message to the recipient once the transfer // complete information them that all file parts have been sent. func (m *Manager) sendEndE2eMessage(recipient *id.ID) error { - // Get the partner + // get the partner partner, err := m.store.E2e().GetPartner(recipient) if err != nil { return errors.Errorf(endE2eGetPartnerErr, recipient, err) diff --git a/fileTransfer/sendNew.go b/fileTransfer/sendNew.go index b28fe263958c3ff5b95455faee9f3623f44267b1..4dce71d6e3b900d5584c8c940f240f626d2cbb0c 100644 --- a/fileTransfer/sendNew.go +++ b/fileTransfer/sendNew.go @@ -34,7 +34,7 @@ func (m *Manager) sendNewFileTransfer(recipient *id.ID, fileName, return errors.Errorf(newFtProtoMarshalErr, err) } - // Get partner relationship so that the silent preimage can be generated + // get partner relationship so that the silent preimage can be generated relationship, err := m.store.E2e().GetPartner(recipient) if err != nil { return err diff --git a/fileTransfer/send_test.go b/fileTransfer/send_test.go index d35e418b8efb80f7a1107d90370a1e7a23706687..813c50fa83bc0de0bc239fee4ff75e6a40287f2b 100644 --- a/fileTransfer/send_test.go +++ b/fileTransfer/send_test.go @@ -1009,7 +1009,7 @@ func TestManager_getPartSize(t *testing.T) { filePartMsgUsedLen := ftStorage.FmMinSize expected := 2*primeByteLen - cmixMsgUsedLen - filePartMsgUsedLen - 1 - // Get the part size + // get the part size partSize, err := m.getPartSize() if err != nil { t.Errorf("GetPartSize returned an error: %+v", err) diff --git a/groupChat/groupStore/dhKeyList.go b/groupChat/groupStore/dhKeyList.go index 38b7b56bf3d88c6bed432e29b5a580c270a0285a..5319cd33eb964f8e4027f0a13357f6ae806d0c84 100644 --- a/groupChat/groupStore/dhKeyList.go +++ b/groupChat/groupStore/dhKeyList.go @@ -96,7 +96,7 @@ func DeserializeDhKeyList(data []byte) (DhKeyList, error) { return nil, errors.Errorf(idUnmarshalErr, err) } - // Get length of DH key + // get length of DH key keyLen := int(binary.LittleEndian.Uint64(buff.Next(8))) // Read and decode DH key diff --git a/groupChat/groupStore/group.go b/groupChat/groupStore/group.go index 9216bc43e582a595585e8c4cd8f05b68e846f980..28b9555e367cf7f761dd437de792bac97fc6789b 100644 --- a/groupChat/groupStore/group.go +++ b/groupChat/groupStore/group.go @@ -180,13 +180,13 @@ func DeserializeGroup(data []byte) (Group, error) { var g Group var err error - // Get name + // get name nameLen := binary.LittleEndian.Uint64(buff.Next(8)) if nameLen > 0 { g.Name = buff.Next(int(nameLen)) } - // Get group ID + // get group ID var groupID id.ID copy(groupID[:], buff.Next(id.ArrIDLen)) if groupID == [id.ArrIDLen]byte{} { @@ -195,18 +195,18 @@ func DeserializeGroup(data []byte) (Group, error) { g.ID = &groupID } - // Get group key and preimages + // get group key and preimages copy(g.Key[:], buff.Next(group.KeyLen)) copy(g.IdPreimage[:], buff.Next(group.IdPreimageLen)) copy(g.KeyPreimage[:], buff.Next(group.KeyPreimageLen)) - // Get InitMessage + // get InitMessage initMessageLength := binary.LittleEndian.Uint64(buff.Next(8)) if initMessageLength > 0 { g.InitMessage = buff.Next(int(initMessageLength)) } - // Get created timestamp + // get created timestamp createdNano := int64(binary.LittleEndian.Uint64(buff.Next(8))) if createdNano == (time.Time{}).UnixNano() { g.Created = time.Time{} @@ -214,14 +214,14 @@ func DeserializeGroup(data []byte) (Group, error) { g.Created = time.Unix(0, createdNano) } - // Get member list + // get member list membersLength := binary.LittleEndian.Uint64(buff.Next(8)) g.Members, err = group.DeserializeMembership(buff.Next(int(membersLength))) if err != nil { return Group{}, errors.Errorf(membershipErr, err) } - // Get DH key list + // get DH key list g.DhKeys, err = DeserializeDhKeyList(buff.Bytes()) if err != nil { return Group{}, errors.Errorf(dhKeyListErr, err) diff --git a/groupChat/groupStore/store_test.go b/groupChat/groupStore/store_test.go index 0303446c99e2a4c5d36e51887a494d18f68810f8..e19b3928bd26eeffa17c040b973965f64927dfa5 100644 --- a/groupChat/groupStore/store_test.go +++ b/groupChat/groupStore/store_test.go @@ -440,11 +440,11 @@ func TestStore_Get(t *testing.T) { // Attempt to get group retrieved, exists := store.Get(grp.ID) if !exists { - t.Errorf("Get failed to return the expected group: %#v", grp) + t.Errorf("get failed to return the expected group: %#v", grp) } if !reflect.DeepEqual(grp, retrieved) { - t.Errorf("Get did not return the expected group."+ + t.Errorf("get did not return the expected group."+ "\nexpected: %#v\nreceived: %#v", grp, retrieved) } } @@ -462,7 +462,7 @@ func TestStore_Get_NoGroupError(t *testing.T) { // Attempt to get group retrieved, exists := store.Get(id.NewIdFromString("testID", id.Group, t)) if exists { - t.Errorf("Get returned a group that should not exist: %#v", retrieved) + t.Errorf("get returned a group that should not exist: %#v", retrieved) } } @@ -483,7 +483,7 @@ func TestStore_GetByKeyFp(t *testing.T) { t.Fatalf("Failed to add group: %+v", err) } - // Get group by fingerprint + // get group by fingerprint salt := newSalt(groupSalt) generatedFP := group.NewKeyFingerprint(grp.Key, salt, store.user.ID) retrieved, exists := store.GetByKeyFp(generatedFP, salt) @@ -510,7 +510,7 @@ func TestStore_GetByKeyFp_NoGroupError(t *testing.T) { t.Fatalf("Failed to make new Store: %+v", err) } - // Get group by fingerprint + // get group by fingerprint grp := createTestGroup(prng, t) salt := newSalt(groupSalt) generatedFP := group.NewKeyFingerprint(grp.Key, salt, store.user.ID) diff --git a/groupChat/makeGroup.go b/groupChat/makeGroup.go index 7cfe7dfd8326b1f221b9ef4a9bf16c8096879c3a..944449a6eb9db7ec1082b05279ee554f62467d9a 100644 --- a/groupChat/makeGroup.go +++ b/groupChat/makeGroup.go @@ -158,7 +158,7 @@ func (m Manager) buildMembership(members []*id.ID) (group.Membership, func getPreimages(streamGen *fastRNG.StreamGenerator) (group.IdPreimage, group.KeyPreimage, error) { - // Get new stream and defer its close + // get new stream and defer its close rng := streamGen.GetStream() defer rng.Close() diff --git a/groupChat/receive.go b/groupChat/receive.go index 93a149c4e0e480d4d56b98123ce1627cf5962d55..f17cac039d4a9facfb7d3774c21e8371e03ea197 100644 --- a/groupChat/receive.go +++ b/groupChat/receive.go @@ -99,7 +99,7 @@ func (m *Manager) readMessage(msg message.Receive) (gs.Group, group.MessageID, errors.Errorf(unmarshalPublicMsgErr, err) } - // Get the group from storage via key fingerprint lookup + // get the group from storage via key fingerprint lookup g, exists := m.gs.GetByKeyFp(cMixMsg.GetKeyFP(), pubMsg.GetSalt()) if !exists { return gs.Group{}, group.MessageID{}, time.Time{}, nil, nil, true, diff --git a/groupChat/receiveRequest.go b/groupChat/receiveRequest.go index 844b86249e593bdd5532bda0ed480058804e5b61..5cd9f57425f47b92347270f83a4e3428f81ac0e6 100644 --- a/groupChat/receiveRequest.go +++ b/groupChat/receiveRequest.go @@ -81,7 +81,7 @@ func (m *Manager) readRequest(msg message.Receive) (gs.Group, error) { return gs.Group{}, errors.Errorf(deserializeMembershipErr, err) } - // Get the relationship with the group leader + // get the relationship with the group leader partner, err := m.store.E2e().GetPartner(membership[0].ID) if err != nil { return gs.Group{}, errors.Errorf(getPrivKeyErr, err) diff --git a/groupChat/send.go b/groupChat/send.go index f5bf054fb2cb3b318ab61d15912001f1507af23f..4101576ec7d3863768a82fa5c1ea1d20d57d6d4c 100644 --- a/groupChat/send.go +++ b/groupChat/send.go @@ -39,7 +39,7 @@ const ( // send fails if the message is too long. func (m *Manager) Send(groupID *id.ID, message []byte) (id.Round, time.Time, group.MessageID, error) { - // Get the current time stripped of the monotonic clock + // get the current time stripped of the monotonic clock timeNow := netTime.Now().Round(0) // Create a cMix message for each group member diff --git a/groupChat/send_test.go b/groupChat/send_test.go index 2d6940c3a69dbe3b894481e738d6fbb1d7974e45..38042203e9ee2f42a922307e16e1891eaf38821c 100644 --- a/groupChat/send_test.go +++ b/groupChat/send_test.go @@ -35,7 +35,7 @@ func TestManager_Send(t *testing.T) { t.Errorf("Send() returned an error: %+v", err) } - // Get messages sent with or return an error if no messages were sent + // get messages sent with or return an error if no messages were sent var messages []message.TargetedCmixMessage if len(m.net.(*testNetworkManager).messages) > 0 { messages = m.net.(*testNetworkManager).GetMsgList(0) diff --git a/interfaces/params/network.go b/interfaces/params/network.go index a89db50e17a1063d99ef17e26cd12ab6fcc9b24f..16fa06bec47950aa3fab8d525528f3c38aa72a9b 100644 --- a/interfaces/params/network.go +++ b/interfaces/params/network.go @@ -21,7 +21,7 @@ type Network struct { // Longest delay between network events for Health tracker to denote that // the network is in a bad state NetworkHealthTimeout time.Duration - //Number of parallel node registration the client is capable of + //Number of parallel nodes registration the client is capable of ParallelNodeRegistrations uint //How far back in rounds the network should actually check KnownRoundsThreshold uint diff --git a/keyExchange/confirm.go b/keyExchange/confirm.go index 4c21f77db86638f24a50fcf65b65001e71e081c9..9e7996ded27d3b79fbed8f3119ecfec0acae8774 100644 --- a/keyExchange/confirm.go +++ b/keyExchange/confirm.go @@ -40,7 +40,7 @@ func handleConfirm(sess *storage.Session, confirmation message.Receive) { return } - //Get the partner + //get the partner partner, err := sess.E2e().GetPartner(confirmation.Sender) if err != nil { jww.ERROR.Printf( diff --git a/keyExchange/confirm_test.go b/keyExchange/confirm_test.go index 08b539a059b6de7c5d1c6251a03febe430992333..3dd8312ec791dfce8f70b195f1e80a865d4759c3 100644 --- a/keyExchange/confirm_test.go +++ b/keyExchange/confirm_test.go @@ -63,7 +63,7 @@ func TestHandleConfirm(t *testing.T) { sessionID := GeneratePartnerID(alicePrivKey, bobPubKey, genericGroup, aliceSIDHPrivKey, bobSIDHPubKey) - // Get Alice's manager for Bob + // get Alice's manager for Bob receivedManager, err := aliceSession.E2e().GetPartner(bobID) if err != nil { t.Errorf("Bob is not recognized as Alice's partner: %v", err) @@ -89,7 +89,7 @@ func TestHandleConfirm(t *testing.T) { // Handle the confirmation handleConfirm(aliceSession, receiveMsg) - // Get Alice's session for Bob + // get Alice's session for Bob confirmedSession := receivedManager.GetSendSession(sessionID) // Check that the session is in the proper status diff --git a/keyExchange/exchange_test.go b/keyExchange/exchange_test.go index 7bf6cbad9404705246738f207e3a613a7a81f7af..7136ea3dc36a23256af933b1f2030567393b13cb 100644 --- a/keyExchange/exchange_test.go +++ b/keyExchange/exchange_test.go @@ -108,7 +108,7 @@ func TestFullExchange(t *testing.T) { Encryption: message.E2E, } - // Get Alice's manager for reception from Bob + // get Alice's manager for reception from Bob receivedManager, err := aliceSession.E2e().GetPartner(exchangeBobId) if err != nil { t.Errorf("Failed to get bob's manager: %v", err) @@ -120,7 +120,7 @@ func TestFullExchange(t *testing.T) { // Allow the test time to work it's goroutines time.Sleep(1 * time.Second) - // Get Alice's session for Bob + // get Alice's session for Bob confirmedSession := receivedManager.GetSendSession(oldSessionID) // Generate the new session ID based off of Bob's new keys diff --git a/keyExchange/rekey_test.go b/keyExchange/rekey_test.go index 3e7d585328135b54a50366257a1b72891c425fbf..b507fc266803d597a6e39295911c3cb48894f263 100644 --- a/keyExchange/rekey_test.go +++ b/keyExchange/rekey_test.go @@ -27,7 +27,7 @@ func TestRekey(t *testing.T) { aliceSession.E2e().AddPartner(bobID, bobPubKey, alicePrivKey, e2e.GetDefaultSessionParams(), e2e.GetDefaultSessionParams()) - // Get Alice's manager for Bob + // get Alice's manager for Bob bobManager, err := aliceSession.E2e().GetPartner(bobID) if err != nil { t.Errorf("Bob is not recognized as Alice's partner: %v", err) diff --git a/keyExchange/trigger.go b/keyExchange/trigger.go index fcdb71aa93fc535ac879696ebe36a86d6045de87..4605f09280f6b6b55153d3f91b6316393d36de8e 100644 --- a/keyExchange/trigger.go +++ b/keyExchange/trigger.go @@ -60,7 +60,7 @@ func handleTrigger(sess *storage.Session, net interfaces.NetworkManager, return errors.New(errMsg) } - //Get the partner + //get the partner partner, err := sess.E2e().GetPartner(request.Sender) if err != nil { errMsg := fmt.Sprintf(errUnknown, request.Sender) diff --git a/keyExchange/trigger_test.go b/keyExchange/trigger_test.go index 6bfdb41e7ef44f22f9b34e46bd68b11e528f47e5..610428b2ce0ed3c84a2ececca56827b60c9b476e 100644 --- a/keyExchange/trigger_test.go +++ b/keyExchange/trigger_test.go @@ -102,7 +102,7 @@ func TestHandleTrigger(t *testing.T) { t.Errorf("Handle trigger error: %v", err) } - // Get Alice's manager for reception from Bob + // get Alice's manager for reception from Bob receivedManager, err := aliceSession.E2e().GetPartner(bobID) if err != nil { t.Errorf("Failed to get bob's manager: %v", err) diff --git a/network/ephemeral/addressSpace_test.go b/network/ephemeral/addressSpace_test.go index 03cca463bc829e9db4ff6bb916fb6738e9b12e19..98bfa6412c3b82f3810c054939c128af32b7123e 100644 --- a/network/ephemeral/addressSpace_test.go +++ b/network/ephemeral/addressSpace_test.go @@ -30,12 +30,12 @@ func Test_addressSpace_Get(t *testing.T) { as := NewAddressSpace() expectedSize := uint8(42) - // Call Get and error if it does not block + // Call get and error if it does not block wait := make(chan uint8) go func() { wait <- as.Get() }() select { case size := <-wait: - t.Errorf("Get failed to block and returned size %d.", size) + t.Errorf("get failed to block and returned size %d.", size) case <-time.NewTimer(10 * time.Millisecond).C: } @@ -44,17 +44,17 @@ func Test_addressSpace_Get(t *testing.T) { as.size = expectedSize as.cond.L.Unlock() - // Call Get and error if it does block + // Call get and error if it does block wait = make(chan uint8) go func() { wait <- as.Get() }() select { case size := <-wait: if size != expectedSize { - t.Errorf("Get returned the wrong size.\nexpected: %d\nreceived: %d", + t.Errorf("get returned the wrong size.\nexpected: %d\nreceived: %d", expectedSize, size) } case <-time.NewTimer(15 * time.Millisecond).C: - t.Error("Get blocking when the size has been updated.") + t.Error("get blocking when the size has been updated.") } } @@ -69,11 +69,11 @@ func Test_addressSpace_Get_WaitBroadcast(t *testing.T) { select { case size := <-wait: if size != initSize { - t.Errorf("Get returned the wrong size.\nexpected: %d\nreceived: %d", + t.Errorf("get returned the wrong size.\nexpected: %d\nreceived: %d", initSize, size) } case <-time.NewTimer(25 * time.Millisecond).C: - t.Error("Get blocking when the Cond has broadcast.") + t.Error("get blocking when the Cond has broadcast.") } }() @@ -138,7 +138,7 @@ func Test_addressSpace_update_GetAndChannels(t *testing.T) { "\nexpected: %d\nreceived: %d", i, expectedSize, size) } case <-time.NewTimer(20 * time.Millisecond).C: - t.Errorf("Timed out waiting for Get to return on thread %d.", i) + t.Errorf("Timed out waiting for get to return on thread %d.", i) } }(i, waitChan) } diff --git a/network/ephemeral/tracker.go b/network/ephemeral/tracker.go index e848c23c473b90170b740fc31cd5734bf746e7ad..632a172d52517c0a70298b573facefb3be568545 100644 --- a/network/ephemeral/tracker.go +++ b/network/ephemeral/tracker.go @@ -47,7 +47,7 @@ func track(session *storage.Session, addrSpace *AddressSpace, ourId *id.ID, stop "tracking: %+v", err) } - // Get the latest timestamp from store + // get the latest timestamp from store lastTimestampObj, err := session.Get(TimestampKey) if err != nil { jww.FATAL.Panicf("Could not get timestamp: %+v", err) @@ -206,7 +206,7 @@ func calculateTickerTime(baseIDs []ephemeral.ProtoIdentity, now time.Time) time. return time.Duration(0) } - // Get the last identity in the list + // get the last identity in the list lastIdentity := baseIDs[len(baseIDs)-1] // Factor out the grace period previously expanded upon diff --git a/network/follow.go b/network/follow.go index 817ba0effc0c01e744cd430effa7ecc874d746fb..d222ae813772c8020b71e27d2afdbef48461fd9b 100644 --- a/network/follow.go +++ b/network/follow.go @@ -13,9 +13,9 @@ package network // 3. Node addition and removal // This information is tracked by polling a gateway for the network definition // file (NDF). Once it detects an event it sends it off to the proper channel -// for a worker to update the client state (add/remove a node, check for +// for a worker to update the client state (add/remove a nodes, check for // messages at a gateway, etc). See: -// - /node/register.go for add/remove node events +// - /nodes/register.go for add/remove nodes events // - /rounds/historical.go for old round retrieval // - /rounds/retrieve.go for message retrieval // - /message/handle.go decryption, partitioning, and signaling of messages @@ -111,7 +111,7 @@ func (m *manager) followNetwork(report interfaces.ClientErrorReport, func (m *manager) follow(report interfaces.ClientErrorReport, rng csprng.Source, comms followNetworkComms, stop *stoppable.Single, abandon func(round id.Round)) { - //Get the identity we will poll for + //get the identity we will poll for identity, err := m.Session.Reception().GetIdentity(rng, m.addrSpace.GetWithoutWait()) if err != nil { jww.FATAL.Panicf("Failed to get an identity, this should be "+ @@ -130,7 +130,7 @@ func (m *manager) follow(report interfaces.ClientErrorReport, rng csprng.Source, atomic.AddUint64(m.tracker, 1) - // Get client version for poll + // get client version for poll version := m.Session.GetClientVersion() // Poll network updates @@ -187,7 +187,7 @@ func (m *manager) follow(report interfaces.ClientErrorReport, rng csprng.Source, } // ---- Node Events ---- - // NOTE: this updates the structure, AND sends events over the node + // NOTE: this updates the structure, AND sends events over the nodes // update channels about new and removed nodes if pollResp.PartialNDF != nil { err = m.Instance.UpdatePartialNdf(pollResp.PartialNDF) diff --git a/network/gateway/hostPool.go b/network/gateway/hostPool.go index dd4616cc4583d54621cf2fb42dc2611ab96cee95..8e452207811a9f6b41474085e8786bc23aa2c480 100644 --- a/network/gateway/hostPool.go +++ b/network/gateway/hostPool.go @@ -48,7 +48,7 @@ type HostManager interface { // Filter filters out IDs from the provided map based on criteria in the NDF. // The passed in map is a map of the NDF for easier acesss. The map is ID -> index in the NDF // There is no multithreading, the filter function can either edit the passed map or make a new one -// and return it. The general pattern is to loop through the map, then look up data about the node +// and return it. The general pattern is to loop through the map, then look up data about the nodes // in the ndf to make a filtering decision, then add them to a new map if they are accepted. type Filter func(map[id.ID]int, *ndf.NetworkDefinition) map[id.ID]int @@ -140,7 +140,7 @@ func newHostPool(poolParams PoolParams, rng *fastRNG.StreamGenerator, return nil, err } - // Get the last used list of hosts and use it to seed the host pool list + // get the last used list of hosts and use it to seed the host pool list hostList, err := storage.HostList().Get() numHostsAdded := 0 if err == nil { @@ -491,7 +491,7 @@ func (h *HostPool) selectGateway() *id.ID { nodeNdfIdx := h.ndfMap[*nodeId] isNodeStale := h.ndf.Nodes[nodeNdfIdx].Status == ndf.Stale if isNodeStale { - jww.DEBUG.Printf("Ignoring stale node: %s", nodeId.String()) + jww.DEBUG.Printf("Ignoring stale nodes: %s", nodeId.String()) continue } diff --git a/network/gateway/hostpool_test.go b/network/gateway/hostpool_test.go index 30f3b6a6151626a68e5d2b2fe4d3c282de0aefeb..bda350f1e655adbd8cc427ab2145361ccc02f942 100644 --- a/network/gateway/hostpool_test.go +++ b/network/gateway/hostpool_test.go @@ -327,7 +327,7 @@ func TestHostPool_ForceReplace(t *testing.T) { params := DefaultPoolParams() params.PoolSize = uint32(len(testNdf.Gateways)) - // Add a stale node + // Add a stale nodes newGateway := ndf.Gateway{ ID: id.NewIdFromUInt(27, id.Gateway, t).Bytes(), } diff --git a/network/gateway/sender.go b/network/gateway/sender.go index dae588f4f355130749f7c16057afd0b301b0b6ca..9945be6c71c693c59a12bb4d14937993535cb0cd 100644 --- a/network/gateway/sender.go +++ b/network/gateway/sender.go @@ -89,7 +89,7 @@ func (s *Sender) SendToPreferred(targets []*id.ID, sendFunc sendToPreferredFunc, startTime := netTime.Now() - // Get the hosts and shuffle randomly + // get the hosts and shuffle randomly targetHosts := s.getPreferred(targets) // Attempt to send directly to targets if they are in the HostPool diff --git a/network/gateway/sender_test.go b/network/gateway/sender_test.go index 771df617287adcc15cc095ddcab4a5112206f162..3927b69efb3f4de5859a6c721ec5dfa6829d8615 100644 --- a/network/gateway/sender_test.go +++ b/network/gateway/sender_test.go @@ -169,7 +169,7 @@ func TestSender_SendToPreferred(t *testing.T) { t.Errorf("ForceReplace error: Failed to disconnect from old host %s", preferredHost) } - // Get a new host to test on + // get a new host to test on preferredIndex = 4 preferredHost = sender.hostList[preferredIndex] diff --git a/network/manager.go b/network/manager.go index 1cec837978ffc0aaa120ea061b4d993df8110e07..790e00833d77afb316e092e854a15b15285bb740 100644 --- a/network/manager.go +++ b/network/manager.go @@ -23,13 +23,13 @@ import ( "gitlab.com/elixxir/client/network/health" "gitlab.com/elixxir/client/network/internal" "gitlab.com/elixxir/client/network/message" - "gitlab.com/elixxir/client/network/node" + "gitlab.com/elixxir/client/network/nodes" "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" - "gitlab.com/elixxir/comms/network" + commNetwork "gitlab.com/elixxir/comms/network" "gitlab.com/elixxir/crypto/fastRNG" "gitlab.com/xx_network/crypto/csprng" "gitlab.com/xx_network/primitives/id" @@ -84,7 +84,7 @@ func NewManager(session *storage.Session, switchboard *switchboard.Switchboard, ndf *ndf.NetworkDefinition) (interfaces.NetworkManager, error) { //start network instance - instance, err := network.NewInstance(comms.ProtoComms, ndf, nil, nil, network.None, params.FastPolling) + instance, err := commNetwork.NewInstance(comms.ProtoComms, ndf, nil, nil, commNetwork.None, params.FastPolling) if err != nil { return nil, errors.WithMessage(err, "failed to create"+ " client network manager") @@ -117,14 +117,14 @@ func NewManager(session *storage.Session, switchboard *switchboard.Switchboard, Rng: rng, Comms: comms, Health: health.Init(instance, params.NetworkHealthTimeout), - NodeRegistration: make(chan network.NodeGateway, params.RegNodesBufferLen), + NodeRegistration: make(chan commNetwork.NodeGateway, params.RegNodesBufferLen), Instance: instance, TransmissionID: session.User().GetCryptographicIdentity().GetTransmissionID(), ReceptionID: session.User().GetCryptographicIdentity().GetReceptionID(), Events: events, } - // Set up node registration chan for network instance + // Set up nodes registration chan for network instance m.Instance.SetAddGatewayChan(m.NodeRegistration) // Set up gateway.Sender @@ -174,8 +174,8 @@ func (m *manager) Follow(report interfaces.ClientErrorReport) (stoppable.Stoppab multi.Add(healthStop) // Node Updates - multi.Add(node.StartRegistration(m.GetSender(), m.Session, m.Rng, - m.Comms, m.NodeRegistration, m.param.ParallelNodeRegistrations)) // Adding/Keys + multi.Add(nodes.StartRegistration(m.GetSender(), m.Session, m.Rng, + m.Comms, m.NodeRegistration, m.param.ParallelNodeRegistrations)) // Adding/MixCypher //TODO-remover //m.runners.Add(StartNodeRemover(m.Context)) // Removing @@ -206,7 +206,7 @@ func (m *manager) GetHealthTracker() interfaces.HealthTracker { } // GetInstance returns the network instance object (ndf state) -func (m *manager) GetInstance() *network.Instance { +func (m *manager) GetInstance() *commNetwork.Instance { return m.Instance } @@ -223,7 +223,7 @@ func (m *manager) CheckGarbledMessages() { } // InProgressRegistrations returns an approximation of the number of in progress -// node registrations. +// nodes registrations. func (m *manager) InProgressRegistrations() int { return len(m.Internal.NodeRegistration) } diff --git a/network/message/critical.go b/network/message/critical.go deleted file mode 100644 index 1714e193b27f959c581c316ffb0c4c1efc496bab..0000000000000000000000000000000000000000 --- a/network/message/critical.go +++ /dev/null @@ -1,140 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright © 2020 xx network SEZC // -// // -// Use of this source code is governed by a license that can be found in the // -// LICENSE file // -/////////////////////////////////////////////////////////////////////////////// - -package message - -import ( - jww "github.com/spf13/jwalterweatherman" - "gitlab.com/elixxir/client/interfaces/message" - "gitlab.com/elixxir/client/interfaces/params" - "gitlab.com/elixxir/client/interfaces/utility" - "gitlab.com/elixxir/client/stoppable" - ds "gitlab.com/elixxir/comms/network/dataStructures" - "gitlab.com/elixxir/primitives/format" - "gitlab.com/elixxir/primitives/states" - "gitlab.com/xx_network/primitives/id" - "time" -) - -// Critical Messages are protocol layer communications that must succeed. These -// are added to the persistent critical messages store. This thread waits for -// network access to move from unhealthy to healthy and the sends all critical -// messages. -// Health is tracked by registering with the Health -// Tracker (/network/Health/Tracker.g0) - -//Thread loop for processing critical messages -func (m *Manager) processCriticalMessages(stop *stoppable.Single) { - for { - select { - case <-stop.Quit(): - stop.ToStopped() - return - case isHealthy := <-m.networkIsHealthy: - if isHealthy { - m.criticalMessages(stop) - } - } - } -} - -// processes all critical messages -func (m *Manager) criticalMessages(stop *stoppable.Single) { - critMsgs := m.Session.GetCriticalMessages() - // try to send every message in the critical messages and the raw critical - // messages buffer in parallel - - //critical messages - for msg, param, has := critMsgs.Next(); has; msg, param, has = critMsgs.Next() { - go func(msg message.Send, param params.E2E) { - - jww.INFO.Printf("Resending critical message to %s with params %#v", - msg.Recipient, param) - //send the message - rounds, _, _, err := m.SendE2E(msg, param, stop) - //if the message fail to send, notify the buffer so it can be handled - //in the future and exit - if err != nil { - jww.ERROR.Printf("Failed to send critical message to %s "+ - " on notification of healthy network: %+v", msg.Recipient, - err) - critMsgs.Failed(msg, param) - return - } - //wait on the results to make sure the rounds were successful - sendResults := make(chan ds.EventReturn, len(rounds)) - roundEvents := m.Instance.GetRoundEvents() - for _, r := range rounds { - roundEvents.AddRoundEventChan(r, sendResults, 1*time.Minute, - states.COMPLETED, states.FAILED) - } - success, numTimeOut, numRoundFail := utility.TrackResults(sendResults, len(rounds)) - if !success { - jww.ERROR.Printf("critical message send to %s failed "+ - "to transmit transmit %v/%v paritions on rounds %d: %v "+ - "round failures, %v timeouts", msg.Recipient, - numRoundFail+numTimeOut, len(rounds), rounds, numRoundFail, numTimeOut) - critMsgs.Failed(msg, param) - return - } - - jww.INFO.Printf("Successful resend of critical message "+ - "to %s on rounds %d", msg.Recipient, rounds) - critMsgs.Succeeded(msg, param) - }(msg, param) - } - - critRawMsgs := m.Session.GetCriticalRawMessages() - param := params.GetDefaultCMIX() - //raw critical messages - for msg, rid, has := critRawMsgs.Next(); has; msg, rid, has = critRawMsgs.Next() { - localRid := rid.DeepCopy() - go func(msg format.Message, rid *id.ID) { - jww.INFO.Printf("Resending critical raw message to %s "+ - "(msgDigest: %s)", rid, msg.Digest()) - //send the message - round, _, err := m.SendCMIX(m.sender, msg, rid, param, stop) - //if the message fail to send, notify the buffer so it can be handled - //in the future and exit - if err != nil { - jww.ERROR.Printf("Failed to send critical raw message on "+ - "notification of healthy network: %+v", err) - critRawMsgs.Failed(msg, rid) - return - } - - //wait on the results to make sure the rounds were successful - sendResults := make(chan ds.EventReturn, 1) - roundEvents := m.Instance.GetRoundEvents() - - roundEvents.AddRoundEventChan(round, sendResults, 1*time.Minute, - states.COMPLETED, states.FAILED) - - success, numTimeOut, _ := utility.TrackResults(sendResults, 1) - if !success { - if numTimeOut > 0 { - jww.ERROR.Printf("critical raw message resend to %s "+ - "(msgDigest: %s) on round %d failed to transmit due to "+ - "timeout", rid, msg.Digest(), round) - } else { - jww.ERROR.Printf("critical raw message resend to %s "+ - "(msgDigest: %s) on round %d failed to transmit due to "+ - "send failure", rid, msg.Digest(), round) - } - - critRawMsgs.Failed(msg, rid) - return - } - - jww.INFO.Printf("Successful resend of critical raw message "+ - "to %s (msgDigest: %s) on round %d", rid, msg.Digest(), round) - - critRawMsgs.Succeeded(msg, rid) - }(msg, localRid) - } - -} diff --git a/network/message/fingerprints_test.go b/network/message/fingerprints_test.go index 6a688ec3410a0a0067a1acbaadebbff06694d249..597a54f44742064129869f4dc3c9002397bbcd66 100644 --- a/network/message/fingerprints_test.go +++ b/network/message/fingerprints_test.go @@ -5,7 +5,7 @@ // LICENSE file // /////////////////////////////////////////////////////////////////////////////// -package network +package message import ( jww "github.com/spf13/jwalterweatherman" @@ -48,14 +48,14 @@ func TestFingerprints_Get(t *testing.T) { // Attempt to retrieve value from map received, exists := fpTracker.Get(fp) if !exists { - t.Fatalf("Get error: Did not retrieve fingerprint (%s) that "+ + t.Fatalf("get error: Did not retrieve fingerprint (%s) that "+ "should have been in map.", fp) } // Check that received value contains the expected data expected := newProcessor(mp) if !reflect.DeepEqual(received, expected) { - t.Fatalf("Get error: Map does not contain expected data."+ + t.Fatalf("get error: Map does not contain expected data."+ "\nExpected: %v"+ "\nReceived: %v", expected, received) } diff --git a/network/message/garbled_test.go b/network/message/garbled_test.go index 86f23b84776abbf2d2e9eae52fec21a690540ad9..5aeed7ce154a0f86f216eceff2c641decb34eddd 100644 --- a/network/message/garbled_test.go +++ b/network/message/garbled_test.go @@ -8,7 +8,6 @@ import ( "gitlab.com/elixxir/client/interfaces/params" "gitlab.com/elixxir/client/network/gateway" "gitlab.com/elixxir/client/network/internal" - "gitlab.com/elixxir/client/network/message/parse" "gitlab.com/elixxir/client/stoppable" "gitlab.com/elixxir/client/storage" "gitlab.com/elixxir/client/storage/edge" diff --git a/network/message/manager.go b/network/message/manager.go index a9422cc50b8c32a380c5d7201db576af64da0231..d9d1ec2c0ab20891547258732fd98b0305bec452 100644 --- a/network/message/manager.go +++ b/network/message/manager.go @@ -15,15 +15,12 @@ import ( "gitlab.com/elixxir/client/interfaces/params" "gitlab.com/elixxir/client/network/gateway" "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" ) type Manager struct { - param params.Network - partitioner parse.Partitioner + param params.Network internal.Internal sender *gateway.Sender blacklistedNodes map[string]interface{} @@ -39,10 +36,8 @@ type Manager struct { func NewManager(internal internal.Internal, param params.Network, nodeRegistration chan network.NodeGateway, sender *gateway.Sender) *Manager { - dummyMessage := format.NewMessage(internal.Session.Cmix().GetGroup().GetP().ByteLen()) m := Manager{ param: param, - partitioner: parse.NewPartitioner(dummyMessage.ContentsSize(), internal.Session), messageReception: make(chan Bundle, param.MessageReceptionBuffLen), networkIsHealthy: make(chan bool, 1), triggerGarbled: make(chan struct{}, 100), @@ -80,12 +75,6 @@ func (m *Manager) StartProcessies() stoppable.Stoppable { multi.Add(stop) } - //create the critical messages thread - critStop := stoppable.NewSingle("CriticalMessages") - go m.processCriticalMessages(critStop) - m.Health.AddChannel(m.networkIsHealthy) - multi.Add(critStop) - //create the garbled messages thread garbledStop := stoppable.NewSingle("GarbledMessages") go m.processGarbledMessages(garbledStop) diff --git a/network/message/parse/firstMessagePart.go b/network/message/parse/firstMessagePart.go deleted file mode 100644 index fa67b64411e0f2272178452eeb0a8deb91612271..0000000000000000000000000000000000000000 --- a/network/message/parse/firstMessagePart.go +++ /dev/null @@ -1,131 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright © 2020 xx network SEZC // -// // -// Use of this source code is governed by a license that can be found in the // -// LICENSE file // -/////////////////////////////////////////////////////////////////////////////// - -package parse - -import ( - "encoding/binary" - "gitlab.com/elixxir/client/interfaces/message" - "time" -) - -// Sizes of message parts, in bytes. -const ( - numPartsLen = 1 - typeLen = message.TypeLen - timestampLen = 8 - firstPartVerLen = 1 - firstHeaderLen = headerLen + numPartsLen + typeLen + timestampLen + firstPartVerLen -) - -// The current version of the firstMessagePart message format. -const firstMessagePartCurrentVersion = 0 - -type firstMessagePart struct { - messagePart - NumParts []byte - Type []byte - Timestamp []byte - Version []byte // Version of the message format; always the last bit -} - -// newFirstMessagePart creates a new firstMessagePart for the passed in -// contents. Does no length checks. -func newFirstMessagePart(mt message.Type, id uint32, numParts uint8, - timestamp time.Time, contents []byte) firstMessagePart { - - // Create the message structure - m := FirstMessagePartFromBytes(make([]byte, len(contents)+firstHeaderLen)) - - // Set the message type - binary.BigEndian.PutUint32(m.Type, uint32(mt)) - - // Set the message ID - binary.BigEndian.PutUint32(m.Id, id) - - // Set the part number. It is always zero because this is the first part. - // Because the default is zero this step could be skipped, but keep it in - // the code for clarity. - m.Part[0] = 0 - - // Set the number of parts to the message - m.NumParts[0] = numParts - - // Set the timestamp as unix nano - binary.BigEndian.PutUint64(m.Timestamp, uint64(timestamp.UnixNano())) - - // Set the length of the contents - binary.BigEndian.PutUint16(m.Len, uint16(len(contents))) - - // Set the contents - copy(m.Contents[:len(contents)], contents) - - // Set the version number - m.Version[0] = firstMessagePartCurrentVersion - - return m -} - -// Map of firstMessagePart encoding version numbers to their map functions. -var firstMessagePartFromBytesVersions = map[uint8]func([]byte) firstMessagePart{ - firstMessagePartCurrentVersion: firstMessagePartFromBytesVer0, -} - -// FirstMessagePartFromBytes builds a firstMessagePart mapped to the passed in -// data slice. Mapped by reference; a copy is not made. -func FirstMessagePartFromBytes(data []byte) firstMessagePart { - - // Map the data according to its version - version := data[len(data)-1] - mapFunc, exists := firstMessagePartFromBytesVersions[version] - if exists { - return mapFunc(data) - } - - return firstMessagePart{} -} - -func firstMessagePartFromBytesVer0(data []byte) firstMessagePart { - return firstMessagePart{ - messagePart: messagePart{ - Data: data, - Id: data[:idLen], - Part: data[idLen : idLen+partLen], - Len: data[idLen+partLen : idLen+partLen+lenLen], - Contents: data[idLen+partLen+lenLen+numPartsLen+typeLen+timestampLen : len(data)-firstPartVerLen-1], - }, - NumParts: data[idLen+partLen+lenLen : idLen+partLen+lenLen+numPartsLen], - Type: data[idLen+partLen+lenLen+numPartsLen : idLen+partLen+lenLen+numPartsLen+typeLen], - Timestamp: data[idLen+partLen+lenLen+numPartsLen+typeLen : idLen+partLen+lenLen+numPartsLen+typeLen+timestampLen], - Version: data[len(data)-firstPartVerLen:], - } -} - -// GetType returns the message type. -func (m firstMessagePart) GetType() message.Type { - return message.Type(binary.BigEndian.Uint32(m.Type)) -} - -// GetNumParts returns the number of message parts. -func (m firstMessagePart) GetNumParts() uint8 { - return m.NumParts[0] -} - -// GetTimestamp returns the timestamp as a time.Time. -func (m firstMessagePart) GetTimestamp() time.Time { - return time.Unix(0, int64(binary.BigEndian.Uint64(m.Timestamp))) -} - -// GetVersion returns the version number of the data encoding. -func (m firstMessagePart) GetVersion() uint8 { - return m.Version[0] -} - -// Bytes returns the serialised message data. -func (m firstMessagePart) Bytes() []byte { - return m.Data -} diff --git a/network/message/parse/firstMessagePart_test.go b/network/message/parse/firstMessagePart_test.go deleted file mode 100644 index 9902790552e45add0d651b5db38e3e277173b39e..0000000000000000000000000000000000000000 --- a/network/message/parse/firstMessagePart_test.go +++ /dev/null @@ -1,95 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright © 2020 xx network SEZC // -// // -// Use of this source code is governed by a license that can be found in the // -// LICENSE file // -/////////////////////////////////////////////////////////////////////////////// - -package parse - -import ( - "bytes" - "gitlab.com/elixxir/client/interfaces/message" - "reflect" - "testing" - "time" -) - -// Expected firstMessagePart for checking against, generated by fmp in TestNewFirstMessagePart -var efmp = firstMessagePart{ - messagePart: messagePart{ - Data: []byte{0, 0, 4, 53, 0, 0, 13, 2, 0, 0, 0, 2, 22, 87, 28, 11, 215, - 220, 82, 0, 116, 101, 115, 116, 105, 110, 103, 115, 116, 114, 105, - 110, 103, 0, firstMessagePartCurrentVersion}, - Id: []byte{0, 0, 4, 53}, - Part: []byte{0}, - Len: []byte{0, 13}, - Contents: []byte{116, 101, 115, 116, 105, 110, 103, 115, 116, 114, 105, - 110, 103}, - }, - NumParts: []byte{2}, - Type: []byte{0, 0, 0, 2}, - Timestamp: []byte{22, 87, 28, 11, 215, 220, 82, 0}, - Version: []byte{firstMessagePartCurrentVersion}, -} - -// Test that newFirstMessagePart returns a correctly made firstMessagePart -func TestNewFirstMessagePart(t *testing.T) { - fmp := newFirstMessagePart( - message.XxMessage, - 1077, - 2, - time.Unix(1609786229, 0).UTC(), - []byte{'t', 'e', 's', 't', 'i', 'n', 'g', 's', 't', 'r', 'i', 'n', 'g'}, - ) - - gotTime := fmp.GetTimestamp() - expectedTime := time.Unix(1609786229, 0).UTC() - if !gotTime.Equal(expectedTime) { - t.Errorf("Failed to get expected timestamp."+ - "\nexpected: %s\nreceived: %s", expectedTime, gotTime) - } - - if !reflect.DeepEqual(fmp, efmp) { - t.Errorf("Expected and got firstMessagePart did not match."+ - "\nexpected: %+v\nrecieved: %+v", efmp, fmp) - } -} - -// Test that FirstMessagePartFromBytes returns a correctly made firstMessagePart from the bytes of one -func TestFirstMessagePartFromBytes(t *testing.T) { - fmp := FirstMessagePartFromBytes(efmp.Data) - - if !reflect.DeepEqual(fmp, efmp) { - t.Error("Expected and got firstMessagePart did not match") - } -} - -// Test that GetType returns the correct type for a firstMessagePart -func TestFirstMessagePart_GetType(t *testing.T) { - if efmp.GetType() != message.XxMessage { - t.Errorf("Got %v, expected %v", efmp.GetType(), message.XxMessage) - } -} - -// Test that GetNumParts returns the correct number of parts for a firstMessagePart -func TestFirstMessagePart_GetNumParts(t *testing.T) { - if efmp.GetNumParts() != 2 { - t.Errorf("Got %v, expected %v", efmp.GetNumParts(), 2) - } -} - -// Test that GetTimestamp returns the correct timestamp for a firstMessagePart -func TestFirstMessagePart_GetTimestamp(t *testing.T) { - et := efmp.GetTimestamp() - if !time.Unix(1609786229, 0).Equal(et) { - t.Errorf("Got %v, expected %v", et, time.Unix(1609786229, 0)) - } -} - -// Test that GetTimestamp returns the correct bytes for a firstMessagePart -func TestFirstMessagePart_Bytes(t *testing.T) { - if bytes.Compare(efmp.Bytes(), efmp.Data) != 0 { - t.Errorf("Got %v, expected %v", efmp.Bytes(), efmp.Data) - } -} diff --git a/network/message/parse/messagePart.go b/network/message/parse/messagePart.go deleted file mode 100644 index 01c514d7c33fe1654534a67aeaf8671744d93982..0000000000000000000000000000000000000000 --- a/network/message/parse/messagePart.go +++ /dev/null @@ -1,118 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright © 2020 xx network SEZC // -// // -// Use of this source code is governed by a license that can be found in the // -// LICENSE file // -/////////////////////////////////////////////////////////////////////////////// - -package parse - -import ( - "encoding/binary" -) - -// Sizes of message parts, in bytes. -const ( - idLen = 4 - partLen = 1 - lenLen = 2 - partVerLen = 1 - headerLen = idLen + partLen + lenLen + partVerLen -) - -// The current version of the messagePart message format. -const messagePartCurrentVersion = 0 - -type messagePart struct { - Data []byte - Id []byte - Part []byte - Len []byte - Contents []byte - Version []byte // Version of the message format; always the last bit -} - -// newMessagePart creates a new messagePart for the passed in contents. Does no -// length checks. -func newMessagePart(id uint32, part uint8, contents []byte) messagePart { - // Create the message structure - data := make([]byte, len(contents)+headerLen) - m := messagePartFromBytes(data) - - // Set the message ID - binary.BigEndian.PutUint32(m.Id, id) - - // Set the message part number - m.Part[0] = part - - // Set the contents length - binary.BigEndian.PutUint16(m.Len, uint16(len(contents))) - - // Copy the contents into the message - copy(m.Contents[:len(contents)], contents) - - // Set the version number - m.Version[0] = messagePartCurrentVersion - - return m -} - -// Map of messagePart encoding version numbers to their map functions. -var messagePartFromBytesVersions = map[uint8]func([]byte) messagePart{ - messagePartCurrentVersion: messagePartFromBytesVer0, -} - -// messagePartFromBytes builds a messagePart mapped to the passed in data slice. -// Mapped by reference; a copy is not made. -func messagePartFromBytes(data []byte) messagePart { - - // Map the data according to its version - version := data[len(data)-1] - mapFunc, exists := messagePartFromBytesVersions[version] - if exists { - return mapFunc(data) - } - - return messagePart{} -} - -func messagePartFromBytesVer0(data []byte) messagePart { - return messagePart{ - Data: data, - Id: data[:idLen], - Part: data[idLen : idLen+partLen], - Len: data[idLen+partLen : idLen+partLen+lenLen], - Contents: data[idLen+partLen+lenLen : len(data)-partVerLen], - Version: data[len(data)-partVerLen:], - } -} - -// GetID returns the message ID. -func (m messagePart) GetID() uint32 { - return binary.BigEndian.Uint32(m.Id) -} - -// GetPart returns the message part number. -func (m messagePart) GetPart() uint8 { - return m.Part[0] -} - -// GetContents returns the entire contents slice. -func (m messagePart) GetContents() []byte { - return m.Contents -} - -// GetSizedContents returns the contents truncated to include only stored data. -func (m messagePart) GetSizedContents() []byte { - return m.Contents[:m.GetContentsLength()] -} - -// GetContentsLength returns the length of the data in the contents. -func (m messagePart) GetContentsLength() int { - return int(binary.BigEndian.Uint16(m.Len)) -} - -// Bytes returns the serialised message data. -func (m messagePart) Bytes() []byte { - return m.Data -} diff --git a/network/message/parse/messagePart_test.go b/network/message/parse/messagePart_test.go deleted file mode 100644 index 61ecc7467ff5c95dd2cf89830cacbb319cf9660f..0000000000000000000000000000000000000000 --- a/network/message/parse/messagePart_test.go +++ /dev/null @@ -1,72 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright © 2020 xx network SEZC // -// // -// Use of this source code is governed by a license that can be found in the // -// LICENSE file // -/////////////////////////////////////////////////////////////////////////////// - -package parse - -import ( - "bytes" - "reflect" - "testing" -) - -// Expected messagePart for checking against, generated by gotmp in Test_newMessagePart -var emp = messagePart{ - Data: []uint8{0x0, 0x0, 0x0, 0x20, 0x6, 0x0, 0x7, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, messagePartCurrentVersion}, - Id: []uint8{0x0, 0x0, 0x0, 0x20}, Part: []uint8{0x6}, - Len: []uint8{0x0, 0x7}, - Contents: []uint8{0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67}, - Version: []uint8{messagePartCurrentVersion}, -} - -// This tests that a new function part is successfully created -func Test_newMessagePart(t *testing.T) { - gotmp := newMessagePart(32, 6, []byte{'t', 'e', 's', 't', 'i', 'n', 'g'}) - if !reflect.DeepEqual(gotmp, emp) { - t.Errorf("MessagePart received and MessagePart expected do not match."+ - "\nexpected: %#v\nreceived: %#v", emp, gotmp) - } -} - -// Test that GetID returns the correct ID -func TestMessagePart_GetID(t *testing.T) { - if emp.GetID() != 32 { - t.Errorf("received and expected do not match."+ - "\n\tGot: %#v\n\tExpected: %#v", emp.GetID(), 32) - } -} - -// Test that GetPart returns the correct part number -func TestMessagePart_GetPart(t *testing.T) { - if emp.GetPart() != 6 { - t.Errorf("received and expected do not match."+ - "\n\tGot: %#v\n\tExpected: %#v", emp.GetPart(), 6) - } -} - -// Test that GetContents returns the message contests -func TestMessagePart_GetContents(t *testing.T) { - if bytes.Compare(emp.GetContents(), []byte{'t', 'e', 's', 't', 'i', 'n', 'g'}) != 0 { - t.Errorf("received and expected do not match."+ - "\n\tGot: %#v\n\tExpected: %#v", emp.GetContents(), 6) - } -} - -// Test that GetSizedContents returns the message contests -func TestMessagePart_GetSizedContents(t *testing.T) { - if bytes.Compare(emp.GetSizedContents(), []byte{'t', 'e', 's', 't', 'i', 'n', 'g'}) != 0 { - t.Errorf("received and expected do not match."+ - "\n\tGot: %#v\n\tExpected: %#v", emp.GetSizedContents(), 6) - } -} - -// Test that GetContentsLength returns the message length -func TestMessagePart_GetContentsLength(t *testing.T) { - if emp.GetContentsLength() != 7 { - t.Errorf("received and expected do not match."+ - "\n\tGot: %#v\n\tExpected: %#v", emp.GetContentsLength(), 7) - } -} diff --git a/network/message/parse/partition.go b/network/message/parse/partition.go deleted file mode 100644 index ad66ba2f30e09434dc090f07e0917137973d9b00..0000000000000000000000000000000000000000 --- a/network/message/parse/partition.go +++ /dev/null @@ -1,108 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright © 2020 xx network SEZC // -// // -// Use of this source code is governed by a license that can be found in the // -// LICENSE file // -/////////////////////////////////////////////////////////////////////////////// - -package parse - -import ( - "github.com/pkg/errors" - "gitlab.com/elixxir/client/interfaces/message" - "gitlab.com/elixxir/client/storage" - "gitlab.com/xx_network/primitives/id" - "gitlab.com/xx_network/primitives/netTime" - "time" -) - -const MaxMessageParts = 255 - -type Partitioner struct { - baseMessageSize int - firstContentsSize int - partContentsSize int - deltaFirstPart int - maxSize int - session *storage.Session -} - -func NewPartitioner(messageSize int, session *storage.Session) Partitioner { - p := Partitioner{ - baseMessageSize: messageSize, - firstContentsSize: messageSize - firstHeaderLen, - partContentsSize: messageSize - headerLen, - deltaFirstPart: firstHeaderLen - headerLen, - session: session, - } - p.maxSize = p.firstContentsSize + (MaxMessageParts-1)*p.partContentsSize - return p -} - -func (p Partitioner) Partition(recipient *id.ID, mt message.Type, - timestamp time.Time, payload []byte) ([][]byte, uint64, error) { - - if len(payload) > p.maxSize { - return nil, 0, errors.Errorf("Payload is too long, max payload "+ - "length is %d, received %d", p.maxSize, len(payload)) - } - - // Get the ID of the sent message - fullMessageID, messageID := p.session.Conversations().Get(recipient).GetNextSendID() - - // Get the number of parts of the message; this equates to just a linear - // equation - numParts := uint8((len(payload) + p.deltaFirstPart + p.partContentsSize - 1) / p.partContentsSize) - parts := make([][]byte, numParts) - - // Create the first message part - var sub []byte - sub, payload = splitPayload(payload, p.firstContentsSize) - parts[0] = newFirstMessagePart(mt, messageID, numParts, timestamp, sub).Bytes() - - // Create all subsequent message parts - for i := uint8(1); i < numParts; i++ { - sub, payload = splitPayload(payload, p.partContentsSize) - parts[i] = newMessagePart(messageID, i, sub).Bytes() - } - - return parts, fullMessageID, nil -} - -func (p Partitioner) HandlePartition(sender *id.ID, _ message.EncryptionType, - contents []byte, relationshipFingerprint []byte) (message.Receive, bool) { - - if isFirst(contents) { - // If it is the first message in a set, then handle it as so - - // Decode the message structure - fm := FirstMessagePartFromBytes(contents) - - // Handle the message ID - messageID := p.session.Conversations().Get(sender). - ProcessReceivedMessageID(fm.GetID()) - storeageTimestamp := netTime.Now() - return p.session.Partition().AddFirst(sender, fm.GetType(), - messageID, fm.GetPart(), fm.GetNumParts(), fm.GetTimestamp(), storeageTimestamp, - fm.GetSizedContents(), relationshipFingerprint) - } else { - // If it is a subsequent message part, handle it as so - mp := messagePartFromBytes(contents) - messageID := p.session.Conversations().Get(sender). - ProcessReceivedMessageID(mp.GetID()) - - return p.session.Partition().Add(sender, messageID, mp.GetPart(), - mp.GetSizedContents(), relationshipFingerprint) - } -} - -func splitPayload(payload []byte, length int) ([]byte, []byte) { - if len(payload) < length { - return payload, payload - } - return payload[:length], payload[length:] -} - -func isFirst(payload []byte) bool { - return payload[idLen] == 0 -} diff --git a/network/message/parse/partition_test.go b/network/message/parse/partition_test.go deleted file mode 100644 index 7c063f2d222d9171416a7d0366325dd464da7475..0000000000000000000000000000000000000000 --- a/network/message/parse/partition_test.go +++ /dev/null @@ -1,106 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright © 2020 xx network SEZC // -// // -// Use of this source code is governed by a license that can be found in the // -// LICENSE file // -/////////////////////////////////////////////////////////////////////////////// - -package parse - -import ( - "gitlab.com/elixxir/client/interfaces/message" - "gitlab.com/elixxir/client/storage" - "gitlab.com/xx_network/primitives/id" - "gitlab.com/xx_network/primitives/netTime" - "testing" -) - -var ipsumTestStr = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras sit amet euismod est. Donec dolor " + - "neque, efficitur et interdum eu, lacinia quis mi. Duis bibendum elit ac lacus finibus pharetra. Suspendisse " + - "blandit erat in odio faucibus consectetur. Suspendisse sed consequat purus. Curabitur fringilla mi sit amet odio " + - "interdum suscipit. Etiam vitae dui posuere, congue mi a, convallis odio. In commodo risus at lorem volutpat " + - "placerat. In cursus magna purus, suscipit dictum lorem aliquam non. Praesent efficitur." - -// Test that NewPartitioner outputs a correctly made Partitioner -func TestNewPartitioner(t *testing.T) { - storeSession := storage.InitTestingSession(t) - p := NewPartitioner(4096, storeSession) - - if p.baseMessageSize != 4096 { - t.Errorf("baseMessageSize content mismatch"+ - "\n\texpected: %v\n\treceived: %v", - 4096, p.baseMessageSize) - } - - if p.deltaFirstPart != firstHeaderLen-headerLen { - t.Errorf("deltaFirstPart content mismatch"+ - "\n\texpected: %v\n\treceived: %v", - firstHeaderLen-headerLen, p.deltaFirstPart) - } - - if p.firstContentsSize != 4096-firstHeaderLen { - t.Errorf("firstContentsSize content mismatch"+ - "\n\texpected: %v\n\treceived: %v", - 4096-firstHeaderLen, p.firstContentsSize) - } - - if p.maxSize != (4096-firstHeaderLen)+(MaxMessageParts-1)*(4096-headerLen) { - t.Errorf("maxSize content mismatch"+ - "\n\texpected: %v\n\treceived: %v", - (4096-firstHeaderLen)+(MaxMessageParts-1)*(4096-headerLen), p.maxSize) - } - - if p.partContentsSize != 4088 { - t.Errorf("partContentsSize content mismatch"+ - "\n\texpected: %v\n\treceived: %v", - 4088, p.partContentsSize) - } - - if p.session != storeSession { - t.Errorf("session content mismatch") - } -} - -// Test that no error is returned running Partition -func TestPartitioner_Partition(t *testing.T) { - storeSession := storage.InitTestingSession(t) - p := NewPartitioner(len(ipsumTestStr), storeSession) - - _, _, err := p.Partition(&id.DummyUser, message.XxMessage, - netTime.Now(), []byte(ipsumTestStr)) - if err != nil { - t.Error(err) - } -} - -// Test that HandlePartition can handle a message part -func TestPartitioner_HandlePartition(t *testing.T) { - storeSession := storage.InitTestingSession(t) - p := NewPartitioner(len(ipsumTestStr), storeSession) - - m := newMessagePart(1107, 1, []byte(ipsumTestStr)) - - _, _ = p.HandlePartition( - &id.DummyUser, - message.None, - m.Bytes(), - []byte{'t', 'e', 's', 't', 'i', 'n', 'g', - 's', 't', 'r', 'i', 'n', 'g'}, - ) -} - -// Test that HandlePartition can handle a first message part -func TestPartitioner_HandleFirstPartition(t *testing.T) { - storeSession := storage.InitTestingSession(t) - p := NewPartitioner(len(ipsumTestStr), storeSession) - - m := newFirstMessagePart(message.XxMessage, 1107, 1, netTime.Now(), []byte(ipsumTestStr)) - - _, _ = p.HandlePartition( - &id.DummyUser, - message.None, - m.Bytes(), - []byte{'t', 'e', 's', 't', 'i', 'n', 'g', - 's', 't', 'r', 'i', 'n', 'g'}, - ) -} diff --git a/network/message/sendCmix.go b/network/message/sendCmix.go index a7db6d51f80e38bad648ccff338dc68409d6cb05..8d6a2961a297363be0dabae1fc7eb06d442b2394 100644 --- a/network/message/sendCmix.go +++ b/network/message/sendCmix.go @@ -141,7 +141,7 @@ func sendCmixHelper(sender *gateway.Sender, msg format.Message, } } if containsBlacklisted { - jww.WARN.Printf("[SendCMIX-%s]Round %d contains blacklisted node, "+ + jww.WARN.Printf("[SendCMIX-%s]Round %d contains blacklisted nodes, "+ "skipping...", cmixParams.DebugTag, bestRound.ID) continue } diff --git a/network/message/sendCmixUtils.go b/network/message/sendCmixUtils.go index ae2344415338685af084a81744e941691854415c..49c682af15011e9a6ebe064c0da75e83e31ef494 100644 --- a/network/message/sendCmixUtils.go +++ b/network/message/sendCmixUtils.go @@ -13,8 +13,8 @@ import ( "gitlab.com/elixxir/client/interfaces/message" "gitlab.com/elixxir/client/interfaces/params" preimage2 "gitlab.com/elixxir/client/interfaces/preimage" + "gitlab.com/elixxir/client/network/nodes" "gitlab.com/elixxir/client/storage" - "gitlab.com/elixxir/client/storage/cmix" pb "gitlab.com/elixxir/comms/mixmessages" "gitlab.com/elixxir/comms/network" "gitlab.com/elixxir/crypto/fastRNG" @@ -63,9 +63,9 @@ func handlePutMessageError(firstGateway *id.ID, instance *network.Instance, "round error with round %d, bailing...", recipientString, bestRound.ID) } else if strings.Contains(err.Error(), "Could not authenticate client. "+ - "Is the client registered with this node?") { + "Is the client registered with this nodes?") { // If send failed due to the gateway not recognizing the authorization, - // then renegotiate with the node to refresh it + // then renegotiate with the nodes to refresh it nodeID := firstGateway.DeepCopy() nodeID.SetType(id.Node) @@ -88,7 +88,7 @@ func handlePutMessageError(firstGateway *id.ID, instance *network.Instance, // a round and retrieves the round keys. func processRound(instance *network.Instance, session *storage.Session, nodeRegistration chan network.NodeGateway, bestRound *pb.RoundInfo, - recipientString, messageDigest string) (*id.ID, *cmix.RoundKeys, error) { + recipientString, messageDigest string) (*id.ID, *nodes.MixCypher, error) { // Build the topology idList, err := id.NewIDListFromBytes(bestRound.Topology) @@ -99,7 +99,7 @@ func processRound(instance *network.Instance, session *storage.Session, } topology := connect.NewCircuit(idList) - // Get the keys for the round, reject if any nodes do not have keying + // get the keys for the round, reject if any nodes do not have keying // relationships roundKeys, missingKeys := session.Cmix().GetRoundKeys(topology) if len(missingKeys) > 0 { @@ -110,7 +110,7 @@ func processRound(instance *network.Instance, session *storage.Session, bestRound.ID, recipientString, messageDigest, missingKeys) } - // Get the gateway to transmit to + // get the gateway to transmit to firstGateway := topology.GetNodeAtIndex(0).DeepCopy() firstGateway.SetType(id.Gateway) @@ -122,7 +122,7 @@ func processRound(instance *network.Instance, session *storage.Session, // the recipient. func buildSlotMessage(msg format.Message, recipient *id.ID, target *id.ID, stream *fastRNG.Stream, senderId *id.ID, bestRound *pb.RoundInfo, - roundKeys *cmix.RoundKeys, param params.CMIX) (*pb.GatewaySlot, + roundKeys *nodes.MixCypher, param params.CMIX) (*pb.GatewaySlot, format.Message, ephemeral.Id, error) { @@ -194,8 +194,8 @@ func buildSlotMessage(msg format.Message, recipient *id.ID, target *id.ID, return slot, encMsg, ephID, nil } -// handleMissingNodeKeys signals to the node registration thread to register a -// node if keys are missing. Identity is triggered automatically when the node +// handleMissingNodeKeys signals to the nodes registration thread to register a +// nodes if keys are missing. Identity is triggered automatically when the nodes // is first seen, so this should on trigger on rare events. func handleMissingNodeKeys(instance *network.Instance, newNodeChan chan network.NodeGateway, nodes []*id.ID) { @@ -209,7 +209,7 @@ func handleMissingNodeKeys(instance *network.Instance, select { case newNodeChan <- ng: default: - jww.ERROR.Printf("Failed to send node registration for %s", n) + jww.ERROR.Printf("Failed to send nodes registration for %s", n) } } diff --git a/network/message/sendE2E.go b/network/message/sendE2E.go deleted file mode 100644 index 73a1427355fd01a8b238f5987ed361bcc1189fa3..0000000000000000000000000000000000000000 --- a/network/message/sendE2E.go +++ /dev/null @@ -1,146 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright © 2020 xx network SEZC // -// // -// Use of this source code is governed by a license that can be found in the // -// LICENSE file // -/////////////////////////////////////////////////////////////////////////////// - -package message - -import ( - "github.com/pkg/errors" - jww "github.com/spf13/jwalterweatherman" - "gitlab.com/elixxir/client/interfaces/message" - "gitlab.com/elixxir/client/interfaces/params" - "gitlab.com/elixxir/client/keyExchange" - "gitlab.com/elixxir/client/stoppable" - "gitlab.com/elixxir/crypto/e2e" - "gitlab.com/elixxir/primitives/format" - "gitlab.com/xx_network/primitives/id" - "gitlab.com/xx_network/primitives/netTime" - "sync" - "time" -) - -func (m *Manager) SendE2E(msg message.Send, param params.E2E, - stop *stoppable.Single) ([]id.Round, e2e.MessageID, time.Time, error) { - if msg.MessageType == message.Raw { - return nil, e2e.MessageID{}, time.Time{}, errors.Errorf("Raw (%d) is a reserved "+ - "message type", msg.MessageType) - } - //timestamp the message - ts := netTime.Now() - - //partition the message - partitions, internalMsgId, err := m.partitioner.Partition(msg.Recipient, msg.MessageType, ts, - msg.Payload) - if err != nil { - return nil, e2e.MessageID{}, time.Time{}, errors.WithMessage(err, "failed to send unsafe message") - } - - jww.INFO.Printf("E2E sending %d messages to %s", - len(partitions), msg.Recipient) - - //encrypt then send the partitions over cmix - roundIds := make([]id.Round, len(partitions)) - errCh := make(chan error, len(partitions)) - - // get the key manager for the partner - partner, err := m.Session.E2e().GetPartner(msg.Recipient) - if err != nil { - return nil, e2e.MessageID{}, time.Time{}, errors.WithMessagef(err, - "Could not send End to End encrypted "+ - "message, no relationship found with %s", msg.Recipient) - } - - //return the rounds if everything send successfully - msgID := e2e.NewMessageID(partner.GetSendRelationshipFingerprint(), internalMsgId) - - wg := sync.WaitGroup{} - - for i, p := range partitions { - - if msg.MessageType != message.KeyExchangeTrigger { - // check if any rekeys need to happen and trigger them - keyExchange.CheckKeyExchanges(m.Instance, m.SendE2E, - m.Events, m.Session, partner, - 1*time.Minute, stop) - } - - //create the cmix message - msgLen := m.Session.Cmix().GetGroup().GetP().ByteLen() - msgCmix := format.NewMessage(msgLen) - msgCmix.SetContents(p) - - //get a key to end to end encrypt - key, err := partner.GetKeyForSending(param.Type) - keyTries := 0 - for err != nil && keyTries < param.RetryCount { - jww.WARN.Printf("Out of sending keys for %s "+ - "(msgDigest: %s, partition: %d), this can "+ - "happen when sending messages faster than "+ - "the client can negotiate keys. Please "+ - "adjust your e2e key parameters", - msg.Recipient, msgCmix.Digest(), i) - keyTries++ - time.Sleep(param.RetryDelay) - key, err = partner.GetKeyForSending(param.Type) - } - if err != nil { - return nil, e2e.MessageID{}, time.Time{}, errors.WithMessagef(err, - "Failed to get key for end to end encryption") - } - - //end to end encrypt the cmix message - msgEnc := key.Encrypt(msgCmix) - - jww.INFO.Printf("E2E sending %d/%d to %s with msgDigest: %s, key fp: %s, msgID: %s", - i+i, len(partitions), msg.Recipient, msgEnc.Digest(), - key.Fingerprint(), msgID) - - localParam := param - - // set all non last partitions to the silent type so they - // dont cause notificatons if OnlyNotifyOnLastSend is true - lastPartition := len(partitions) - 1 - if localParam.OnlyNotifyOnLastSend && i != lastPartition { - localParam.IdentityPreimage = partner.GetSilentPreimage() - } else if localParam.IdentityPreimage == nil { - //set the preimage to the default e2e one if it is not already set - localParam.IdentityPreimage = partner.GetE2EPreimage() - } - - jww.DEBUG.Printf("Excluded %+v", param.ExcludedRounds) - - //send the cmix message, each partition in its own thread - wg.Add(1) - go func(i int) { - var err error - roundIds[i], _, err = m.SendCMIX(m.sender, msgEnc, msg.Recipient, - localParam.CMIX, stop) - if err != nil { - errCh <- err - } - wg.Done() - }(i) - } - - wg.Wait() - - //see if any parts failed to send - numFail, errRtn := getSendErrors(errCh) - if numFail > 0 { - jww.INFO.Printf("Failed to E2E send %d/%d to %s", - numFail, len(partitions), msg.Recipient) - return nil, e2e.MessageID{}, time.Time{}, errors.Errorf("Failed to E2E send %v/%v sub payloads:"+ - " %s", numFail, len(partitions), errRtn) - } else { - jww.INFO.Printf("Successfully E2E sent %d/%d to %s", - len(partitions)-numFail, len(partitions), msg.Recipient) - } - - //return the rounds if everything send successfully - jww.INFO.Printf("Successful E2E Send of %d messages to %s with msgID %s", - len(partitions), msg.Recipient, msgID) - return roundIds, msgID, ts, nil -} diff --git a/network/message/sendManyCmix.go b/network/message/sendManyCmix.go index 29e766edd90738a3e0f89afa8832c48f109b2f68..777dc76f0a4e90738e6facaf822643b0e311d328 100644 --- a/network/message/sendManyCmix.go +++ b/network/message/sendManyCmix.go @@ -116,7 +116,7 @@ func sendManyCmixHelper(sender *gateway.Sender, } } if containsBlacklisted { - jww.WARN.Printf("[SendManyCMIX-%s]Round %d contains blacklisted node, skipping...", + jww.WARN.Printf("[SendManyCMIX-%s]Round %d contains blacklisted nodes, skipping...", param.DebugTag, bestRound.ID) continue } diff --git a/network/message/sendUnsafe.go b/network/message/sendUnsafe.go deleted file mode 100644 index 938bcc07c8bab9bd24e1bdd53cb1c38c3b4111c4..0000000000000000000000000000000000000000 --- a/network/message/sendUnsafe.go +++ /dev/null @@ -1,108 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright © 2020 xx network SEZC // -// // -// Use of this source code is governed by a license that can be found in the // -// LICENSE file // -/////////////////////////////////////////////////////////////////////////////// -package message - -import ( - "github.com/pkg/errors" - jww "github.com/spf13/jwalterweatherman" - "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" - "gitlab.com/xx_network/primitives/netTime" - "sync" -) - -// WARNING: Unsafe -// Payloads are not End to End encrypted, MetaData is NOT protected with -// this call, see SendE2E for End to End encryption and full privacy protection -// Internal SendUnsafe which bypasses the network check, will attempt to send to -// the network without checking state. -// This partitions payloads into multi-part messages but does NOT end to encrypt -// them -// Sends using SendCMIX and returns a list of rounds the messages are in. Will -// return an error if a single part of the message fails to send. -func (m *Manager) SendUnsafe(msg message.Send, param params.Unsafe) ([]id.Round, error) { - if msg.MessageType == message.Raw { - return nil, errors.Errorf("Raw (%d) is a reserved message type", - msg.MessageType) - } - //timestamp the message - ts := netTime.Now() - - //partition the message - partitions, _, err := m.partitioner.Partition(msg.Recipient, msg.MessageType, ts, - msg.Payload) - - if err != nil { - return nil, errors.WithMessage(err, "failed to send unsafe message") - } - - //send the partitions over cmix - roundIds := make([]id.Round, len(partitions)) - errCh := make(chan error, len(partitions)) - - wg := sync.WaitGroup{} - - jww.INFO.Printf("Unsafe sending %d messages to %s", - len(partitions), msg.Recipient) - - for i, p := range partitions { - myID := m.Session.User().GetCryptographicIdentity() - msgCmix := format.NewMessage(m.Session.Cmix().GetGroup().GetP().ByteLen()) - msgCmix.SetContents(p) - e2e.SetUnencrypted(msgCmix, myID.GetReceptionID()) - - jww.INFO.Printf("Unsafe sending %d/%d to %s with msgDigest: %s", - i+i, len(partitions), msg.Recipient, msgCmix.Digest()) - - wg.Add(1) - go func(i int) { - var err error - roundIds[i], _, err = m.SendCMIX(m.sender, msgCmix, msg.Recipient, param.CMIX, nil) - if err != nil { - errCh <- err - } - wg.Done() - }(i) - } - - wg.Wait() - - //see if any parts failed to send - numFail, errRtn := getSendErrors(errCh) - if numFail > 0 { - jww.INFO.Printf("Failed to Unsafe send %d/%d to %s", - numFail, len(partitions), msg.Recipient) - return nil, errors.Errorf("Failed to send %v/%v sub payloads:"+ - " %s", numFail, len(partitions), errRtn) - } else { - jww.INFO.Printf("Successfully Unsafe sent %d/%d to %s", - len(partitions)-numFail, len(partitions), msg.Recipient) - } - - //return the rounds if everything send successfully - return roundIds, nil -} - -//returns any errors on the error channel -func getSendErrors(c chan error) (int, string) { - var errRtn string - numFail := 0 - done := false - for !done { - select { - case err := <-c: - errRtn += err.Error() - numFail++ - default: - done = true - } - } - return numFail, errRtn -} diff --git a/network/message/triggers_test.go b/network/message/triggers_test.go deleted file mode 100644 index 60caace571619a36dba468204a2d6dda540a0129..0000000000000000000000000000000000000000 --- a/network/message/triggers_test.go +++ /dev/null @@ -1,8 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright © 2020 xx network SEZC // -// // -// Use of this source code is governed by a license that can be found in the // -// LICENSE file // -/////////////////////////////////////////////////////////////////////////////// - -package network diff --git a/storage/cmix/roundKeys.go b/network/nodes/mixCypher.go similarity index 74% rename from storage/cmix/roundKeys.go rename to network/nodes/mixCypher.go index 10d1e6cc9070c26fae9c67bb1ddc90cd79265517..5f498b770d64f662f6fb446a2150ce93cd42a6b9 100644 --- a/storage/cmix/roundKeys.go +++ b/network/nodes/mixCypher.go @@ -5,7 +5,7 @@ // LICENSE file // /////////////////////////////////////////////////////////////////////////////// -package cmix +package nodes import ( jww "github.com/spf13/jwalterweatherman" @@ -17,29 +17,34 @@ import ( "golang.org/x/crypto/blake2b" ) -type RoundKeys struct { +type MixCypher interface { + Encrypt(msg format.Message, salt []byte, roundID id.Round) (format.Message, [][]byte) + MakeClientGatewayKey(salt, digest []byte) []byte +} + +type mixCypher struct { keys []*key g *cyclic.Group } // Encrypts the given message for CMIX // Panics if the passed message is not sized correctly for the group -func (rk *RoundKeys) Encrypt(msg format.Message, +func (mc *mixCypher) Encrypt(msg format.Message, salt []byte, roundID id.Round) (format.Message, [][]byte) { - if msg.GetPrimeByteLen() != rk.g.GetP().ByteLen() { + if msg.GetPrimeByteLen() != mc.g.GetP().ByteLen() { jww.FATAL.Panicf("Cannot encrypt message whose size does not " + "align with the size of the prime") } - keys := make([]*cyclic.Int, len(rk.keys)) + keys := make([]*cyclic.Int, len(mc.keys)) - for i, k := range rk.keys { - jww.TRACE.Printf("CMIXKEY: num: %d, key: %s", i, k.Get().Text(16)) - keys[i] = k.Get() + for i, k := range mc.keys { + jww.TRACE.Printf("CMIXKEY: num: %d, key: %s", i, k.get().Text(16)) + keys[i] = k.get() } - ecrMsg := ClientEncrypt(rk.g, msg, salt, roundID, keys) + ecrMsg := clientEncrypt(mc.g, msg, salt, roundID, keys) h, err := hash.NewCMixHash() if err != nil { @@ -51,8 +56,8 @@ func (rk *RoundKeys) Encrypt(msg format.Message, return ecrMsg, KMAC } -func (rk *RoundKeys) MakeClientGatewayKey(salt, digest []byte) []byte { - clientGatewayKey := cmix.GenerateClientGatewayKey(rk.keys[0].k) +func (mc *mixCypher) MakeClientGatewayKey(salt, digest []byte) []byte { + clientGatewayKey := cmix.GenerateClientGatewayKey(mc.keys[0].k) h, _ := hash.NewCMixHash() h.Write(clientGatewayKey) h.Write(salt) @@ -63,10 +68,10 @@ func (rk *RoundKeys) MakeClientGatewayKey(salt, digest []byte) []byte { return h.Sum(nil) } -func ClientEncrypt(grp *cyclic.Group, msg format.Message, +func clientEncrypt(grp *cyclic.Group, msg format.Message, salt []byte, roundID id.Round, baseKeys []*cyclic.Int) format.Message { - // Get the salt for associated data + // get the salt for associated data hash, err := blake2b.New256(nil) if err != nil { panic("E2E Client Encrypt could not get blake2b Hash") @@ -75,11 +80,11 @@ func ClientEncrypt(grp *cyclic.Group, msg format.Message, hash.Write(salt) salt2 := hash.Sum(nil) - // Get encryption keys + // get encryption keys keyEcrA := cmix.ClientKeyGen(grp, salt, roundID, baseKeys) keyEcrB := cmix.ClientKeyGen(grp, salt2, roundID, baseKeys) - // Get message payloads as cyclic integers + // get message payloads as cyclic integers payloadA := grp.NewIntFromBytes(msg.GetPayloadA()) payloadB := grp.NewIntFromBytes(msg.GetPayloadB()) diff --git a/storage/cmix/roundKeys_test.go b/network/nodes/mixCypher_test.go similarity index 99% rename from storage/cmix/roundKeys_test.go rename to network/nodes/mixCypher_test.go index 1a360385cffa22784aef101c9b95dda900f899c2..7802f42f973dcd8c10a76f3af6b064c03a5986ea 100644 --- a/storage/cmix/roundKeys_test.go +++ b/network/nodes/mixCypher_test.go @@ -5,7 +5,7 @@ // LICENSE file // /////////////////////////////////////////////////////////////////////////////// -package cmix +package nodes import ( "bytes" @@ -111,7 +111,7 @@ func TestRoundKeys_Encrypt_Consistency(t *testing.T) { prng.Read(contents) msg.SetContents(contents) - rk := RoundKeys{ + rk := MixCypher{ keys: keys, g: cmixGrp, } diff --git a/network/node/register.go b/network/nodes/register.go similarity index 77% rename from network/node/register.go rename to network/nodes/register.go index 0a741894cb2c5f0f60d530006ed6db387eff050f..23f18f7a7c8516578b8d94cf8ad970394eec5eff 100644 --- a/network/node/register.go +++ b/network/nodes/register.go @@ -5,7 +5,7 @@ // LICENSE file // /////////////////////////////////////////////////////////////////////////////// -package node +package nodes import ( "crypto/sha256" @@ -15,14 +15,11 @@ import ( jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/network/gateway" "gitlab.com/elixxir/client/stoppable" - "gitlab.com/elixxir/client/storage" - "gitlab.com/elixxir/client/storage/cmix" "gitlab.com/elixxir/client/storage/user" pb "gitlab.com/elixxir/comms/mixmessages" "gitlab.com/elixxir/comms/network" "gitlab.com/elixxir/crypto/cyclic" "gitlab.com/elixxir/crypto/diffieHellman" - "gitlab.com/elixxir/crypto/fastRNG" "gitlab.com/elixxir/crypto/hash" "gitlab.com/elixxir/crypto/registration" "gitlab.com/xx_network/comms/connect" @@ -39,46 +36,13 @@ import ( "time" ) -const maxAttempts = 5 - -var delayTable = [5]time.Duration{0, 5 * time.Second, 30 * time.Second, 60 * time.Second, 120 * time.Second} - -type RegisterNodeCommsInterface interface { - SendRequestClientKeyMessage(host *connect.Host, - message *pb.SignedClientKeyRequest) (*pb.SignedKeyResponse, error) -} - -func StartRegistration(sender *gateway.Sender, session *storage.Session, rngGen *fastRNG.StreamGenerator, comms RegisterNodeCommsInterface, - c chan network.NodeGateway, numParallel uint) stoppable.Stoppable { - - multi := stoppable.NewMulti("NodeRegistrations") - - inProgess := &sync.Map{} - // we are relying on the in progress check to - // ensure there is only a single operator at a time, as a result this is a map of ID -> int - attempts := &sync.Map{} - - for i := uint(0); i < numParallel; i++ { - stop := stoppable.NewSingle(fmt.Sprintf("NodeRegistration %d", i)) - - go registerNodes(sender, session, rngGen, comms, stop, c, inProgess, attempts) - multi.Add(stop) - } - - return multi -} - -func registerNodes(sender *gateway.Sender, session *storage.Session, - rngGen *fastRNG.StreamGenerator, comms RegisterNodeCommsInterface, - stop *stoppable.Single, c chan network.NodeGateway, inProgress, attempts *sync.Map) { - u := session.User() +func registerNodes(r *registrar, stop *stoppable.Single, inProgress, attempts *sync.Map) { + u := r.session.User() regSignature := u.GetTransmissionRegistrationValidationSignature() // Timestamp in which user has registered with registration regTimestamp := u.GetRegistrationTimestamp().UnixNano() uci := u.GetCryptographicIdentity() - cmix := session.Cmix() - rng := rngGen.GetStream() interval := time.Duration(500) * time.Millisecond t := time.NewTicker(interval) for { @@ -87,7 +51,8 @@ func registerNodes(sender *gateway.Sender, session *storage.Session, t.Stop() stop.ToStopped() return - case gw := <-c: + case gw := <-r.c: + rng := r.rng.GetStream() nidStr := fmt.Sprintf("%x", gw.Node.ID) if _, operating := inProgress.LoadOrStore(nidStr, struct{}{}); operating { continue @@ -102,23 +67,24 @@ func registerNodes(sender *gateway.Sender, session *storage.Session, // No need to register with stale nodes if isStale := gw.Node.Status == ndf.Stale; isStale { - jww.DEBUG.Printf("Skipping registration with stale node %s", nidStr) + jww.DEBUG.Printf("Skipping registration with stale nodes %s", nidStr) continue } - err := registerWithNode(sender, comms, gw, regSignature, - regTimestamp, uci, cmix, rng, stop) + err := registerWithNode(r.sender, r.comms, gw, regSignature, + regTimestamp, uci, r, rng, stop) inProgress.Delete(nidStr) if err != nil { - jww.ERROR.Printf("Failed to register node: %+v", err) + jww.ERROR.Printf("Failed to register nodes: %+v", err) //if we have not reached the attempt limit for this gateway, send it back into the channel to retry if numAttempts < maxAttempts { go func() { //delay the send for a backoff time.Sleep(delayTable[numAttempts-1]) - c <- gw + r.c <- gw }() } } + rng.Close() case <-t.C: } } @@ -128,7 +94,7 @@ func registerNodes(sender *gateway.Sender, session *storage.Session, // It registers a user with a specific in the client's ndf. func registerWithNode(sender *gateway.Sender, comms RegisterNodeCommsInterface, ngw network.NodeGateway, regSig []byte, registrationTimestampNano int64, - uci *user.CryptographicIdentity, store *cmix.Store, rng csprng.Source, + uci *user.CryptographicIdentity, r *registrar, rng csprng.Source, stop *stoppable.Single) error { nodeID, err := ngw.Node.GetNodeId() @@ -137,11 +103,11 @@ func registerWithNode(sender *gateway.Sender, comms RegisterNodeCommsInterface, return err } - if store.IsRegistered(nodeID) { + if r.Has(nodeID) { return nil } - jww.INFO.Printf("registerWithNode() begin registration with node: %s", nodeID) + jww.INFO.Printf("registerWithNode() begin registration with nodes: %s", nodeID) var transmissionKey *cyclic.Int var validUntil uint64 @@ -153,12 +119,12 @@ func registerWithNode(sender *gateway.Sender, comms RegisterNodeCommsInterface, h.Reset() h.Write([]byte(strconv.Itoa(4000 + userNum))) - transmissionKey = store.GetGroup().NewIntFromBytes(h.Sum(nil)) + transmissionKey = r.session.GetCmixGroup().NewIntFromBytes(h.Sum(nil)) jww.INFO.Printf("transmissionKey: %v", transmissionKey.Bytes()) } else { // Request key from server transmissionKey, keyId, validUntil, err = requestKey(sender, comms, ngw, regSig, - registrationTimestampNano, uci, store, rng, stop) + registrationTimestampNano, uci, r, rng, stop) if err != nil { return errors.Errorf("Failed to request key: %+v", err) @@ -166,24 +132,24 @@ func registerWithNode(sender *gateway.Sender, comms RegisterNodeCommsInterface, } - store.Add(nodeID, transmissionKey, validUntil, keyId) + r.add(nodeID, transmissionKey, validUntil, keyId) - jww.INFO.Printf("Completed registration with node %s", nodeID) + jww.INFO.Printf("Completed registration with nodes %s", nodeID) return nil } func requestKey(sender *gateway.Sender, comms RegisterNodeCommsInterface, ngw network.NodeGateway, regSig []byte, registrationTimestampNano int64, - uci *user.CryptographicIdentity, store *cmix.Store, rng csprng.Source, + uci *user.CryptographicIdentity, r *registrar, rng csprng.Source, stop *stoppable.Single) (*cyclic.Int, []byte, uint64, error) { - grp := store.GetGroup() + grp := r.session.GetCmixGroup() // 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. - dhPrivBytes, err := csprng.GenerateInGroup(store.GetGroup().GetPBytes(), 256, rng) + dhPrivBytes, err := csprng.GenerateInGroup(grp.GetPBytes(), 256, rng) if err != nil { return nil, nil, 0, err } @@ -269,23 +235,23 @@ func requestKey(sender *gateway.Sender, comms RegisterNodeCommsInterface, h.Write(signedKeyResponse.KeyResponse) hashedResponse := h.Sum(nil) - // Load node certificate + // Load nodes certificate gatewayCert, err := tls.LoadCertificate(ngw.Gateway.TlsCertificate) if err != nil { - return nil, nil, 0, errors.WithMessagef(err, "Unable to load node's certificate") + return nil, nil, 0, errors.WithMessagef(err, "Unable to load nodes's certificate") } // Extract public key nodePubKey, err := tls.ExtractPublicKey(gatewayCert) if err != nil { - return nil, nil, 0, errors.WithMessagef(err, "Unable to load node's public key") + return nil, nil, 0, errors.WithMessagef(err, "Unable to load nodes's public key") } // Verify the response signature err = rsa.Verify(nodePubKey, opts.Hash, hashedResponse, signedKeyResponse.KeyResponseSignedByGateway.Signature, opts) if err != nil { - return nil, nil, 0, errors.WithMessagef(err, "Could not verify node's signature") + return nil, nil, 0, errors.WithMessagef(err, "Could not verify nodes's signature") } // Unmarshal the response @@ -318,7 +284,7 @@ func requestKey(sender *gateway.Sender, comms RegisterNodeCommsInterface, } // Construct the transmission key from the client key - transmissionKey := store.GetGroup().NewIntFromBytes(clientKey) + transmissionKey := grp.NewIntFromBytes(clientKey) // Use Client keypair to sign Server nonce return transmissionKey, keyResponse.KeyID, keyResponse.ValidUntil, nil diff --git a/network/node/register_test.go b/network/nodes/register_test.go similarity index 99% rename from network/node/register_test.go rename to network/nodes/register_test.go index 7f89f4ed9cb4f849f41bd84bed1b4671234e8e84..f269d1b4fb43e0d78c6f7a67fef1b8039a6f0641 100644 --- a/network/node/register_test.go +++ b/network/nodes/register_test.go @@ -5,7 +5,7 @@ // LICENSE file // /////////////////////////////////////////////////////////////////////////////// -package node +package nodes import ( //"crypto/rand" diff --git a/network/nodes/registrar.go b/network/nodes/registrar.go new file mode 100644 index 0000000000000000000000000000000000000000..20540292bee1f01844be54937735d84cd74af48f --- /dev/null +++ b/network/nodes/registrar.go @@ -0,0 +1,156 @@ +package nodes + +import ( + "fmt" + "github.com/pkg/errors" + jww "github.com/spf13/jwalterweatherman" + "gitlab.com/elixxir/client/network/gateway" + "gitlab.com/elixxir/client/stoppable" + "gitlab.com/elixxir/client/storage" + "gitlab.com/elixxir/client/storage/versioned" + pb "gitlab.com/elixxir/comms/mixmessages" + "gitlab.com/elixxir/comms/network" + "gitlab.com/elixxir/crypto/fastRNG" + "gitlab.com/xx_network/comms/connect" + "gitlab.com/xx_network/primitives/id" + "gitlab.com/xx_network/primitives/ndf" + "sync" + "time" +) + +const InputChanLen = 1000 +const maxAttempts = 5 + +var delayTable = [5]time.Duration{0, 5 * time.Second, 30 * time.Second, 60 * time.Second, 120 * time.Second} + +type Registrar interface { + StartProcessies(numParallel uint) stoppable.Stoppable + Has(nid *id.ID) bool + GetKeys(topology *connect.Circuit) (MixCypher, error) + NumRegistered() int + GetInputChannel() chan<- network.NodeGateway +} + +type RegisterNodeCommsInterface interface { + SendRequestClientKeyMessage(host *connect.Host, + message *pb.SignedClientKeyRequest) (*pb.SignedKeyResponse, error) +} + +type registrar struct { + nodes map[id.ID]*key + kv *versioned.KV + mux sync.RWMutex + + session *storage.Session + sender *gateway.Sender + comms RegisterNodeCommsInterface + rng *fastRNG.StreamGenerator + + c chan network.NodeGateway +} + +// LoadRegistrar loads a registrar from disk, and creates a new one if it doesnt exist +func LoadRegistrar(kv *versioned.KV, session *storage.Session, + sender *gateway.Sender, comms RegisterNodeCommsInterface, + rngGen *fastRNG.StreamGenerator) (Registrar, error) { + kv = kv.Prefix(prefix) + r := ®istrar{ + nodes: make(map[id.ID]*key), + kv: kv, + } + + obj, err := kv.Get(storeKey, currentKeyVersion) + //if there is no stored data, make a new node handler + if err != nil { + jww.WARN.Printf("Failed to load Node Registrar, creating a new object") + err = r.save() + if err != nil { + return nil, errors.WithMessagef(err, "Failed to make a new registrar") + } + } else { + err = r.unmarshal(obj.Data) + if err != nil { + return nil, err + } + } + + r.session = session + r.sender = sender + r.comms = comms + r.rng = rngGen + + r.c = make(chan network.NodeGateway, InputChanLen) + + return r, nil +} + +func (r *registrar) StartProcessies(numParallel uint) stoppable.Stoppable { + + multi := stoppable.NewMulti("NodeRegistrations") + + inProgess := &sync.Map{} + // we are relying on the in progress check to + // ensure there is only a single operator at a time, as a result this is a map of ID -> int + attempts := &sync.Map{} + + for i := uint(0); i < numParallel; i++ { + stop := stoppable.NewSingle(fmt.Sprintf("NodeRegistration %d", i)) + + go registerNodes(r, stop, inProgess, attempts) + multi.Add(stop) + } + + return multi +} + +func (r *registrar) GetInputChannel() chan<- network.NodeGateway { + return r.c +} + +// GetKeys returns a MixCypher for the topology and a list of nodes it did +// not have a key for. If there are missing keys, then returns nil MixCypher. +func (r *registrar) GetKeys(topology *connect.Circuit) (MixCypher, error) { + r.mux.RLock() + defer r.mux.RUnlock() + + keys := make([]*key, topology.Len()) + + // get keys for every node. If it cannot be found, add + // it to the missing nodes list so it can be + for i := 0; i < topology.Len(); i++ { + nid := topology.GetNodeAtIndex(i) + k, ok := r.nodes[*nid] + if !ok { + r.c <- network.NodeGateway{ + Node: ndf.Node{ID: nid.Marshal(), + //status must be active because it is in a round + Status: ndf.Active}, + } + return nil, errors.Errorf("cannot get key for %s, triggered registration", nid) + } else { + keys[i] = k + } + } + + rk := &mixCypher{ + keys: keys, + g: r.session.GetCmixGroup(), + } + + return rk, nil +} + +// Returns if the store has the nodes +func (r *registrar) Has(nid *id.ID) bool { + r.mux.RLock() + _, exists := r.nodes[*nid] + r.mux.RUnlock() + return exists +} + +// NumRegistered returns the number of registered nodes. +func (r *registrar) NumRegistered() int { + r.mux.RLock() + defer r.mux.RUnlock() + return len(r.nodes) +} diff --git a/network/nodes/store.go b/network/nodes/store.go new file mode 100644 index 0000000000000000000000000000000000000000..f5c29ad6c453415542e7647cc8c5f9e2c6d4c373 --- /dev/null +++ b/network/nodes/store.go @@ -0,0 +1,111 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright © 2020 xx network SEZC // +// // +// Use of this source code is governed by a license that can be found in the // +// LICENSE file // +/////////////////////////////////////////////////////////////////////////////// + +package nodes + +import ( + "encoding/json" + "github.com/pkg/errors" + jww "github.com/spf13/jwalterweatherman" + "gitlab.com/elixxir/client/storage/versioned" + "gitlab.com/elixxir/crypto/cyclic" + "gitlab.com/xx_network/primitives/id" + "gitlab.com/xx_network/primitives/netTime" +) + +const prefix = "cmix" +const currentStoreVersion = 0 +const ( + storeKey = "KeyStore" + grpKey = "GroupKey" +) + +// Add adds the key for a round to the cMix storage object. Saves the updated +// list of nodes and the key to disk. +func (r *registrar) add(nid *id.ID, k *cyclic.Int, + validUntil uint64, keyId []byte) { + r.mux.Lock() + defer r.mux.Unlock() + + nodeKey := newKey(r.kv, k, nid, validUntil, keyId) + + r.nodes[*nid] = nodeKey + if err := r.save(); err != nil { + jww.FATAL.Panicf("Failed to save nodeKey list for %s: %+v", nid, err) + } +} + +// Remove removes a nodes key from the nodes map and saves. +func (r *registrar) remove(nid *id.ID) { + r.mux.Lock() + defer r.mux.Unlock() + + nodeKey, ok := r.nodes[*nid] + if !ok { + return + } + + nodeKey.delete(r.kv, nid) + + delete(r.nodes, *nid) + + if err := r.save(); err != nil { + jww.FATAL.Panicf("Failed to make nodeKey for %s: %+v", nid, err) + } +} + +// save stores the cMix store. +func (r *registrar) save() error { + now := netTime.Now() + + data, err := r.marshal() + if err != nil { + return err + } + + obj := versioned.Object{ + Version: currentStoreVersion, + Timestamp: now, + Data: data, + } + + return r.kv.Set(storeKey, currentKeyVersion, &obj) +} + +// marshal builds a byte representation of the Store. +func (r *registrar) marshal() ([]byte, error) { + nodes := make([]id.ID, len(r.nodes)) + + index := 0 + for nid := range r.nodes { + nodes[index] = nid + index++ + } + + return json.Marshal(&nodes) +} + +// unmarshal restores the data for a Store from the byte representation of the +// Store +func (r *registrar) unmarshal(b []byte) error { + var nodes []id.ID + + err := json.Unmarshal(b, &nodes) + if err != nil { + return err + } + + for _, nid := range nodes { + k, err := loadKey(r.kv, &nid) + if err != nil { + return errors.WithMessagef(err, "could not load nodes key for %s", &nid) + } + r.nodes[nid] = k + } + + return nil +} diff --git a/storage/cmix/key.go b/network/nodes/storeKey.go similarity index 91% rename from storage/cmix/key.go rename to network/nodes/storeKey.go index 6c2954ac4fa65f30b50cd771f73652357b7c19bb..3d680152fbbe9be364b32cef634f3004d33d5c6e 100644 --- a/storage/cmix/key.go +++ b/network/nodes/storeKey.go @@ -5,7 +5,7 @@ // LICENSE file // /////////////////////////////////////////////////////////////////////////////// -package cmix +package nodes import ( "bytes" @@ -43,12 +43,12 @@ func newKey(kv *versioned.KV, k *cyclic.Int, id *id.ID, validUntil uint64, keyId return nk } -// returns the cyclic key -func (k *key) Get() *cyclic.Int { +// get returns the cyclic key +func (k *key) get() *cyclic.Int { return k.k } -// loads the key for the given node id from the versioned keystore +// loads the key for the given nodes id from the versioned keystore func loadKey(kv *versioned.KV, id *id.ID) (*key, error) { k := &key{} @@ -68,7 +68,7 @@ func loadKey(kv *versioned.KV, id *id.ID) (*key, error) { return k, nil } -// saves the key as the key for the given node ID in the passed keystore +// saves the key as the key for the given nodes ID in the passed keystore func (k *key) save() error { now := netTime.Now() @@ -129,7 +129,7 @@ func (k *key) marshal() ([]byte, error) { func (k *key) unmarshal(b []byte) error { buff := bytes.NewBuffer(b) - // Get the key length + // get the key length keyLen := int(binary.LittleEndian.Uint64(buff.Next(8))) // Decode the key length @@ -139,11 +139,11 @@ func (k *key) unmarshal(b []byte) error { return err } - // Get the keyID length + // get the keyID length keyIDLen := int(binary.LittleEndian.Uint64(buff.Next(8))) k.keyId = buff.Next(keyIDLen) - // Get the valid until value + // get the valid until value k.validUntil = binary.LittleEndian.Uint64(buff.Next(8)) return nil diff --git a/storage/cmix/key_test.go b/network/nodes/storeKey_test.go similarity index 97% rename from storage/cmix/key_test.go rename to network/nodes/storeKey_test.go index 27e53eaa0ccb3971085ea4f11d42b56849eed47f..8dc3a4444d9937e93587d8fddc673b8eaad0c284 100644 --- a/storage/cmix/key_test.go +++ b/network/nodes/storeKey_test.go @@ -5,4 +5,4 @@ // LICENSE file // /////////////////////////////////////////////////////////////////////////////// -package cmix +package nodes diff --git a/storage/cmix/store_test.go b/network/nodes/store_test.go similarity index 88% rename from storage/cmix/store_test.go rename to network/nodes/store_test.go index 6fb614257dc2e23fab664bd73cd8a3055a6a7c06..8e1c09b3eb4d1ed3266440cf86418af5c9119ac9 100644 --- a/storage/cmix/store_test.go +++ b/network/nodes/store_test.go @@ -5,7 +5,7 @@ // LICENSE file // /////////////////////////////////////////////////////////////////////////////// -package cmix +package nodes import ( "bytes" @@ -44,7 +44,7 @@ func TestNewStore(t *testing.T) { // Happy path Add/Done test func TestStore_AddRemove(t *testing.T) { - // Uncomment to print keys that Set and Get are called on + // Uncomment to print keys that Set and get are called on // jww.SetStdoutThreshold(jww.LevelTrace) testStore, _ := makeTestStore() @@ -54,18 +54,18 @@ func TestStore_AddRemove(t *testing.T) { keyId := []byte("keyId") testStore.Add(nodeId, k, 0, keyId) if _, exists := testStore.nodes[*nodeId]; !exists { - t.Fatal("Failed to add node key") + t.Fatal("Failed to add nodes key") } testStore.Remove(nodeId) if _, exists := testStore.nodes[*nodeId]; exists { - t.Fatal("Failed to remove node key") + t.Fatal("Failed to remove nodes key") } } // Happy path Add/Has test func TestStore_AddHas(t *testing.T) { - // Uncomment to print keys that Set and Get are called on + // Uncomment to print keys that Set and get are called on // jww.SetStdoutThreshold(jww.LevelTrace) testStore, _ := makeTestStore() @@ -75,17 +75,17 @@ func TestStore_AddHas(t *testing.T) { testStore.Add(nodeId, key, 0, nil) if _, exists := testStore.nodes[*nodeId]; !exists { - t.Fatal("Failed to add node key") + t.Fatal("Failed to add nodes key") } if !testStore.Has(nodeId) { - t.Fatal("cannot find the node id that that was added") + t.Fatal("cannot find the nodes id that that was added") } } // Tests that has returns false when it doesnt have func TestStore_DoesntHave(t *testing.T) { - // Uncomment to print keys that Set and Get are called on + // Uncomment to print keys that Set and get are called on // jww.SetStdoutThreshold(jww.LevelTrace) testStore, _ := makeTestStore() @@ -93,18 +93,18 @@ func TestStore_DoesntHave(t *testing.T) { nodeId := id.NewIdFromString("test", id.Node, t) if testStore.Has(nodeId) { - t.Fatal("found the node when it shouldnt have been found") + t.Fatal("found the nodes when it shouldnt have been found") } } // Happy path func TestLoadStore(t *testing.T) { - // Uncomment to print keys that Set and Get are called on + // Uncomment to print keys that Set and get are called on // jww.SetStdoutThreshold(jww.LevelTrace) testStore, kv := makeTestStore() - // Add a test node key + // Add a test nodes key nodeId := id.NewIdFromString("test", id.Node, t) k := testStore.grp.NewInt(5) testTime, err := time.Parse(time.RFC3339, @@ -124,7 +124,7 @@ func TestLoadStore(t *testing.T) { t.Fatalf("Unable to load store: %+v", err) } if len(store.nodes) != len(testStore.nodes) { - t.Errorf("LoadStore failed to load node keys") + t.Errorf("LoadStore failed to load nodes keys") } circuit := connect.NewCircuit([]*id.ID{nodeId}) @@ -142,7 +142,7 @@ func TestLoadStore(t *testing.T) { // Happy path func TestStore_GetRoundKeys(t *testing.T) { - // Uncomment to print keys that Set and Get are called on + // Uncomment to print keys that Set and get are called on // jww.SetStdoutThreshold(jww.LevelTrace) testStore, _ := makeTestStore() @@ -164,13 +164,13 @@ func TestStore_GetRoundKeys(t *testing.T) { t.Errorf("Expected to have no missing keys, got %d", len(missing)) } if result == nil || len(result.keys) != numIds { - t.Errorf("Expected to have %d node keys", numIds) + t.Errorf("Expected to have %d nodes keys", numIds) } } // Missing keys path func TestStore_GetRoundKeys_Missing(t *testing.T) { - // Uncomment to print keys that Set and Get are called on + // Uncomment to print keys that Set and get are called on // jww.SetStdoutThreshold(jww.LevelTrace) testStore, _ := makeTestStore() @@ -181,7 +181,7 @@ func TestStore_GetRoundKeys_Missing(t *testing.T) { nodeIds[i] = id.NewIdFromUInt(uint64(i)+1, id.Node, t) key := testStore.grp.NewInt(int64(i) + 1) - // Only add every other node so there are missing nodes + // Only add every other nodes so there are missing nodes if i%2 == 0 { testStore.Add(nodeIds[i], key, 0, nil) testStore.Add(nodeIds[i], key, 0, nil) diff --git a/network/rounds/retrieve.go b/network/rounds/retrieve.go index 7151dd92de4d110e8a79f514e0dd4a1190e065a9..ce9d63fcebc9d8fd15a1ec4fdadc220e6d25915a 100644 --- a/network/rounds/retrieve.go +++ b/network/rounds/retrieve.go @@ -71,7 +71,7 @@ func (m *Manager) processMessageRetrieval(comms messageRetrievalComms, jww.WARN.Printf("Empty gateway ID List") continue } - // Target the last node in the team first because it has + // Target the last nodes in the team first because it has // messages first, randomize other members of the team var rndBytes [32]byte stream := m.Rng.GetStream() diff --git a/single/receiveResponse.go b/single/receiveResponse.go index 7c27bda09a9082f171a7a4d35304b42f111c0227..19d17da6ccb2e03efa1005060fc7252fa7497c7d 100644 --- a/single/receiveResponse.go +++ b/single/receiveResponse.go @@ -59,7 +59,7 @@ func (m *Manager) receiveResponseHandler(rawMessages chan message.Receive, func (m *Manager) processesResponse(rid *id.ID, ephID ephemeral.Id, msgBytes []byte) error { - // Get the state from the map + // get the state from the map m.p.RLock() state, exists := m.p.singleUse[*rid] m.p.RUnlock() diff --git a/single/transmission.go b/single/transmission.go index 436420a7f3711d7bbb4a5271c207779f64bd8704..d145aa1fb17f3bb11fa383b6422273c10129c024 100644 --- a/single/transmission.go +++ b/single/transmission.go @@ -63,7 +63,7 @@ type roundEvents interface { func (m *Manager) transmitSingleUse(partner contact2.Contact, payload []byte, tag string, MaxMsgs uint8, rng io.Reader, callback ReplyComm, timeout time.Duration) error { - // Get ephemeral ID address space size; this blocks until the address space + // get ephemeral ID address space size; this blocks until the address space // size is set for the first time addressSize := m.net.GetAddressSize() timeStart := netTime.Now() diff --git a/storage/auth/previousNegotiations.go b/storage/auth/previousNegotiations.go index d15bab6bd33a75985ae4b021427f58e59a3ff353..6b880859800d1f2cc8e4d2ac8b2a1500b14d44ad 100644 --- a/storage/auth/previousNegotiations.go +++ b/storage/auth/previousNegotiations.go @@ -71,7 +71,7 @@ func (s *Store) AddIfNew(partner *id.ID, negotiationFingerprint []byte) ( return } - // Get the fingerprint list from storage + // get the fingerprint list from storage fingerprints, err := s.loadNegotiationFingerprints(partner) if err != nil { jww.FATAL.Panicf("Failed to load negotiation fingerprints for "+ diff --git a/storage/clientVersion/store_test.go b/storage/clientVersion/store_test.go index 72098cffa061ac63ac375f92e533312272e5d3bf..c9f5ab78a1f80df2a3388677adc080a42e1ff6e2 100644 --- a/storage/clientVersion/store_test.go +++ b/storage/clientVersion/store_test.go @@ -95,7 +95,7 @@ func TestStore_Get(t *testing.T) { test := s.Get() if !reflect.DeepEqual(expected, test) { - t.Errorf("Get() failed to return the expected version."+ + t.Errorf("get() failed to return the expected version."+ "\nexpected: %s\nreceived: %s", &expected, &test) } } diff --git a/storage/cmix/store.go b/storage/cmix/store.go deleted file mode 100644 index 5947900089ea3ec047c6ce676eb27264cc20dca9..0000000000000000000000000000000000000000 --- a/storage/cmix/store.go +++ /dev/null @@ -1,230 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright © 2020 xx network SEZC // -// // -// Use of this source code is governed by a license that can be found in the // -// LICENSE file // -/////////////////////////////////////////////////////////////////////////////// - -package cmix - -import ( - "encoding/json" - "github.com/pkg/errors" - jww "github.com/spf13/jwalterweatherman" - "gitlab.com/elixxir/client/storage/utility" - "gitlab.com/elixxir/client/storage/versioned" - "gitlab.com/elixxir/crypto/cyclic" - "gitlab.com/xx_network/comms/connect" - "gitlab.com/xx_network/primitives/id" - "gitlab.com/xx_network/primitives/netTime" - "sync" -) - -const prefix = "cmix" -const currentStoreVersion = 0 -const ( - storeKey = "KeyStore" - grpKey = "GroupKey" -) - -type Store struct { - nodes map[id.ID]*key - validUntil uint64 - keyId []byte - grp *cyclic.Group - kv *versioned.KV - mux sync.RWMutex -} - -// NewStore returns a new cMix storage object. -func NewStore(grp *cyclic.Group, kv *versioned.KV) (*Store, error) { - // Generate public key - kv = kv.Prefix(prefix) - - s := &Store{ - nodes: make(map[id.ID]*key), - grp: grp, - kv: kv, - } - - err := utility.StoreGroup(kv, grp, grpKey) - if err != nil { - return nil, errors.WithMessage(err, "Failed to store cMix group") - } - - return s, s.save() -} - -// LoadStore loads the cMix storage object. -func LoadStore(kv *versioned.KV) (*Store, error) { - kv = kv.Prefix(prefix) - s := &Store{ - nodes: make(map[id.ID]*key), - kv: kv, - } - - obj, err := kv.Get(storeKey, currentKeyVersion) - if err != nil { - return nil, err - } - - err = s.unmarshal(obj.Data) - - if err != nil { - return nil, err - } - - return s, nil -} - -// Add adds the key for a round to the cMix storage object. Saves the updated -// list of nodes and the key to disk. -func (s *Store) Add(nid *id.ID, k *cyclic.Int, - validUntil uint64, keyId []byte) { - s.mux.Lock() - defer s.mux.Unlock() - - nodeKey := newKey(s.kv, k, nid, validUntil, keyId) - - s.nodes[*nid] = nodeKey - if err := s.save(); err != nil { - jww.FATAL.Panicf("Failed to save nodeKey list for %s: %+v", nid, err) - } -} - -// Returns if the store has the node -func (s *Store) Has(nid *id.ID) bool { - s.mux.RLock() - _, exists := s.nodes[*nid] - s.mux.RUnlock() - return exists -} - -// Remove removes a node key from the nodes map and saves. -func (s *Store) Remove(nid *id.ID) { - s.mux.Lock() - defer s.mux.Unlock() - - nodeKey, ok := s.nodes[*nid] - if !ok { - return - } - - nodeKey.delete(s.kv, nid) - - delete(s.nodes, *nid) - - if err := s.save(); err != nil { - jww.FATAL.Panicf("Failed to make nodeKey for %s: %+v", nid, err) - } -} - -// GetRoundKeys returns a RoundKeys for the topology and a list of nodes it did -// not have a key for. If there are missing keys, then returns nil RoundKeys. -func (s *Store) GetRoundKeys(topology *connect.Circuit) (*RoundKeys, []*id.ID) { - s.mux.RLock() - defer s.mux.RUnlock() - - var missingNodes []*id.ID - - keys := make([]*key, topology.Len()) - - for i := 0; i < topology.Len(); i++ { - nid := topology.GetNodeAtIndex(i) - k, ok := s.nodes[*nid] - if !ok { - missingNodes = append(missingNodes, nid) - } else { - keys[i] = k - } - } - - // Handle missing keys case - if len(missingNodes) > 0 { - return nil, missingNodes - } - - rk := &RoundKeys{ - keys: keys, - g: s.grp, - } - - return rk, missingNodes -} - -// GetGroup returns the cyclic group used for cMix. -func (s *Store) GetGroup() *cyclic.Group { - return s.grp -} - -func (s *Store) IsRegistered(nid *id.ID) bool { - s.mux.RLock() - defer s.mux.RUnlock() - - _, ok := s.nodes[*nid] - return ok -} - -// Count returns the number of registered nodes. -func (s *Store) Count() int { - s.mux.RLock() - defer s.mux.RUnlock() - return len(s.nodes) -} - -// save stores the cMix store. -func (s *Store) save() error { - now := netTime.Now() - - data, err := s.marshal() - if err != nil { - return err - } - - obj := versioned.Object{ - Version: currentStoreVersion, - Timestamp: now, - Data: data, - } - - return s.kv.Set(storeKey, currentKeyVersion, &obj) -} - -// marshal builds a byte representation of the Store. -func (s *Store) marshal() ([]byte, error) { - nodes := make([]id.ID, len(s.nodes)) - - index := 0 - for nid := range s.nodes { - nodes[index] = nid - index++ - } - - return json.Marshal(&nodes) -} - -// unmarshal restores the data for a Store from the byte representation of the -// Store -func (s *Store) unmarshal(b []byte) error { - var nodes []id.ID - - err := json.Unmarshal(b, &nodes) - if err != nil { - return err - } - - for _, nid := range nodes { - k, err := loadKey(s.kv, &nid) - if err != nil { - return errors.WithMessagef(err, "could not load node key for %s", &nid) - } - s.nodes[nid] = k - } - - s.grp, err = utility.LoadGroup(s.kv, grpKey) - if err != nil { - return errors.WithMessage(err, "Failed to load cMix group") - } - - return nil -} diff --git a/storage/conversation/partner_test.go b/storage/conversation/partner_test.go index b2381e77bf6ced1f871c949d79bc59fb943e2680..1e4d2097b50ab988a9f87e269ab9daff6bfdc476 100644 --- a/storage/conversation/partner_test.go +++ b/storage/conversation/partner_test.go @@ -19,7 +19,7 @@ import ( // Tests happy path of LoadOrMakeConversation() when making a new Conversation. func TestLoadOrMakeConversation_Make(t *testing.T) { - // Uncomment to print keys that Set and Get are called on + // Uncomment to print keys that Set and get are called on jww.SetStdoutThreshold(jww.LevelTrace) // Set up test values kv := versioned.NewKV(make(ekv.Memstore)) diff --git a/storage/conversation/ring_test.go b/storage/conversation/ring_test.go index 5b1c02a0711c52ed19906ead6bb18ac25970c0d3..76624bc5ac56e881f75c2b11afa36ed5baa29459 100644 --- a/storage/conversation/ring_test.go +++ b/storage/conversation/ring_test.go @@ -176,12 +176,12 @@ func TestBuff_Get(t *testing.T) { id: 0, } - // Retrieve newly inserted value using Get() + // Retrieve newly inserted value using get() received := testBuff.Get() // Check that retrieved value is expected if !reflect.DeepEqual(received, expected) { - t.Fatalf("Get() did not retrieve expected value."+ + t.Fatalf("get() did not retrieve expected value."+ "\n\tExpected: %v"+ "\n\tReceived: %v", expected, received) } @@ -200,9 +200,9 @@ func TestBuff_Get(t *testing.T) { t.Fatalf("Add error: %v", err) } - // Ensure newly inserted message is returned by Get() + // Ensure newly inserted message is returned by get() if !reflect.DeepEqual(testBuff.Get(), newlyInserted) { - t.Fatalf("Get() did not retrieve expected value."+ + t.Fatalf("get() did not retrieve expected value."+ "\n\tExpected: %v"+ "\n\tReceived: %v", expected, received) } diff --git a/storage/conversation/store.go b/storage/conversation/store.go index 662e6c1f2599816258e9e75f294ae7f27dc425cb..aeaa1a42bc8339489d5e6927edb9e9673465d0ad 100644 --- a/storage/conversation/store.go +++ b/storage/conversation/store.go @@ -56,7 +56,7 @@ func (s *Store) Delete(partner *id.ID) { s.mux.Lock() defer s.mux.Unlock() - // Get contact from memory + // get contact from memory c, exists := s.loadedConversations[*partner] if !exists { return diff --git a/storage/conversation/store_test.go b/storage/conversation/store_test.go index 7505280e1c534486b60b47b76aac4858fdc1bc4a..f4d109d98e67a504844bdd698586e2f47e74cc69 100644 --- a/storage/conversation/store_test.go +++ b/storage/conversation/store_test.go @@ -18,7 +18,7 @@ import ( // Read jww trace output to determine if key names are ok func TestStore_Get_Prefix(t *testing.T) { - // Uncomment to print keys that Set and Get are called on + // Uncomment to print keys that Set and get are called on jww.SetStdoutThreshold(jww.LevelTrace) // It's a conversation with a partner, so does there need to be an additional layer of hierarchy here later? diff --git a/storage/e2e/session.go b/storage/e2e/session.go index 10d7c4faf6ddcdd7e46ecbece5c0447b0ed74c36..8607c2f9366d0f4af55b936c8bcde6b77c326d13 100644 --- a/storage/e2e/session.go +++ b/storage/e2e/session.go @@ -613,7 +613,7 @@ func (s *Session) generate(kv *versioned.KV) *versioned.KV { stream := s.relationship.manager.ctx.rng.GetStream() s.myPrivKey = dh.GeneratePrivateKey(len(grp.GetPBytes()), grp, stream) - // Get the variant opposite my partners variant + // get the variant opposite my partners variant sidhVariant := utility.GetCompatibleSIDHVariant( s.partnerSIDHPubKey.Variant()) s.mySIDHPrivKey = utility.NewSIDHPrivateKey(sidhVariant) diff --git a/storage/e2e/store.go b/storage/e2e/store.go index 1aea1efe8ddff38327d44fbfc84a07a1f32db458..1c9c361106b23062a08c7710afda82889d031d4a 100644 --- a/storage/e2e/store.go +++ b/storage/e2e/store.go @@ -231,7 +231,7 @@ func (s *Store) GetPartnerContact(partnerID *id.ID) (contact.Contact, error) { s.mux.RLock() defer s.mux.RUnlock() - // Get partner + // get partner m, exists := s.managers[*partnerID] if !exists { return contact.Contact{}, errors.New(NoPartnerErrorStr) diff --git a/storage/e2e/store_test.go b/storage/e2e/store_test.go index 229799b57de2b453b75e6c00fad35c539dd12401..8009a22a1d0b204cbfc0d495226ce606a97cca2c 100644 --- a/storage/e2e/store_test.go +++ b/storage/e2e/store_test.go @@ -69,7 +69,7 @@ func TestNewStore(t *testing.T) { key, err := expectedStore.kv.Get(storeKey, 0) if err != nil { - t.Errorf("Get() error when getting Store from KV: %v", err) + t.Errorf("get() error when getting Store from KV: %v", err) } if !bytes.Equal(expectedData, key.Data) { diff --git a/storage/edge/edge.go b/storage/edge/edge.go index e6a25fa821587393fca2e5c236e36111a7bcadd9..1f1c6c6f01a1778c81f8ce33f13b9dbe2f19c76b 100644 --- a/storage/edge/edge.go +++ b/storage/edge/edge.go @@ -58,7 +58,7 @@ func (s *Store) Add(preimage Preimage, identity *id.ID) { s.mux.Lock() defer s.mux.Unlock() - // Get the list to update, create if needed + // get the list to update, create if needed preimages, exists := s.edge[*identity] if !exists { preimages = newPreimages(identity) diff --git a/storage/edge/preimage.go b/storage/edge/preimage.go index a8e4c89432dddc25596495fe69b59e7786ceab45..f6d62432f81db03232f4e94aaea756eb6ac96642 100644 --- a/storage/edge/preimage.go +++ b/storage/edge/preimage.go @@ -68,7 +68,7 @@ func (pis Preimages) remove(data []byte) { // loadPreimages loads a Preimages object for the given identity. func loadPreimages(kv *versioned.KV, identity *id.ID) (Preimages, error) { - // Get the data from storage + // get the data from storage obj, err := kv.Get(preimagesKey(identity), preimageStoreVersion) if err != nil { return nil, errors.WithMessagef(err, "Failed to load edge Preimages "+ diff --git a/storage/fileTransfer/partStore.go b/storage/fileTransfer/partStore.go index 72765fffeae536e47ec71910c888e8108beba1a5..59018ab63b506c8fb0f7d046aeea900ec3d41c6a 100644 --- a/storage/fileTransfer/partStore.go +++ b/storage/fileTransfer/partStore.go @@ -104,7 +104,7 @@ func (ps *partStore) getFile() ([]byte, int) { ps.mux.Lock() defer ps.mux.Unlock() - // Get the length of one of the parts (all parts should be the same size) + // get the length of one of the parts (all parts should be the same size) partLength := 0 for _, part := range ps.parts { partLength = len(part) @@ -140,7 +140,7 @@ func (ps *partStore) len() int { // loadPartStore loads all the file parts from storage into memory. func loadPartStore(kv *versioned.KV) (*partStore, error) { - // Get list of saved file parts + // get list of saved file parts vo, err := kv.Get(partsListKey, partsListVersion) if err != nil { return nil, errors.Errorf(loadPartListErr, err) diff --git a/storage/fileTransfer/receiveFileTransfers.go b/storage/fileTransfer/receiveFileTransfers.go index 0c7bffdc6881e96fd79026deb58c98195b05dfbf..fc293fe9cb66446366f5324ad56115dd1f73299b 100644 --- a/storage/fileTransfer/receiveFileTransfers.go +++ b/storage/fileTransfer/receiveFileTransfers.go @@ -224,7 +224,7 @@ func LoadReceivedFileTransfersStore(kv *versioned.KV) ( kv: kv.Prefix(receivedFileTransfersStorePrefix), } - // Get the list of transfer IDs corresponding to each received transfer from + // get the list of transfer IDs corresponding to each received transfer from // storage transfersList, err := rft.loadTransfersList() if err != nil { @@ -289,7 +289,7 @@ func (rft *ReceivedFileTransfersStore) saveTransfersList() error { // received transfer from storage. func (rft *ReceivedFileTransfersStore) loadTransfersList() ( []ftCrypto.TransferID, error) { - // Get transfers list from storage + // get transfers list from storage vo, err := rft.kv.Get( receivedFileTransfersStoreKey, receivedFileTransfersStoreVersion) if err != nil { diff --git a/storage/fileTransfer/receiveFileTransfers_test.go b/storage/fileTransfer/receiveFileTransfers_test.go index 4fd245ec4d902d99f8389a8a4a1a6393c95d1432..64c183b54441fef528bea1d988df0edd5b87bce5 100644 --- a/storage/fileTransfer/receiveFileTransfers_test.go +++ b/storage/fileTransfer/receiveFileTransfers_test.go @@ -197,7 +197,7 @@ func TestReceivedFileTransfersStore_GetTransfer(t *testing.T) { t.Errorf("Failed to add new transfer: %+v", err) } - // Get the transfer + // get the transfer transfer, err := rft.GetTransfer(tid) if err != nil { t.Errorf("GetTransfer returned an error: %+v", err) @@ -245,7 +245,7 @@ func TestReceivedFileTransfersStore_GetTransfer_NoTransferError(t *testing.T) { t.Errorf("Failed to add new transfer: %+v", err) } - // Get the transfer + // get the transfer invalidTid, _ := ftCrypto.NewTransferID(prng) expectedErr := fmt.Sprintf(getReceivedTransferErr, invalidTid) _, err = rft.GetTransfer(invalidTid) diff --git a/storage/fileTransfer/sentFileTransfers.go b/storage/fileTransfer/sentFileTransfers.go index e672ce184fa4674a47b94c89bb47abdc2b420eb8..682c22defcd372bd2f94bd46bd413f78294990e1 100644 --- a/storage/fileTransfer/sentFileTransfers.go +++ b/storage/fileTransfer/sentFileTransfers.go @@ -149,7 +149,7 @@ func (sft *SentFileTransfersStore) GetUnsentParts() ( defer sft.mux.Unlock() unsentParts := map[ftCrypto.TransferID][]uint16{} - // Get list of unsent part numbers for each transfer + // get list of unsent part numbers for each transfer for tid, st := range sft.transfers { unsentPartNums, err := st.GetUnsentPartNums() if err != nil { @@ -168,7 +168,7 @@ func (sft *SentFileTransfersStore) GetSentRounds() map[id.Round][]ftCrypto.Trans defer sft.mux.Unlock() sentRounds := map[id.Round][]ftCrypto.TransferID{} - // Get list of round IDs that transfers have in-progress rounds on + // get list of round IDs that transfers have in-progress rounds on for tid, st := range sft.transfers { for _, rid := range st.GetSentRounds() { sentRounds[rid] = append(sentRounds[rid], tid) @@ -193,7 +193,7 @@ func (sft *SentFileTransfersStore) GetUnsentPartsAndSentRounds() ( sentRounds := map[id.Round][]ftCrypto.TransferID{} for tid, st := range sft.transfers { - // Get list of unsent part numbers for each transfer + // get list of unsent part numbers for each transfer stUnsentParts, err := st.GetUnsentPartNums() if err != nil { return nil, nil, err @@ -202,7 +202,7 @@ func (sft *SentFileTransfersStore) GetUnsentPartsAndSentRounds() ( unsentParts[tid] = stUnsentParts } - // Get list of round IDs that transfers have in-progress rounds on + // get list of round IDs that transfers have in-progress rounds on for _, rid := range st.GetSentRounds() { sentRounds[rid] = append(sentRounds[rid], tid) } @@ -223,7 +223,7 @@ func LoadSentFileTransfersStore(kv *versioned.KV) (*SentFileTransfersStore, erro kv: kv.Prefix(sentFileTransfersStorePrefix), } - // Get the list of transfer IDs corresponding to each sent transfer from + // get the list of transfer IDs corresponding to each sent transfer from // storage transfersList, err := sft.loadTransfersList() if err != nil { @@ -288,7 +288,7 @@ func (sft *SentFileTransfersStore) saveTransfersList() error { // sent transfer from storage. func (sft *SentFileTransfersStore) loadTransfersList() ([]ftCrypto.TransferID, error) { - // Get transfers list from storage + // get transfers list from storage vo, err := sft.kv.Get( sentFileTransfersStoreKey, sentFileTransfersStoreVersion) if err != nil { diff --git a/storage/fileTransfer/sentFileTransfers_test.go b/storage/fileTransfer/sentFileTransfers_test.go index 5fb3bdc2f9df5aaac90ccb7aca70a348977a0371..0de6b1f5ed30a7e088946d2ed28ff8bfaf8ace0e 100644 --- a/storage/fileTransfer/sentFileTransfers_test.go +++ b/storage/fileTransfer/sentFileTransfers_test.go @@ -629,7 +629,7 @@ func TestSentFileTransfersStore_saveTransfersList_loadTransfersList(t *testing.T t.Errorf("saveTransfersList returned an error: %+v", err) } - // Get list from storage + // get list from storage list, err := sft.loadTransfersList() if err != nil { t.Errorf("loadTransfersList returned an error: %+v", err) diff --git a/storage/fileTransfer/sentTransfer.go b/storage/fileTransfer/sentTransfer.go index 115eee1de2d8a95ef302edec84d6271e1ddce4ce..768aae51e5c2b672d04c2024d072c328f5c2f887 100644 --- a/storage/fileTransfer/sentTransfer.go +++ b/storage/fileTransfer/sentTransfer.go @@ -460,7 +460,7 @@ func (st *SentTransfer) GetEncryptedPart(partNum uint16, contentsSize int) (encP return nil, nil, format.Fingerprint{}, MaxRetriesErr } - // Get next unused fingerprint number and mark it as used + // get next unused fingerprint number and mark it as used nextKey, err := st.fpVector.Next() if err != nil { return nil, nil, format.Fingerprint{}, @@ -517,7 +517,7 @@ func (st *SentTransfer) UnsetInProgress(rid id.Round) ([]uint16, error) { st.mux.Lock() defer st.mux.Unlock() - // Get the list of part numbers to be removed from list + // get the list of part numbers to be removed from list partNums, _ := st.inProgressTransfers.getPartNums(rid) // The part status is set in partStats before the parts and round ID so that @@ -544,7 +544,7 @@ func (st *SentTransfer) FinishTransfer(rid id.Round) (bool, error) { st.mux.Lock() defer st.mux.Unlock() - // Get the parts in-progress for the round ID or return an error if none + // get the parts in-progress for the round ID or return an error if none // exist partNums, exists := st.inProgressTransfers.getPartNums(rid) if !exists { @@ -585,7 +585,7 @@ func (st *SentTransfer) GetUnsentPartNums() ([]uint16, error) { st.mux.RLock() defer st.mux.RUnlock() - // Get list of parts with a status of unsent + // get list of parts with a status of unsent unsentPartNums, err := st.partStats.GetKeys(unsent) if err != nil { return nil, errors.Errorf(getUnsentPartsErr, err) diff --git a/storage/fileTransfer/sentTransfer_test.go b/storage/fileTransfer/sentTransfer_test.go index ea4302b47a857125522b97be4cc13c4503e2d39c..aab3d2a6ff1272cdceeee0d90b630a3d9cca79d5 100644 --- a/storage/fileTransfer/sentTransfer_test.go +++ b/storage/fileTransfer/sentTransfer_test.go @@ -998,7 +998,7 @@ func TestSentTransfer_GetInProgress(t *testing.T) { expectedPartNums[:3], err) } - // Get the in-progress parts + // get the in-progress parts receivedPartNums, exists := st.GetInProgress(rid) if !exists { t.Errorf("Failed to find parts for round %d that should exist.", rid) @@ -1254,7 +1254,7 @@ func TestSentTransfer_GetSentRounds(t *testing.T) { } } - // Get the sent + // get the sent sentRounds := st.GetSentRounds() sort.SliceStable(sentRounds, func(i, j int) bool { return sentRounds[i] < sentRounds[j] }) diff --git a/storage/fileTransfer/transferredBundle.go b/storage/fileTransfer/transferredBundle.go index 639c8a096fdd8bf6cb8fd8d111e40d27b8d85491..dff0c2a240daf93e488c5e7a1667e112b5660a91 100644 --- a/storage/fileTransfer/transferredBundle.go +++ b/storage/fileTransfer/transferredBundle.go @@ -165,10 +165,10 @@ func (tb *transferredBundle) unmarshal(b []byte) { // Iterate over all map entries for n := buff.Next(8); len(n) == 8; n = buff.Next(8) { - // Get the round ID from the first 8 bytes + // get the round ID from the first 8 bytes rid := id.Round(binary.LittleEndian.Uint64(n)) - // Get number of part numbers listed + // get number of part numbers listed partNumsLen := binary.LittleEndian.Uint16(buff.Next(2)) // Increment number of parts diff --git a/storage/fileTransfer/transferredBundle_test.go b/storage/fileTransfer/transferredBundle_test.go index 62b3916e53608f7a60994a8a6a2f9a125d5659e3..36e618778072601a134a5daf0c3b9dc3446bbcd4 100644 --- a/storage/fileTransfer/transferredBundle_test.go +++ b/storage/fileTransfer/transferredBundle_test.go @@ -137,7 +137,7 @@ func Test_transferredBundle_getNumParts(t *testing.T) { } } - // Get number of parts + // get number of parts receivedNumParts := tb.getNumParts() if expectedNumParts != receivedNumParts { diff --git a/storage/hostList/hostList_test.go b/storage/hostList/hostList_test.go index 32780fae0a09db487520596e3748611a1bc5636c..1371370cc226dfa01eb52b963d36122c2ce2a902 100644 --- a/storage/hostList/hostList_test.go +++ b/storage/hostList/hostList_test.go @@ -55,7 +55,7 @@ func TestStore_Store_Get(t *testing.T) { newList, err := s.Get() if err != nil { - t.Errorf("Get returned an error: %+v", err) + t.Errorf("get returned an error: %+v", err) } if !reflect.DeepEqual(list, newList) { @@ -72,7 +72,7 @@ func TestStore_Get_StorageError(t *testing.T) { _, err := s.Get() if err == nil || !strings.Contains(err.Error(), expectedErr) { - t.Errorf("Get failed to return the expected error."+ + t.Errorf("get failed to return the expected error."+ "\nexpected: %s\nreceived: %+v", expectedErr, err) } } diff --git a/storage/partition/multiPartMessage_test.go b/storage/partition/multiPartMessage_test.go index 0fa14f3294eef6efa0ff1362e0eca7d1f97864fa..8d39165a74f129a956205cd2f4c0a86b87b5b9c2 100644 --- a/storage/partition/multiPartMessage_test.go +++ b/storage/partition/multiPartMessage_test.go @@ -48,7 +48,7 @@ func Test_loadOrCreateMultiPartMessage_Create(t *testing.T) { obj, err := mpm.kv.Get(messageKey, 0) if err != nil { - t.Errorf("Get() failed to get multiPartMessage from key value store: %v", err) + t.Errorf("get() failed to get multiPartMessage from key value store: %v", err) } if !bytes.Equal(expectedData, obj.Data) { @@ -144,7 +144,7 @@ func TestMultiPartMessage_Add(t *testing.T) { obj, err := mpm.kv.Get(messageKey, 0) if err != nil { - t.Errorf("Get() failed to get multiPartMessage from key value store: %v", err) + t.Errorf("get() failed to get multiPartMessage from key value store: %v", err) } if !bytes.Equal(expectedData, obj.Data) { diff --git a/storage/partition/part_test.go b/storage/partition/part_test.go index b1db602f7932a505a877e8c34a54ed61173cf1ab..b421d6af31f6f06236805ac6b472ca310b669cce 100644 --- a/storage/partition/part_test.go +++ b/storage/partition/part_test.go @@ -35,7 +35,7 @@ func Test_savePart(t *testing.T) { // Attempt to get from key value store obj, err := kv.Get(key, 0) if err != nil { - t.Errorf("Get() produced an error: %v", err) + t.Errorf("get() produced an error: %v", err) } // Check if the data is correct diff --git a/storage/reception/store_test.go b/storage/reception/store_test.go index b969c9680a0f4e0885808df8b9144db6ca82d819..87e00d1623c786673cb21241299bfe8412fb3f22 100644 --- a/storage/reception/store_test.go +++ b/storage/reception/store_test.go @@ -97,7 +97,7 @@ func TestStore_save(t *testing.T) { obj, err := kv.Prefix(receptionPrefix).Get(receptionStoreStorageKey, 0) if err != nil { - t.Errorf("Get() produced an error: %+v", err) + t.Errorf("get() produced an error: %+v", err) } expectedData, err := json.Marshal(expected) diff --git a/storage/rounds/checkedRounds.go b/storage/rounds/checkedRounds.go index df17faa3ad38c7ea84d67e44aee01feb92230925..620d4b023a90006863bcbec80fe74b625feb3ddf 100644 --- a/storage/rounds/checkedRounds.go +++ b/storage/rounds/checkedRounds.go @@ -60,7 +60,7 @@ func newCheckedRounds(maxRounds int, store *utility.BlockStore) *CheckedRounds { // LoadCheckedRounds restores the list from storage. func LoadCheckedRounds(maxRounds int, kv *versioned.KV) (*CheckedRounds, error) { - // Get rounds from storage + // get rounds from storage store, rounds, err := utility.LoadBlockStore(kv) if err != nil { return nil, errors.Errorf("failed to load CheckedRounds from storage: %+v", err) diff --git a/storage/rounds/uncheckedRounds.go b/storage/rounds/uncheckedRounds.go index 58140e461bcc1f9603a8f8eef2e23d598da26ba4..5d951fc0da0adaa95a9589937bff9ccca93fbd7a 100644 --- a/storage/rounds/uncheckedRounds.go +++ b/storage/rounds/uncheckedRounds.go @@ -353,7 +353,7 @@ func (s *UncheckedRoundStore) marshal() ([]byte, error) { func (s *UncheckedRoundStore) unmarshal(data []byte) error { buff := bytes.NewBuffer(data) - // Get number of rounds in list + // get number of rounds in list length := binary.BigEndian.Uint32(buff.Next(8)) for i := 0; i < int(length); i++ { diff --git a/storage/rounds/unknownRounds.go b/storage/rounds/unknownRounds.go index 98e863d2b911c5ad7cd7cd9d1eed68ba9e4edc2b..ba2661c17c9cb1f2b6ae3a4ffe4d115d2ed189e6 100644 --- a/storage/rounds/unknownRounds.go +++ b/storage/rounds/unknownRounds.go @@ -91,7 +91,7 @@ func LoadUnknownRounds(kv *versioned.KV, urs := newUnknownRounds(kv, params) - // Get the versioned data from the kv + // get the versioned data from the kv obj, err := kv.Get(unknownRoundsStorageKey, unknownRoundsStorageVersion) if err != nil { jww.FATAL.Panicf("Failed to load UnknownRounds: %+v", err) diff --git a/storage/rounds/unknownRounds_test.go b/storage/rounds/unknownRounds_test.go index 7611579bf84dc6cb1e23c67f8b0c7e68ea765c2e..95537ded8f722850c81448793f55d2031157c656 100644 --- a/storage/rounds/unknownRounds_test.go +++ b/storage/rounds/unknownRounds_test.go @@ -46,7 +46,7 @@ func TestNewUnknownRoundsStore(t *testing.T) { key, err := store.kv.Get(unknownRoundsStorageKey, unknownRoundsStorageVersion) if err != nil { - t.Fatalf("Get() encoutnered an error when getting Store from KV: %v", err) + t.Fatalf("get() encoutnered an error when getting Store from KV: %v", err) } // Check that the stored data is the data outputted by marshal diff --git a/storage/session.go b/storage/session.go index 2ad3042ed7c76758227a42f751f146ae15cc58b4..921e3792a9e680c964b55886a1a5cf70f86539ef 100644 --- a/storage/session.go +++ b/storage/session.go @@ -10,11 +10,7 @@ package storage import ( - "gitlab.com/elixxir/client/storage/edge" - "gitlab.com/elixxir/client/storage/hostList" - "gitlab.com/elixxir/client/storage/rounds" - "gitlab.com/elixxir/client/storage/ud" - "gitlab.com/xx_network/primitives/rateLimiting" + "gitlab.com/elixxir/client/storage/utility" "sync" "testing" "time" @@ -22,22 +18,13 @@ import ( "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" userInterface "gitlab.com/elixxir/client/interfaces/user" - "gitlab.com/elixxir/client/storage/auth" "gitlab.com/elixxir/client/storage/clientVersion" - "gitlab.com/elixxir/client/storage/cmix" - "gitlab.com/elixxir/client/storage/conversation" - "gitlab.com/elixxir/client/storage/e2e" - "gitlab.com/elixxir/client/storage/partition" - "gitlab.com/elixxir/client/storage/reception" "gitlab.com/elixxir/client/storage/user" - "gitlab.com/elixxir/client/storage/utility" "gitlab.com/elixxir/client/storage/versioned" "gitlab.com/elixxir/crypto/cyclic" "gitlab.com/elixxir/crypto/fastRNG" "gitlab.com/elixxir/ekv" "gitlab.com/elixxir/primitives/version" - "gitlab.com/xx_network/crypto/csprng" - "gitlab.com/xx_network/crypto/large" "gitlab.com/xx_network/crypto/signature/rsa" "gitlab.com/xx_network/primitives/id" "gitlab.com/xx_network/primitives/ndf" @@ -46,6 +33,8 @@ import ( // Number of rounds to store in the CheckedRound buffer const CheckRoundsMaxSize = 1000000 / 64 const currentSessionVersion = 0 +const cmixGroupKey = "cmixGroup" +const e2eGroupKey = "e2eGroup" // Session object, backed by encrypted filestore type Session struct { @@ -56,26 +45,12 @@ type Session struct { //memoized data regStatus RegistrationStatus ndf *ndf.NetworkDefinition + cmixGroup *cyclic.Group + e2eGroup *cyclic.Group //sub-stores - e2e *e2e.Store - cmix *cmix.Store - user *user.User - conversations *conversation.Store - partition *partition.Store - auth *auth.Store - criticalMessages *utility.E2eMessageBuffer - criticalRawMessages *utility.CmixMessageBuffer - bucketStore *rateLimiting.Bucket - bucketParamStore *utility.BucketParamStore - garbledMessages *utility.MeteredCmixMessageBuffer - reception *reception.Store - clientVersion *clientVersion.Store - uncheckedRounds *rounds.UncheckedRoundStore - hostList *hostList.Store - edgeCheck *edge.Store - ringBuff *conversation.Buff - ud *ud.Store + user *user.User + clientVersion *clientVersion.Store } // Initialize a new Session object @@ -97,8 +72,7 @@ func initStore(baseDir, password string) (*Session, error) { // Creates new UserData in the session func New(baseDir, password string, u userInterface.User, currentVersion version.Version, cmixGrp, e2eGrp *cyclic.Group, - rng *fastRNG.StreamGenerator, - rateLimitParams ndf.RateLimiting) (*Session, error) { +) (*Session, error) { s, err := initStore(baseDir, password) if err != nil { @@ -116,75 +90,19 @@ func New(baseDir, password string, u userInterface.User, if err != nil { return nil, errors.WithMessage(err, "Failed to create user") } - uid := s.user.GetCryptographicIdentity().GetReceptionID() - - s.cmix, err = cmix.NewStore(cmixGrp, s.kv) - if err != nil { - return nil, errors.WithMessage(err, "Failed to create cmix store") - } - - s.e2e, err = e2e.NewStore(e2eGrp, s.kv, u.E2eDhPrivateKey, uid, rng) - if err != nil { - return nil, errors.WithMessage(err, "Failed to create e2e store") - } - - s.auth, err = auth.NewStore(s.kv, e2eGrp, []*cyclic.Int{u.E2eDhPrivateKey}) - if err != nil { - return nil, errors.WithMessage(err, "Failed to create auth store") - } - - s.garbledMessages, err = utility.NewMeteredCmixMessageBuffer(s.kv, garbledMessagesKey) - if err != nil { - return nil, errors.WithMessage(err, "Failed to create garbledMessages buffer") - } - - s.criticalMessages, err = utility.NewE2eMessageBuffer(s.kv, criticalMessagesKey) - if err != nil { - return nil, errors.WithMessage(err, "Failed to create e2e critical message buffer") - } - - s.criticalRawMessages, err = utility.NewCmixMessageBuffer(s.kv, criticalRawMessagesKey) - if err != nil { - return nil, errors.WithMessage(err, "Failed to create raw critical message buffer") - } - - s.conversations = conversation.NewStore(s.kv) - s.partition = partition.New(s.kv) - - s.reception = reception.NewStore(s.kv) s.clientVersion, err = clientVersion.NewStore(currentVersion, s.kv) - if err != nil { - return nil, errors.WithMessage(err, "Failed to create client version store.") - } - - s.uncheckedRounds, err = rounds.NewUncheckedStore(s.kv) - if err != nil { - return nil, errors.WithMessage(err, "Failed to create unchecked round store") - } - - s.hostList = hostList.NewStore(s.kv) - - s.edgeCheck, err = edge.NewStore(s.kv, u.ReceptionID) - if err != nil { - return nil, errors.WithMessage(err, "Failed to create edge check store") - } - s.bucketParamStore, err = utility.NewBucketParamsStore( - uint32(rateLimitParams.Capacity), uint32(rateLimitParams.LeakedTokens), - time.Duration(rateLimitParams.LeakDuration), s.kv) - if err != nil { - return nil, errors.WithMessage(err, "Failed to create bucket params store") + if err = utility.StoreGroup(s.kv, cmixGrp, cmixGroupKey); err != nil { + return nil, err } - s.bucketStore = utility.NewStoredBucket(uint32(rateLimitParams.Capacity), uint32(rateLimitParams.LeakedTokens), - time.Duration(rateLimitParams.LeakDuration), s.kv) - - s.ud, err = ud.NewStore(s.kv) - if err != nil { - return nil, errors.WithMessage(err, "Failed to create ud store") + if err = utility.StoreGroup(s.kv, e2eGrp, e2eGroupKey); err != nil { + return nil, err } + s.cmixGroup = cmixGrp + s.e2eGroup = e2eGrp return s, nil } @@ -218,75 +136,16 @@ func Load(baseDir, password string, currentVersion version.Version, return nil, errors.WithMessage(err, "Failed to load Session") } - s.cmix, err = cmix.LoadStore(s.kv) + s.cmixGroup, err = utility.LoadGroup(s.kv, cmixGroupKey) if err != nil { return nil, errors.WithMessage(err, "Failed to load Session") } - uid := s.user.GetCryptographicIdentity().GetReceptionID() - - s.e2e, err = e2e.LoadStore(s.kv, uid, rng) + s.e2eGroup, err = utility.LoadGroup(s.kv, e2eGroupKey) if err != nil { return nil, errors.WithMessage(err, "Failed to load Session") } - s.auth, err = auth.LoadStore(s.kv, s.e2e.GetGroup(), - []*cyclic.Int{s.e2e.GetDHPrivateKey()}) - if err != nil { - return nil, errors.WithMessage(err, "Failed to load auth store") - } - - s.criticalMessages, err = utility.LoadE2eMessageBuffer(s.kv, criticalMessagesKey) - if err != nil { - return nil, errors.WithMessage(err, "Failed to load session") - } - - s.criticalRawMessages, err = utility.LoadCmixMessageBuffer(s.kv, criticalRawMessagesKey) - if err != nil { - return nil, errors.WithMessage(err, "Failed to load raw critical message buffer") - } - - s.garbledMessages, err = utility.LoadMeteredCmixMessageBuffer(s.kv, garbledMessagesKey) - if err != nil { - return nil, errors.WithMessage(err, "Failed to load session") - } - - s.conversations = conversation.NewStore(s.kv) - s.partition = partition.Load(s.kv) - - s.reception = reception.LoadStore(s.kv) - - s.uncheckedRounds, err = rounds.LoadUncheckedStore(s.kv) - if err != nil { - return nil, errors.WithMessage(err, "Failed to load unchecked round store") - } - - s.hostList = hostList.NewStore(s.kv) - - s.edgeCheck, err = edge.LoadStore(s.kv) - if err != nil { - return nil, errors.WithMessage(err, "Failed to load edge check store") - } - - s.bucketParamStore, err = utility.LoadBucketParamsStore(s.kv) - if err != nil { - return nil, errors.WithMessage(err, - "Failed to load bucket params store") - } - - params := s.bucketParamStore.Get() - s.bucketStore, err = utility.LoadBucket(params.Capacity, params.LeakedTokens, - params.LeakDuration, s.kv) - if err != nil { - return nil, errors.WithMessage(err, - "Failed to load bucket store") - } - - s.ud, err = ud.NewOrLoadStore(s.kv) - if err != nil { - return nil, errors.WithMessage(err, "Failed to load ud store") - } - return s, nil } @@ -296,48 +155,6 @@ func (s *Session) User() *user.User { return s.user } -func (s *Session) Cmix() *cmix.Store { - s.mux.RLock() - defer s.mux.RUnlock() - return s.cmix -} - -func (s *Session) E2e() *e2e.Store { - s.mux.RLock() - defer s.mux.RUnlock() - return s.e2e -} - -func (s *Session) Auth() *auth.Store { - s.mux.RLock() - defer s.mux.RUnlock() - return s.auth -} - -func (s *Session) Reception() *reception.Store { - s.mux.RLock() - defer s.mux.RUnlock() - return s.reception -} - -func (s *Session) GetCriticalMessages() *utility.E2eMessageBuffer { - s.mux.RLock() - defer s.mux.RUnlock() - return s.criticalMessages -} - -func (s *Session) GetCriticalRawMessages() *utility.CmixMessageBuffer { - s.mux.RLock() - defer s.mux.RUnlock() - return s.criticalRawMessages -} - -func (s *Session) GetGarbledMessages() *utility.MeteredCmixMessageBuffer { - s.mux.RLock() - defer s.mux.RUnlock() - return s.garbledMessages -} - // GetClientVersion returns the version of the client storage. func (s *Session) GetClientVersion() version.Version { s.mux.RLock() @@ -345,56 +162,6 @@ func (s *Session) GetClientVersion() version.Version { return s.clientVersion.Get() } -func (s *Session) Conversations() *conversation.Store { - s.mux.RLock() - defer s.mux.RUnlock() - return s.conversations -} - -func (s *Session) Partition() *partition.Store { - s.mux.RLock() - defer s.mux.RUnlock() - return s.partition -} - -func (s *Session) UncheckedRounds() *rounds.UncheckedRoundStore { - s.mux.RLock() - defer s.mux.RUnlock() - return s.uncheckedRounds -} - -func (s *Session) HostList() *hostList.Store { - s.mux.RLock() - defer s.mux.RUnlock() - return s.hostList -} - -// GetEdge returns the edge preimage store. -func (s *Session) GetEdge() *edge.Store { - s.mux.RLock() - defer s.mux.RUnlock() - return s.edgeCheck -} - -func (s *Session) GetUd() *ud.Store { - s.mux.RLock() - defer s.mux.RUnlock() - return s.ud -} - -// GetBucketParams returns the bucket params store. -func (s *Session) GetBucketParams() *utility.BucketParamStore { - s.mux.RLock() - defer s.mux.RUnlock() - return s.bucketParamStore -} - -func (s *Session) GetBucket() *rateLimiting.Bucket { - s.mux.RLock() - defer s.mux.RUnlock() - return s.bucketStore -} - // Get an object from the session func (s *Session) Get(key string) (*versioned.Object, error) { return s.kv.Get(key, currentSessionVersion) @@ -417,6 +184,16 @@ func (s *Session) GetKV() *versioned.KV { return s.kv } +// GetCmixGrouo returns cMix Group +func (s *Session) GetCmixGroup() *cyclic.Group { + return s.cmixGroup +} + +// GetE2EGrouo returns cMix Group +func (s *Session) GetE2EGroup() *cyclic.Group { + return s.e2eGroup +} + // Initializes a Session object wrapped around a MemStore object. // FOR TESTING ONLY func InitTestingSession(i interface{}) *Session { @@ -446,91 +223,6 @@ func InitTestingSession(i interface{}) *Session { u.SetRegistrationTimestamp(testTime.UnixNano()) s.user = u - cmixGrp := cyclic.NewGroup( - large.NewIntFromString("9DB6FB5951B66BB6FE1E140F1D2CE5502374161FD6538DF1648218642F0B5C48"+ - "C8F7A41AADFA187324B87674FA1822B00F1ECF8136943D7C55757264E5A1A44F"+ - "FE012E9936E00C1D3E9310B01C7D179805D3058B2A9F4BB6F9716BFE6117C6B5"+ - "B3CC4D9BE341104AD4A80AD6C94E005F4B993E14F091EB51743BF33050C38DE2"+ - "35567E1B34C3D6A5C0CEAA1A0F368213C3D19843D0B4B09DCB9FC72D39C8DE41"+ - "F1BF14D4BB4563CA28371621CAD3324B6A2D392145BEBFAC748805236F5CA2FE"+ - "92B871CD8F9C36D3292B5509CA8CAA77A2ADFC7BFD77DDA6F71125A7456FEA15"+ - "3E433256A2261C6A06ED3693797E7995FAD5AABBCFBE3EDA2741E375404AE25B", 16), - large.NewIntFromString("5C7FF6B06F8F143FE8288433493E4769C4D988ACE5BE25A0E24809670716C613"+ - "D7B0CEE6932F8FAA7C44D2CB24523DA53FBE4F6EC3595892D1AA58C4328A06C4"+ - "6A15662E7EAA703A1DECF8BBB2D05DBE2EB956C142A338661D10461C0D135472"+ - "085057F3494309FFA73C611F78B32ADBB5740C361C9F35BE90997DB2014E2EF5"+ - "AA61782F52ABEB8BD6432C4DD097BC5423B285DAFB60DC364E8161F4A2A35ACA"+ - "3A10B1C4D203CC76A470A33AFDCBDD92959859ABD8B56E1725252D78EAC66E71"+ - "BA9AE3F1DD2487199874393CD4D832186800654760E1E34C09E4D155179F9EC0"+ - "DC4473F996BDCE6EED1CABED8B6F116F7AD9CF505DF0F998E34AB27514B0FFE7", 16)) - cmixStore, err := cmix.NewStore(cmixGrp, kv) - if err != nil { - jww.FATAL.Panicf("InitTestingSession failed to create dummy cmix session: %+v", err) - } - s.cmix = cmixStore - - s.bucketParamStore, err = utility.NewBucketParamsStore(10, 11, 12, kv) - if err != nil { - jww.FATAL.Panicf("InitTestingSession failed to create NewBucketParamsStore session: %+v", err) - } - s.bucketStore = utility.NewStoredBucket(10, 11, 12, kv) - - e2eStore, err := e2e.NewStore(cmixGrp, kv, cmixGrp.NewInt(2), uid, - fastRNG.NewStreamGenerator(7, 3, csprng.NewSystemRNG)) - if err != nil { - jww.FATAL.Panicf("InitTestingSession failed to create dummy cmix session: %+v", err) - } - s.e2e = e2eStore - - s.criticalMessages, err = utility.NewE2eMessageBuffer(s.kv, criticalMessagesKey) - if err != nil { - jww.FATAL.Panicf("InitTestingSession failed to create dummy critical messages: %+v", err) - } - - s.garbledMessages, err = utility.NewMeteredCmixMessageBuffer(s.kv, garbledMessagesKey) - if err != nil { - jww.FATAL.Panicf("Failed to create garbledMessages buffer: %+v", err) - } - - s.conversations = conversation.NewStore(s.kv) - s.partition = partition.New(s.kv) - - s.reception = reception.NewStore(s.kv) - - s.uncheckedRounds, err = rounds.NewUncheckedStore(s.kv) - if err != nil { - jww.FATAL.Panicf("Failed to create uncheckRound store: %v", err) - } - - s.hostList = hostList.NewStore(s.kv) - - privKeys := make([]*cyclic.Int, 10) - pubKeys := make([]*cyclic.Int, 10) - for i := range privKeys { - privKeys[i] = cmixGrp.NewInt(5) - pubKeys[i] = cmixGrp.ExpG(privKeys[i], cmixGrp.NewInt(1)) - } - - s.auth, err = auth.NewStore(s.kv, cmixGrp, privKeys) - if err != nil { - jww.FATAL.Panicf("Failed to create auth store: %v", err) - } - - s.edgeCheck, err = edge.NewStore(s.kv, uid) - if err != nil { - jww.FATAL.Panicf("Failed to create new edge Store: %+v", err) - } - - // todo: uncomment once NewBuff has been added properly - //s.ringBuff, err = conversation.NewBuff(s.kv, 100) - //if err != nil { - // jww.FATAL.Panicf("Failed to create ring buffer store: %+v", err) - //} - - s.ud, err = ud.NewStore(s.kv) - if err != nil { - jww.FATAL.Panicf("Failed to create ud store: %v", err) - } return s } diff --git a/storage/session_test.go b/storage/session_test.go index 73fe66a252cabc444a9c6c325f9c582dff7d1705..27a09e603ab719071a8265e4ae96a03a92517c7a 100644 --- a/storage/session_test.go +++ b/storage/session_test.go @@ -33,7 +33,7 @@ func TestSession_Smoke(t *testing.T) { if err != nil { t.Errorf("Failed to set: %+v", err) } - o, err := s.Get("testkey") + o, err := s.get("testkey") if err != nil { t.Errorf("Failed to get key") } diff --git a/storage/ud/store_test.go b/storage/ud/store_test.go index 977aba8ef641029199bf186d4e9a1af2fc692131..ffe058f51c7b3cf41799c28207eda5253a0ab8ad 100644 --- a/storage/ud/store_test.go +++ b/storage/ud/store_test.go @@ -66,7 +66,7 @@ func TestStore_MarshalUnmarshal_ConfirmedFacts(t *testing.T) { data, err := expectedStore.kv.Get(confirmedFactKey, version) if err != nil { - t.Errorf("Get() error when getting Store from KV: %v", err) + t.Errorf("get() error when getting Store from KV: %v", err) } expectedData, err := expectedStore.marshalConfirmedFacts() @@ -102,7 +102,7 @@ func TestStore_MarshalUnmarshal_UnconfirmedFacts(t *testing.T) { data, err := expectedStore.kv.Get(unconfirmedFactKey, version) if err != nil { - t.Errorf("Get() error when getting Store from KV: %v", err) + t.Errorf("get() error when getting Store from KV: %v", err) } expectedData, err := expectedStore.marshalUnconfirmedFacts() diff --git a/storage/utility/blockStore.go b/storage/utility/blockStore.go index b29dcd12d56037d6e7d0622b1fbc47f8faea62b9..053e015dd2171e41755afeb6c0e9674d4a2daf78 100644 --- a/storage/utility/blockStore.go +++ b/storage/utility/blockStore.go @@ -72,7 +72,7 @@ func NewBlockStore(numBlocks, blockSize int, kv *versioned.KV) (*BlockStore, err func LoadBlockStore(kv *versioned.KV) (*BlockStore, [][]byte, error) { bs := &BlockStore{kv: kv} - // Get BlockStore parameters from storage + // get BlockStore parameters from storage err := bs.load() if err != nil { return nil, nil, err @@ -81,7 +81,7 @@ func LoadBlockStore(kv *versioned.KV) (*BlockStore, [][]byte, error) { // LoadBlockStore each block from storage and join together into single slice var data, block [][]byte for i := bs.firstSaved; i <= bs.lastSaved; i++ { - // Get the block from storage + // get the block from storage block, err = bs.loadBlock(i) if err != nil { return nil, nil, err @@ -165,7 +165,7 @@ func (bs *BlockStore) saveBlock() error { // loadBlock loads the block with the index from storage. func (bs *BlockStore) loadBlock(i int) ([][]byte, error) { - // Get the data from the kv + // get the data from the kv obj, err := bs.kv.Get(bs.getKey(i), blockVersion) if err != nil { return nil, errors.Errorf(bKvLoadErr, i, err) @@ -230,7 +230,7 @@ func (bs *BlockStore) save() error { // load loads BlockStore parameters from storage. func (bs *BlockStore) load() error { - // Get the data from the kv + // get the data from the kv obj, err := bs.kv.Get(blockStoreKey, blockStoreVersion) if err != nil { return errors.Errorf(bsKvLoadErr, err) diff --git a/storage/utility/cmixMessageBuffer_test.go b/storage/utility/cmixMessageBuffer_test.go index b015cb2c66f028be8472b3281603f0b9e026b335..237d734eb4b7cd2ee770da4172fc34f6f2c48ef8 100644 --- a/storage/utility/cmixMessageBuffer_test.go +++ b/storage/utility/cmixMessageBuffer_test.go @@ -43,7 +43,7 @@ func TestCmixMessageHandler_SaveMessage(t *testing.T) { // Try to get message obj, err := kv.Get(key, 0) if err != nil { - t.Errorf("Get() returned an error: %v", err) + t.Errorf("get() returned an error: %v", err) } // Test if message retrieved matches expected diff --git a/storage/utility/e2eMessageBuffer_test.go b/storage/utility/e2eMessageBuffer_test.go index 6eda44ba0cdca36ed43e9332739b968e92ed6ea9..53bd84db46b50bfc9fe5daaf862f37b7c5f50d46 100644 --- a/storage/utility/e2eMessageBuffer_test.go +++ b/storage/utility/e2eMessageBuffer_test.go @@ -41,7 +41,7 @@ func TestE2EMessageHandler_SaveMessage(t *testing.T) { // Try to get message obj, err := kv.Get(key, 0) if err != nil { - t.Errorf("Get() returned an error: %v", err) + t.Errorf("get() returned an error: %v", err) } // Test if message retrieved matches expected diff --git a/storage/utility/knownRounds.go b/storage/utility/knownRounds.go index 85203145b7fead0131b3c861539c2c89cabd475b..2788a5f556b54699e5595734db225255457ae53f 100644 --- a/storage/utility/knownRounds.go +++ b/storage/utility/knownRounds.go @@ -85,7 +85,7 @@ func (kr *KnownRounds) save() error { func (kr *KnownRounds) load() error { // Load the versioned object - vo, err := kr.kv.Get(kr.key) + vo, err := kr.kv.get(kr.key) if err != nil { return err } diff --git a/storage/utility/knownRounds_test.go b/storage/utility/knownRounds_test.go index 2f67d1d90a0272e47fc640d2e8f9781c43eac782..80f8b43582c44c156e6af64536b64f55714521aa 100644 --- a/storage/utility/knownRounds_test.go +++ b/storage/utility/knownRounds_test.go @@ -99,9 +99,9 @@ func TestKnownRounds_save(t *testing.T) { t.Errorf("save() returned an error: %v", err) } - obj, err := expectedKR.kv.Get(expectedKR.key) + obj, err := expectedKR.kv.get(expectedKR.key) if err != nil { - t.Errorf("Get() returned an error: %v", err) + t.Errorf("get() returned an error: %v", err) } if !reflect.DeepEqual(expectedData, obj.Data) { diff --git a/storage/utility/messageBuffer_test.go b/storage/utility/messageBuffer_test.go index 6cb9f3660ba7c1f7433d9beb94edfd9a9515c674..f9afe57c1e9d5c98ca98c56d59bd6cdc7c805ceb 100644 --- a/storage/utility/messageBuffer_test.go +++ b/storage/utility/messageBuffer_test.go @@ -276,7 +276,7 @@ func TestMessageBuffer_Succeeded(t *testing.T) { testMB.Add(m) } - // Get message + // get message m, _ := testMB.Next() testMB.Succeeded(m) @@ -302,7 +302,7 @@ func TestMessageBuffer_Failed(t *testing.T) { testMB.Add(m) } - // Get message + // get message m, _ := testMB.Next() testMB.Failed(m) diff --git a/storage/utility/meteredCmixMessageBuffer_test.go b/storage/utility/meteredCmixMessageBuffer_test.go index a8116a7235dd7f64c701d04d3e655bef2237bc5a..be5a937d376778a23f6b95f5811868346fdabbcf 100644 --- a/storage/utility/meteredCmixMessageBuffer_test.go +++ b/storage/utility/meteredCmixMessageBuffer_test.go @@ -39,7 +39,7 @@ func Test_meteredCmixMessageHandler_SaveMessage(t *testing.T) { // Try to get message obj, err := kv.Get(key, 0) if err != nil { - t.Errorf("Get() returned an error: %v", err) + t.Errorf("get() returned an error: %v", err) } msgData, err := json.Marshal(&msg) @@ -113,7 +113,7 @@ func Test_meteredCmixMessageHandler_DeleteMessage(t *testing.T) { // Try to get message _, err = kv.Get(key, 0) if err == nil { - t.Error("Get() did not return an error.") + t.Error("get() did not return an error.") } } } diff --git a/storage/utility/multiStateVector.go b/storage/utility/multiStateVector.go index 77cf24ad1435c6c83ce431a13080a4d9d27cae68..caeeb347f0593852be4ea3bcbdc4c0c2fb558ced 100644 --- a/storage/utility/multiStateVector.go +++ b/storage/utility/multiStateVector.go @@ -225,7 +225,7 @@ func (msv *MultiStateVector) set(keyNum uint16, state uint8) error { return errors.Errorf(stateMaxErr, state, msv.numStates-1) } - // Get the current state + // get the current state oldState, err := msv.get(keyNum) if err != nil { return errors.Errorf(setGetStateErr, keyNum, err) @@ -385,7 +385,7 @@ func checkStateMap(numStates uint8, stateMap [][]bool) error { // state bit size. The masks for each state is found by right shifting // bitSize * keyNum. func getSelectionMask(keyNum uint16, bitSize uint8) uint64 { - // Get the mask at the zeroth position at the bit size; these masks look + // get the mask at the zeroth position at the bit size; these masks look // like the following for bit sizes 1 through 4 // 0b1000000000000000000000000000000000000000000000000000000000000000 // 0b1100000000000000000000000000000000000000000000000000000000000000 diff --git a/storage/utility/multiStateVector_test.go b/storage/utility/multiStateVector_test.go index 080e6e3b594cd34b0418e1065cf2db4e0cf14f89..3e25cdac8855205c9ef554e4cdb450598d2ea24f 100644 --- a/storage/utility/multiStateVector_test.go +++ b/storage/utility/multiStateVector_test.go @@ -108,7 +108,7 @@ func TestMultiStateVector_Get(t *testing.T) { for keyNum := uint16(0); keyNum < msv.numKeys; keyNum++ { state, err := msv.Get(keyNum) if err != nil { - t.Errorf("Get returned an error for key %d: %+v", keyNum, err) + t.Errorf("get returned an error for key %d: %+v", keyNum, err) } if state != 0 { t.Errorf("Key %d has unexpected state.\nexpected: %d\nreceived: %d", @@ -151,7 +151,7 @@ func TestMultiStateVector_Get(t *testing.T) { for keyNum, expectedState := range expectedStates { state, err := msv.Get(uint16(keyNum)) if err != nil { - t.Errorf("Get returned an error for key %d: %+v", keyNum, err) + t.Errorf("get returned an error for key %d: %+v", keyNum, err) } if expectedState != state { diff --git a/storage/versioned/kv.go b/storage/versioned/kv.go index 1e4267c5f330b6a3815b1c5ed0abafc810eda409..3e05b1b052d8a2713b9c9227e209f990c9c3f41d 100644 --- a/storage/versioned/kv.go +++ b/storage/versioned/kv.go @@ -53,8 +53,8 @@ func NewKV(data ekv.KeyValue) *KV { // Make sure to inspect the version returned in the versioned object func (v *KV) Get(key string, version uint64) (*Object, error) { key = v.makeKey(key, version) - jww.TRACE.Printf("Get %p with key %v", v.r.data, key) - // Get raw data + jww.TRACE.Printf("get %p with key %v", v.r.data, key) + // get raw data result := Object{} err := v.r.data.Get(key, &result) if err != nil { @@ -88,9 +88,9 @@ func (v *KV) GetAndUpgrade(key string, ut UpgradeTable) (*Object, error) { for version != 0 { version-- key = v.makeKey(baseKey, version) - jww.TRACE.Printf("Get %p with key %v", v.r.data, key) + jww.TRACE.Printf("get %p with key %v", v.r.data, key) - // Get raw data + // get raw data result = &Object{} err := v.r.data.Get(key, result) // Break when we find the *newest* version of the object diff --git a/storage/versioned/kv_test.go b/storage/versioned/kv_test.go index 393078152ab91f82045108c0eee3fa5f4706ed66..88cc0fcb8faaffca1886d8dc2b95e6c62c540c58 100644 --- a/storage/versioned/kv_test.go +++ b/storage/versioned/kv_test.go @@ -15,7 +15,7 @@ import ( "testing" ) -// KV Get should call the Upgrade function when it's available +// KV get should call the Upgrade function when it's available func TestVersionedKV_Get_Err(t *testing.T) { kv := make(ekv.Memstore) vkv := NewKV(kv) @@ -141,7 +141,7 @@ func TestVersionedKV_Delete(t *testing.T) { } } -// Test Get without Upgrade path +// Test get without Upgrade path func TestVersionedKV_Get(t *testing.T) { // Set up a dummy KV with the required data kv := make(ekv.Memstore) diff --git a/ud/addFact.go b/ud/addFact.go index 81734a2bdca3e1e0f73c3943b6330fede685228b..1985970ff976eeb25d9c437a187287cf61fe7c8a 100644 --- a/ud/addFact.go +++ b/ud/addFact.go @@ -61,7 +61,7 @@ func (m *Manager) addFact(inFact fact.Fact, uid *id.ID, aFC addFactComms) (strin FactSig: fSig, } - // Get UD host + // get UD host host, err := m.getHost() if err != nil { return "", err diff --git a/ud/confirmFact.go b/ud/confirmFact.go index af71eb7a43cc811839e360420dbdca96c7a5e812..7432911b2458e5744afacc77640b78eb2637153d 100644 --- a/ud/confirmFact.go +++ b/ud/confirmFact.go @@ -29,7 +29,7 @@ func (m *Manager) confirmFact(confirmationID, code string, comm confirmFactComm) "client is not registered") } - // Get UD host + // get UD host host, err := m.getHost() if err != nil { return err diff --git a/ud/lookup.go b/ud/lookup.go index 1769b5f34d5cca735eb96097f34e8a3f2ed70e42..2ba65223404fc234380a31b60774d5ce2cdbcd0c 100644 --- a/ud/lookup.go +++ b/ud/lookup.go @@ -59,7 +59,7 @@ func (m *Manager) lookup(uid *id.ID, callback lookupCallback, timeout time.Durat m.lookupResponseProcess(uid, callback, payload, err) } - // Get UD contact + // get UD contact c, err := m.getContact() if err != nil { return err diff --git a/ud/manager.go b/ud/manager.go index 4306743ff91bdf0dd6b2d36ab4e8064735cd75ee..e0c0d8ea3dd6349e7e7b961a694d5bd5d592fdd4 100644 --- a/ud/manager.go +++ b/ud/manager.go @@ -94,7 +94,7 @@ func NewManager(client *api.Client, single *single.Manager) (*Manager, error) { m.myID = m.storage.User().GetCryptographicIdentity().GetReceptionID() - // Get the commonly used data from storage + // get the commonly used data from storage m.privKey = m.storage.GetUser().ReceptionRSA // Load if the client is registered diff --git a/ud/register.go b/ud/register.go index f6b205a069fa054708f75c591c147a7660f8cfb3..55e62c1f804dd7f18de75b0135f8b789f9992a53 100644 --- a/ud/register.go +++ b/ud/register.go @@ -81,7 +81,7 @@ func (m *Manager) register(username string, comm registerUserComms) error { FactSig: signedFact, } - // Get UD host + // get UD host host, err := m.getHost() if err != nil { return err diff --git a/ud/remove.go b/ud/remove.go index 85547373fc064da7e424640683af4cc74663ae76..07670d7386cefbe089fd47e58fc671df212a303d 100644 --- a/ud/remove.go +++ b/ud/remove.go @@ -53,7 +53,7 @@ func (m *Manager) removeFact(fact fact.Fact, rFC removeFactComms) error { FactSig: fSig, } - // Get UD host + // get UD host host, err := m.getHost() if err != nil { return err @@ -109,7 +109,7 @@ func (m *Manager) removeUser(fact fact.Fact, rFC removeUserComms) error { FactSig: fsig, } - // Get UD host + // get UD host host, err := m.getHost() if err != nil { return err diff --git a/ud/search.go b/ud/search.go index e8db5749ace91b445f56b7f71ace9c8b5165b886..ac978a438383c381973c4b4e57e174649a24d7ed 100644 --- a/ud/search.go +++ b/ud/search.go @@ -42,7 +42,7 @@ func (m *Manager) Search(list fact.FactList, callback searchCallback, timeout ti m.searchResponseHandler(factMap, callback, payload, err) } - // Get UD contact + // get UD contact c, err := m.getContact() if err != nil { return err