diff --git a/auth/receivedConfirm.go b/auth/receivedConfirm.go index 07e12df9beae5cb55889d9eadd29a3361b68b2b3..dd06dbbf129223642a3c80affa70ca84364f658f 100644 --- a/auth/receivedConfirm.go +++ b/auth/receivedConfirm.go @@ -3,6 +3,7 @@ package auth import ( "encoding/base64" "fmt" + jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/auth/store" "gitlab.com/elixxir/client/cmix/identity/receptionID" @@ -109,3 +110,9 @@ func (rcs *receivedConfirmService) Process(msg format.Message, } state.callbacks.Confirm(c, receptionID, round) } + +func (rcs *receivedConfirmService) String() string { + return fmt.Sprintf("authConfirm(%s, %s, %s)", + rcs.s.e2e.GetReceptionID(), rcs.GetPartner(), + rcs.GetFingerprint()) +} diff --git a/auth/receivedRequest.go b/auth/receivedRequest.go index 45fe574d225814e324c456cc1a9ae91bc1b86354..50e8d261c41bf6a9f2d4ccfd1fff77d8dfe333c8 100644 --- a/auth/receivedRequest.go +++ b/auth/receivedRequest.go @@ -3,6 +3,8 @@ package auth import ( "encoding/base64" "fmt" + "strings" + "github.com/cloudflare/circl/dh/sidh" "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" @@ -15,7 +17,6 @@ import ( "gitlab.com/elixxir/primitives/fact" "gitlab.com/elixxir/primitives/format" "gitlab.com/xx_network/primitives/id" - "strings" ) const dummyerr = "dummy error so we dont delete the request" @@ -248,6 +249,11 @@ func (rrs *receivedRequestService) Process(message format.Message, } } +func (rrs *receivedRequestService) String() string { + return fmt.Sprintf("authRequest(%s)", + rrs.s.e2e.GetReceptionID()) +} + func processDecryptedMessage(b []byte) (*id.ID, *sidh.PublicKey, fact.FactList, []byte, error) { //decode the ecr format diff --git a/cmd/callbacks.go b/cmd/callbacks.go index 6c4b1a9a7d403dfa277ad52f8a59259b7e839f76..f6839fce01943fa98203b114c21a96a537647bdc 100644 --- a/cmd/callbacks.go +++ b/cmd/callbacks.go @@ -74,7 +74,7 @@ func (a *authCallbacks) Reset(requestor contact.Contact, func registerMessageListener(client *api.Client) chan receive.Message { recvCh := make(chan receive.Message, 10000) listenerID := client.RegisterListenerChannel("DefaultCLIReceiver", - receive.AnyUser(), catalog.XxMessage, recvCh) + receive.AnyUser(), catalog.NoType, recvCh) jww.INFO.Printf("Message ListenerID: %v", listenerID) return recvCh } diff --git a/cmd/root.go b/cmd/root.go index 7bcfff2ac30e68ab193be3a37190d8c8bb837f94..06a209aff4a257cf0a70a1e8018ff9aaab9a47dc 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -211,6 +211,7 @@ var rootCmd = &cobra.Command{ recipientContact = user.GetContact() } + client.GetE2EHandler().EnableUnsafeReception() recvCh := registerMessageListener(client) err := client.StartNetworkFollower(5 * time.Second) diff --git a/cmix/message/handler.go b/cmix/message/handler.go index 9d4c1a1f1d2d0a897a577bdcef3332a1229fcc01..6a67e983e2ff1980b42f089c412279e6ae278a7b 100644 --- a/cmix/message/handler.go +++ b/cmix/message/handler.go @@ -9,11 +9,12 @@ package message import ( "fmt" + "sync" + jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/stoppable" "gitlab.com/elixxir/primitives/format" "gitlab.com/xx_network/primitives/netTime" - "sync" ) func (p *handler) handleMessages(stop *stoppable.Single) { @@ -28,6 +29,8 @@ func (p *handler) handleMessages(stop *stoppable.Single) { wg.Add(len(bundle.Messages)) for i := range bundle.Messages { msg := bundle.Messages[i] + jww.TRACE.Printf("handle IterMsgs: %s", + msg.Digest()) go func() { count, ts := p.inProcess.Add( @@ -68,8 +71,12 @@ func (p *handler) handleMessage(ecrMsg format.Message, bundle Bundle) bool { identity := bundle.Identity round := bundle.RoundInfo + jww.INFO.Printf("handleMessage(%s)", ecrMsg.Digest()) + // If we have a fingerprint, process it if proc, exists := p.pop(identity.Source, fingerprint); exists { + jww.DEBUG.Printf("handleMessage found fingerprint: %s", + ecrMsg.Digest()) proc.Process(ecrMsg, identity, round) return true } @@ -78,6 +85,8 @@ func (p *handler) handleMessage(ecrMsg format.Message, bundle Bundle) bool { identity.Source, ecrMsg.GetSIH(), ecrMsg.GetContents()) if exists { for _, t := range services { + jww.DEBUG.Printf("handleMessage service found: %s, %s", + ecrMsg.Digest(), t) go t.Process(ecrMsg, identity, round) } if len(services) == 0 { diff --git a/cmix/message/processor.go b/cmix/message/processor.go index c4107476d067af8cbd262c37865f3daffa8744d5..5d454df5c5bc49aaf0ffe1570512a9dc661e4c32 100644 --- a/cmix/message/processor.go +++ b/cmix/message/processor.go @@ -1,8 +1,10 @@ package message import ( - "gitlab.com/elixxir/client/cmix/rounds" + "fmt" + "gitlab.com/elixxir/client/cmix/identity/receptionID" + "gitlab.com/elixxir/client/cmix/rounds" "gitlab.com/elixxir/primitives/format" ) @@ -16,4 +18,7 @@ type Processor interface { // and can lead to compromise of message contents and integrity. Process(message format.Message, receptionID receptionID.EphemeralIdentity, round rounds.Round) + + // Implement the stringer interface String() string for debugging + fmt.Stringer } diff --git a/cmix/message/services.go b/cmix/message/services.go index ed11ce56b260e1fff0b78ceb8fa18960e31683b5..8bd95daa2d8e418a43f94b13d3ae7e1ad913a81b 100644 --- a/cmix/message/services.go +++ b/cmix/message/services.go @@ -78,25 +78,32 @@ func (sm *ServicesManager) get(clientID *id.ID, receivedSIH, if !exists { return nil, false } + + // NOTE: We exit on the first service match for _, s := range services { // Check if the SIH matches this service if s.ForMe(ecrMsgContents, receivedSIH) { if s.defaultList == nil && s.Tag != sih.Default { //skip if the processor is nil - if s.Processor != nil { + if s.Processor == nil { + jww.ERROR.Printf("<nil> processor: %s", + s.Tag) return []Processor{}, true } - // Return this service directly if not the default service + // Return this service directly if not + // the default service return []Processor{s}, true } else if s.defaultList != nil { - // If it is default and the default list is not empty, then - // return the default list + // If it is default and the default + // list is not empty, then return the + // default list return s.defaultList, true } - // Return false if it is for me, but I have nothing registered to - // respond to default queries + // Return false if it is for me, but I have + // nothing registered to respond to default + // queries return []Processor{}, false } } @@ -198,3 +205,7 @@ func (sm *ServicesManager) DeleteClientService(clientID *id.ID) { delete(sm.tmap, *clientID) } + +func (s service) String() string { + return s.Service.String() +} diff --git a/e2e/processor.go b/e2e/processor.go index e57359960e926cd9e8d19275a94447f62c7f2094..ea7d4aef499eb4b6c8ca012e5fc3c07695568020 100644 --- a/e2e/processor.go +++ b/e2e/processor.go @@ -1,9 +1,11 @@ package e2e import ( + "fmt" + jww "github.com/spf13/jwalterweatherman" - "gitlab.com/elixxir/client/cmix/rounds" "gitlab.com/elixxir/client/cmix/identity/receptionID" + "gitlab.com/elixxir/client/cmix/rounds" "gitlab.com/elixxir/client/e2e/ratchet/partner/session" "gitlab.com/elixxir/primitives/format" ) @@ -37,3 +39,8 @@ func (p *processor) Process(ecrMsg format.Message, p.m.Switchboard.Speak(message) } } + +func (p *processor) String() string { + return fmt.Sprintf("E2E(%s): %s", + p.m.myID, p.cy.GetSession()) +} diff --git a/e2e/sendUnsafe.go b/e2e/sendUnsafe.go index 9ad2b48ad2191b42a97623e976a1a23d721133f8..4451f16c4f12062dee8ee883ccc10de83f225e69 100644 --- a/e2e/sendUnsafe.go +++ b/e2e/sendUnsafe.go @@ -62,6 +62,9 @@ func (m *manager) sendUnsafe(mt catalog.MessageType, recipient *id.ID, unencryptedMAC, fp := e2e.SetUnencrypted(payload, m.myID) + jww.TRACE.Printf("sendUnsafe contents: %v, fp: %v, mac: %v", + payload, fp, unencryptedMAC) + var err error roundIds[i], _, err = m.net.Send(recipient, fp, srvc, payload, unencryptedMAC, diff --git a/e2e/unsafeProcessor.go b/e2e/unsafeProcessor.go index 5a9e84390531f6d37fe5e391ed646ee5530b2d0c..3cd173d525244ea2bdb15cd1c28fe4af1847ce58 100644 --- a/e2e/unsafeProcessor.go +++ b/e2e/unsafeProcessor.go @@ -1,9 +1,11 @@ package e2e import ( + "fmt" + jww "github.com/spf13/jwalterweatherman" - "gitlab.com/elixxir/client/cmix/rounds" "gitlab.com/elixxir/client/cmix/identity/receptionID" + "gitlab.com/elixxir/client/cmix/rounds" "gitlab.com/elixxir/crypto/e2e" "gitlab.com/elixxir/primitives/format" ) @@ -17,7 +19,14 @@ func (up *UnsafeProcessor) Process(ecrMsg format.Message, receptionID receptionID.EphemeralIdentity, round rounds.Round) { //check if the message is unencrypted + jww.INFO.Printf("Unsafe PRocessed received: contents: %v, fp: %v, mac: %v, sih: %v", + ecrMsg.GetContents(), ecrMsg.GetKeyFP(), ecrMsg.GetMac(), ecrMsg.GetSIH()) unencrypted, sender := e2e.IsUnencrypted(ecrMsg) + if !unencrypted && sender == nil { + jww.ERROR.Printf("unencrypted message failed MAC check: %v", + ecrMsg) + return + } if !unencrypted { jww.ERROR.Printf("Received a non unencrypted message in e2e "+ "service %s, A message might have dropped!", up.tag) @@ -35,3 +44,7 @@ func (up *UnsafeProcessor) Process(ecrMsg format.Message, up.m.Switchboard.Speak(message) } } + +func (up *UnsafeProcessor) String() string { + return fmt.Sprintf("Unsafe(%s)", up.m.myID) +} diff --git a/fileTransfer/processor.go b/fileTransfer/processor.go index f4c2432c3277c61588c7699cf8544ca8346b1d54..a1bb17db81a04c8dec2ab894e17a9f91fa82f6de 100644 --- a/fileTransfer/processor.go +++ b/fileTransfer/processor.go @@ -8,6 +8,8 @@ package fileTransfer import ( + "fmt" + jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/cmix/identity/receptionID" "gitlab.com/elixxir/client/cmix/rounds" @@ -62,3 +64,7 @@ func (p *processor) Process(msg format.Message, // Call callback with updates p.callbacks.Call(p.TransferID(), nil) } + +func (p *processor) String() string { + return fmt.Sprintf("FileTransfer(%s)", p.myID) +} diff --git a/groupChat/receive.go b/groupChat/receive.go index 503a52fa79434510348680b442596c1a6b3dff5c..244883cc33dd95d2164196adeaffaf6f03b71833 100644 --- a/groupChat/receive.go +++ b/groupChat/receive.go @@ -8,6 +8,9 @@ package groupChat import ( + "fmt" + "time" + "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/cmix/identity/receptionID" @@ -16,7 +19,6 @@ import ( "gitlab.com/elixxir/crypto/group" "gitlab.com/elixxir/primitives/format" "gitlab.com/elixxir/primitives/states" - "time" ) // Error messages. @@ -77,6 +79,10 @@ func (p *receptionProcessor) Process(message format.Message, receptionID recepti p.m.receiveFunc(result) } +func (p *receptionProcessor) String() string { + return fmt.Sprintf("GroupChatReception(%s)", p.m.receptionId) +} + // decryptMessage decrypts the group message payload and returns its message ID, // timestamp, sender ID, and message contents. func decryptMessage(g gs.Group, fingerprint format.Fingerprint, key group.CryptKey, payload []byte) ( diff --git a/single/listener.go b/single/listener.go index 5501915df137881ab1c869e00e1ab28e23cd7040..bd5f7dab613f06eba040fae03d819d7779e66200 100644 --- a/single/listener.go +++ b/single/listener.go @@ -1,6 +1,8 @@ package single import ( + "fmt" + jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/cmix" "gitlab.com/elixxir/client/cmix/identity/receptionID" @@ -119,3 +121,7 @@ func (l *listener) Stop() { } l.net.DeleteService(l.myId, svc, l) } + +func (l *listener) String() string { + return fmt.Sprintf("SingleUse(%s)", l.myId) +} diff --git a/single/responseProcessor.go b/single/responseProcessor.go index a6f0d080abddfbb2e67f9232c18eafc99c8eb2ee..62f526a4919d115b60376be3ad565070c68ad63d 100644 --- a/single/responseProcessor.go +++ b/single/responseProcessor.go @@ -1,6 +1,8 @@ package single import ( + "fmt" + jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/cmix/identity/receptionID" "gitlab.com/elixxir/client/cmix/rounds" @@ -48,3 +50,8 @@ func (rsp *responseProcessor) Process(ecrMsg format.Message, rsp.callback(payload, receptionID, round, nil) } } + +func (rsp *responseProcessor) String() string { + return fmt.Sprintf("SingleUseFP(%s, %s)", + rsp.sendingID, rsp.recipient.ID) +}