From 247733457dd0b1b39fa7f5dae2de7260aed34268 Mon Sep 17 00:00:00 2001 From: josh <josh@elixxir.io> Date: Mon, 20 Jun 2022 15:37:14 -0700 Subject: [PATCH] Clean up code and fix bug (maybe) --- cmix/identity/tracker.go | 16 ++++++++------ restlike/single/receiver.go | 6 ++++-- single/interfaces.go | 43 +++++++++++++++++++++++++++++++++++++ single/listener.go | 20 ----------------- single/receivedRequest.go | 13 ----------- single/request.go | 6 ------ xxdk/cmix.go | 1 + xxdk/e2e.go | 8 +++---- xxdk/identity.go | 6 ++++-- 9 files changed, 66 insertions(+), 53 deletions(-) diff --git a/cmix/identity/tracker.go b/cmix/identity/tracker.go index 7d9b7aaae..961aac776 100644 --- a/cmix/identity/tracker.go +++ b/cmix/identity/tracker.go @@ -41,7 +41,8 @@ const ( trackedIDChanSize = 1000 deleteIDChanSize = 1000 - // DefaultExtraChecks is the default value for ExtraChecks on receptionID.Identity. + // DefaultExtraChecks is the default value for ExtraChecks + // on receptionID.Identity. DefaultExtraChecks = 10 ) @@ -225,8 +226,8 @@ func (t *manager) track(stop *stoppable.Single) { } } -// processIdentities builds and adds new identities and removes old identities from the tracker -// and returns the timestamp of the next ID event +// processIdentities builds and adds new identities and removes old +// identities from the tracker and returns the timestamp of the next ID event. func (t *manager) processIdentities(addressSize uint8) time.Time { edits := false toRemove := make(map[int]struct{}) @@ -304,7 +305,8 @@ func unmarshalTimestamp(lastTimestampObj *versioned.Object) (time.Time, error) { // generateIdentitiesOverRange generates and adds all not yet existing ephemeral Ids // and returns the timestamp of the next generation for the given TrackedID -func (t *manager) generateIdentitiesOverRange(inQuestion TrackedID, addressSize uint8) time.Time { +func (t *manager) generateIdentitiesOverRange(inQuestion TrackedID, + addressSize uint8) time.Time { // Ensure that ephemeral IDs will not be generated after the // identity is invalid generateUntil := inQuestion.NextGeneration @@ -337,7 +339,8 @@ func (t *manager) generateIdentitiesOverRange(inQuestion TrackedID, addressSize } // Move up the end time if the source identity is invalid // before the natural end of the ephemeral identity - if inQuestion.ValidUntil != Forever && newIdentity.End.After(inQuestion.ValidUntil) { + if inQuestion.ValidUntil != Forever && newIdentity.End. + After(inQuestion.ValidUntil) { newIdentity.End = inQuestion.ValidUntil } @@ -348,7 +351,8 @@ func (t *manager) generateIdentitiesOverRange(inQuestion TrackedID, addressSize // Print debug information and set return value if isLastIdentity := i == len(protoIds)-1; isLastIdentity { - jww.INFO.Printf("Current Identity: %d (source: %s), Start: %s, End: %s, addrSize: %d", + jww.INFO.Printf("Current Identity: %d (source: %s), Start: %s, "+ + "End: %s, addrSize: %d", newIdentity.EphId.Int64(), newIdentity.Source, newIdentity.StartValid, diff --git a/restlike/single/receiver.go b/restlike/single/receiver.go index f82a1f327..f25268f81 100644 --- a/restlike/single/receiver.go +++ b/restlike/single/receiver.go @@ -25,7 +25,8 @@ type receiver struct { // Callback is the handler for single-use message reception for a RestServer // Automatically responds to invalid endpoint requests -func (s *receiver) Callback(req *single.Request, receptionId receptionID.EphemeralIdentity, rounds []rounds.Round) { +func (s *receiver) Callback(req *single.Request, + receptionId receptionID.EphemeralIdentity, rounds []rounds.Round) { // Unmarshal the request payload newMessage := &restlike.Message{} err := proto.Unmarshal(req.GetPayload(), newMessage) @@ -35,7 +36,8 @@ func (s *receiver) Callback(req *single.Request, receptionId receptionID.Ephemer } var respondErr error - if cb, err := s.endpoints.Get(restlike.URI(newMessage.GetUri()), restlike.Method(newMessage.GetMethod())); err == nil { + if cb, err := s.endpoints.Get(restlike.URI(newMessage.GetUri()), + restlike.Method(newMessage.GetMethod())); err == nil { // Send the payload to the proper Callback if it exists and singleRespond with the result respondErr = singleRespond(cb(newMessage), req) } else { diff --git a/single/interfaces.go b/single/interfaces.go index d72ba2fa1..da28ef80a 100644 --- a/single/interfaces.go +++ b/single/interfaces.go @@ -2,7 +2,10 @@ package single import ( "gitlab.com/elixxir/client/cmix" + "gitlab.com/elixxir/client/cmix/identity/receptionID" "gitlab.com/elixxir/client/cmix/message" + cMixMsg "gitlab.com/elixxir/client/cmix/message" + "gitlab.com/elixxir/client/cmix/rounds" "gitlab.com/elixxir/comms/network" "gitlab.com/elixxir/primitives/format" "gitlab.com/xx_network/primitives/id" @@ -10,6 +13,46 @@ import ( "time" ) +// Receiver contains the callback interface for any handler which +// will process the reception of a single request. Used in Listen. +type Receiver interface { + Callback(*Request, receptionID.EphemeralIdentity, []rounds.Round) +} + +// Response contains the callback interface for any handler which +// will process the response of a single request. Used in TransmitRequest. +type Response interface { + Callback(payload []byte, receptionID receptionID.EphemeralIdentity, + rounds []rounds.Round, err error) +} + +type Listener interface { + // Stop unregisters the listener + Stop() +} + +// RequestCmix interface matches a subset of the cmix.Client methods used by the +// Request for easier testing. +type RequestCmix interface { + GetMaxMessageLength() int + Send(recipient *id.ID, fingerprint format.Fingerprint, + service cMixMsg.Service, payload, mac []byte, + cmixParams cmix.CMIXParams) (id.Round, ephemeral.Id, error) + GetInstance() *network.Instance +} + +// ListenCmix interface matches a subset of cmix.Client methods used for Listen. +type ListenCmix interface { + RequestCmix + AddFingerprint(identity *id.ID, fingerprint format.Fingerprint, + mp cMixMsg.Processor) error + AddService( + clientID *id.ID, newService cMixMsg.Service, response cMixMsg.Processor) + DeleteService( + clientID *id.ID, toDelete cMixMsg.Service, processor cMixMsg.Processor) + CheckInProgressMessages() +} + // Cmix is a sub-interface of the cmix.Client. It contains the methods relevant // to what is used in this package. type Cmix interface { diff --git a/single/listener.go b/single/listener.go index 138eb86f0..01604b1e0 100644 --- a/single/listener.go +++ b/single/listener.go @@ -16,15 +16,6 @@ import ( "strings" ) -type Receiver interface { - Callback(*Request, receptionID.EphemeralIdentity, []rounds.Round) -} - -type Listener interface { - // Stop unregisters the listener - Stop() -} - type listener struct { tag string grp *cyclic.Group @@ -62,17 +53,6 @@ func Listen(tag string, myID *id.ID, privKey *cyclic.Int, net ListenCmix, return l } -type ListenCmix interface { - RequestCmix - AddFingerprint(identity *id.ID, fingerprint format.Fingerprint, - mp cMixMsg.Processor) error - AddService( - clientID *id.ID, newService cMixMsg.Service, response cMixMsg.Processor) - DeleteService( - clientID *id.ID, toDelete cMixMsg.Service, processor cMixMsg.Processor) - CheckInProgressMessages() -} - // Process decrypts and collates the encrypted single-use request message. func (l *listener) Process(ecrMsg format.Message, receptionID receptionID.EphemeralIdentity, round rounds.Round) { diff --git a/single/receivedRequest.go b/single/receivedRequest.go index 6f81f17e7..b571ef1db 100644 --- a/single/receivedRequest.go +++ b/single/receivedRequest.go @@ -8,14 +8,11 @@ import ( "gitlab.com/elixxir/client/cmix" cmixMsg "gitlab.com/elixxir/client/cmix/message" "gitlab.com/elixxir/client/single/message" - "gitlab.com/elixxir/comms/network" ds "gitlab.com/elixxir/comms/network/dataStructures" "gitlab.com/elixxir/crypto/cyclic" "gitlab.com/elixxir/crypto/e2e/singleUse" - "gitlab.com/elixxir/primitives/format" "gitlab.com/elixxir/primitives/states" "gitlab.com/xx_network/primitives/id" - "gitlab.com/xx_network/primitives/id/ephemeral" "sync" "sync/atomic" "testing" @@ -44,16 +41,6 @@ type Request struct { net RequestCmix } -// RequestCmix interface matches a subset of the cmix.Client methods used by the -// Request for easier testing. -type RequestCmix interface { - GetMaxMessageLength() int - Send(recipient *id.ID, fingerprint format.Fingerprint, - service cmixMsg.Service, payload, mac []byte, - cmixParams cmix.CMIXParams) (id.Round, ephemeral.Id, error) - GetInstance() *network.Instance -} - // Respond is used to respond to the request. It sends a payload up to // Request.GetMaxResponseLength. It will chunk the message into multiple cMix // messages if it is too long for a single message. It will fail if a single diff --git a/single/request.go b/single/request.go index ec068aebc..1a4962865 100644 --- a/single/request.go +++ b/single/request.go @@ -23,12 +23,6 @@ import ( "time" ) -// Response interface allows for callbacks to -type Response interface { - Callback(payload []byte, receptionID receptionID.EphemeralIdentity, - rounds []rounds.Round, err error) -} - // Error messages. const ( // TransmitRequest diff --git a/xxdk/cmix.go b/xxdk/cmix.go index 6b5444bef..d8a05defb 100644 --- a/xxdk/cmix.go +++ b/xxdk/cmix.go @@ -331,6 +331,7 @@ func LoginWithProtoClient(storageDir string, password []byte, return nil, err } + c.network.AddIdentity(c.GetUser().ReceptionID, time.Time{}, true) c.storage.SetNDF(def) err = c.initPermissioning(def) diff --git a/xxdk/e2e.go b/xxdk/e2e.go index 6693ebdb0..fc68bf569 100644 --- a/xxdk/e2e.go +++ b/xxdk/e2e.go @@ -49,9 +49,9 @@ func LoginEphemeral(client *Cmix, callbacks auth.Callbacks, } // LoginLegacy creates a new E2e backed by the xxdk.Cmix persistent versioned.KV -// Uses the pre-generated transmission ID used by xxdk.Cmix -// This function is designed to maintain backwards compatibility with previous xx messenger designs -// and should not be used for other purposes +// Uses the pre-generated transmission ID used by xxdk.Cmix. +// This function is designed to maintain backwards compatibility with previous +// xx messenger designs and should not be used for other purposes. func LoginLegacy(client *Cmix, callbacks auth.Callbacks) (m *E2e, err error) { m = &E2e{ Cmix: client, @@ -82,7 +82,7 @@ func LoginLegacy(client *Cmix, callbacks auth.Callbacks) (m *E2e, err error) { return m, err } -// login creates a new e2eApi.E2e backed by the given versioned.KV +// login creates a new xxdk.E2e backed by the given versioned.KV func login(client *Cmix, callbacks auth.Callbacks, identity ReceptionIdentity, kv *versioned.KV) (m *E2e, err error) { diff --git a/xxdk/identity.go b/xxdk/identity.go index da708d6c2..923bf3d5c 100644 --- a/xxdk/identity.go +++ b/xxdk/identity.go @@ -23,8 +23,10 @@ type ReceptionIdentity struct { DHKeyPrivate *cyclic.Int } -// MakeReceptionIdentity generates a new cryptographic identity for receiving messages -func MakeReceptionIdentity(rng csprng.Source, grp *cyclic.Group) (ReceptionIdentity, error) { +// MakeReceptionIdentity generates a new cryptographic identity +// for receiving messages. +func MakeReceptionIdentity(rng csprng.Source, + grp *cyclic.Group) (ReceptionIdentity, error) { //make RSA Key rsaKey, err := rsa.GenerateKey(rng, rsa.DefaultRSABitLen) -- GitLab