From 4a444a73b6417a0c492dcfd6575cbc52b9c4b8f1 Mon Sep 17 00:00:00 2001 From: joshemb <josh@elixxir.io> Date: Fri, 26 Aug 2022 12:31:46 -0700 Subject: [PATCH] Move send report to crypto --- auth/utils_test.go | 5 +++-- cmd/root.go | 4 ++-- connect/connect.go | 7 +++--- connect/utils_test.go | 5 +++-- e2e/critical.go | 3 ++- e2e/interface.go | 3 ++- e2e/manager.go | 3 ++- e2e/rekey/exchange.go | 2 +- e2e/rekey/utils_test.go | 6 ++--- e2e/sendE2E.go | 35 ++++++++---------------------- fileTransfer/connect/utils_test.go | 5 +++-- fileTransfer/connect/wrapper.go | 3 ++- fileTransfer/e2e/utils_test.go | 5 +++-- fileTransfer/e2e/wrapper.go | 3 ++- go.mod | 2 +- go.sum | 2 ++ groupChat/e2eManager_test.go | 9 ++++---- groupChat/interface.go | 3 ++- ud/mockE2e_test.go | 3 ++- 19 files changed, 53 insertions(+), 55 deletions(-) diff --git a/auth/utils_test.go b/auth/utils_test.go index b2c11bb4c..4136860e3 100644 --- a/auth/utils_test.go +++ b/auth/utils_test.go @@ -13,6 +13,7 @@ import ( "gitlab.com/elixxir/client/stoppable" "gitlab.com/elixxir/comms/mixmessages" "gitlab.com/elixxir/crypto/cyclic" + cryptoE2e "gitlab.com/elixxir/crypto/e2e" "gitlab.com/elixxir/primitives/states" "gitlab.com/xx_network/comms/connect" "gitlab.com/xx_network/crypto/large" @@ -60,8 +61,8 @@ func (m mockE2eHandler) StartProcesses() (stoppable.Stoppable, error) { } func (m mockE2eHandler) SendE2E(mt catalog.MessageType, recipient *id.ID, - payload []byte, params e2e.Params) (e2e.SendReport, error) { - return e2e.SendReport{}, nil + payload []byte, params e2e.Params) (cryptoE2e.SendReport, error) { + return cryptoE2e.SendReport{}, nil } func (m mockE2eHandler) RegisterListener(senderID *id.ID, diff --git a/cmd/root.go b/cmd/root.go index 56074b3d6..1a24d7dea 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -14,7 +14,7 @@ import ( "encoding/hex" "encoding/json" "fmt" - "gitlab.com/elixxir/client/e2e" + cryptoE2e "gitlab.com/elixxir/crypto/e2e" "io/ioutil" "log" "os" @@ -289,7 +289,7 @@ var rootCmd = &cobra.Command{ e2eParams.Base) } else { e2eParams.Base.DebugTag = "cmd.E2E" - var sendReport e2e.SendReport + var sendReport cryptoE2e.SendReport sendReport, err = user.GetE2E().SendE2E(mt, recipient, payload, e2eParams.Base) roundIDs = sendReport.RoundList diff --git a/connect/connect.go b/connect/connect.go index 83896dbc3..5cc9f60a2 100644 --- a/connect/connect.go +++ b/connect/connect.go @@ -7,6 +7,7 @@ package connect import ( + cryptoE2e "gitlab.com/elixxir/crypto/e2e" "io" "sync/atomic" "time" @@ -41,7 +42,7 @@ type Connection interface { // SendE2E is a wrapper for sending specifically to the Connection's // partner.Manager SendE2E(mt catalog.MessageType, payload []byte, params clientE2e.Params) ( - clientE2e.SendReport, error) + cryptoE2e.SendReport, error) // RegisterListener is used for E2E reception // and allows for reading data sent from the partner.Manager @@ -219,9 +220,9 @@ func (h *handler) GetPartner() partner.Manager { // SendE2E is a wrapper for sending specifically to the Connection's // partner.Manager. func (h *handler) SendE2E(mt catalog.MessageType, payload []byte, - params clientE2e.Params) (clientE2e.SendReport, error) { + params clientE2e.Params) (cryptoE2e.SendReport, error) { if h.isClosed() { - return clientE2e.SendReport{}, alreadyClosedErr + return cryptoE2e.SendReport{}, alreadyClosedErr } h.updateLastUse(netTime.Now()) diff --git a/connect/utils_test.go b/connect/utils_test.go index f94541927..7fc60f539 100644 --- a/connect/utils_test.go +++ b/connect/utils_test.go @@ -16,6 +16,7 @@ import ( "gitlab.com/elixxir/comms/network" "gitlab.com/elixxir/crypto/contact" "gitlab.com/elixxir/crypto/cyclic" + cryptoE2e "gitlab.com/elixxir/crypto/e2e" "gitlab.com/elixxir/primitives/format" "gitlab.com/xx_network/comms/connect" "gitlab.com/xx_network/crypto/large" @@ -114,7 +115,7 @@ func (m *mockConnection) Close() error { func (m *mockConnection) GetPartner() partner.Manager { return m.partner } func (m *mockConnection) SendE2E( - mt catalog.MessageType, payload []byte, _ e2e.Params) (e2e.SendReport, error) { + mt catalog.MessageType, payload []byte, _ e2e.Params) (cryptoE2e.SendReport, error) { m.payloadChan <- payload m.listener.Hear(receive.Message{ MessageType: mt, @@ -122,7 +123,7 @@ func (m *mockConnection) SendE2E( Sender: m.partner.myID, RecipientID: m.partner.partnerId, }) - return e2e.SendReport{}, nil + return cryptoE2e.SendReport{}, nil } func (m *mockConnection) RegisterListener( diff --git a/e2e/critical.go b/e2e/critical.go index 95c4af3fb..cc5a1ee92 100644 --- a/e2e/critical.go +++ b/e2e/critical.go @@ -1,6 +1,7 @@ package e2e import ( + "gitlab.com/elixxir/crypto/e2e" "time" jww "github.com/spf13/jwalterweatherman" @@ -28,7 +29,7 @@ type roundEventRegistrar interface { // anonymous function to include the structures from manager that critical is // not aware of. type criticalSender func(mt catalog.MessageType, recipient *id.ID, - payload []byte, params Params) (SendReport, error) + payload []byte, params Params) (e2e.SendReport, error) // critical is a structure that allows the auto resending of messages that must // be received. diff --git a/e2e/interface.go b/e2e/interface.go index 138dbf9eb..db4d4a590 100644 --- a/e2e/interface.go +++ b/e2e/interface.go @@ -2,6 +2,7 @@ package e2e import ( "gitlab.com/elixxir/client/cmix/rounds" + "gitlab.com/elixxir/crypto/e2e" "time" "github.com/cloudflare/circl/dh/sidh" @@ -34,7 +35,7 @@ type Handler interface { // Will return an error if the network is not healthy or in // the event of a failed send SendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte, - params Params) (SendReport, error) + params Params) (e2e.SendReport, error) /* === Reception ==================================================== */ diff --git a/e2e/manager.go b/e2e/manager.go index a426e9ead..9fc1b4b3d 100644 --- a/e2e/manager.go +++ b/e2e/manager.go @@ -5,6 +5,7 @@ import ( "encoding/base64" "encoding/json" jww "github.com/spf13/jwalterweatherman" + "gitlab.com/elixxir/crypto/e2e" "sync" "gitlab.com/xx_network/primitives/netTime" @@ -211,7 +212,7 @@ func (m *manager) StartProcesses() (stoppable.Stoppable, error) { rekeySendFunc := func(mt catalog.MessageType, recipient *id.ID, payload []byte, - cmixParams cmix.CMIXParams) (SendReport, error) { + cmixParams cmix.CMIXParams) (e2e.SendReport, error) { // FIXME: we should have access to the e2e params here... par := GetDefaultParams() par.CMIXParams = cmixParams diff --git a/e2e/rekey/exchange.go b/e2e/rekey/exchange.go index 4ffbad5ca..cd5f553ef 100644 --- a/e2e/rekey/exchange.go +++ b/e2e/rekey/exchange.go @@ -10,11 +10,11 @@ package rekey import ( "gitlab.com/elixxir/client/catalog" "gitlab.com/elixxir/client/cmix" - "gitlab.com/elixxir/client/e2e" "gitlab.com/elixxir/client/e2e/ratchet" "gitlab.com/elixxir/client/e2e/receive" "gitlab.com/elixxir/client/stoppable" "gitlab.com/elixxir/crypto/cyclic" + "gitlab.com/elixxir/crypto/e2e" "gitlab.com/xx_network/primitives/id" ) diff --git a/e2e/rekey/utils_test.go b/e2e/rekey/utils_test.go index dac9236a7..4f040f4d7 100644 --- a/e2e/rekey/utils_test.go +++ b/e2e/rekey/utils_test.go @@ -8,7 +8,7 @@ package rekey import ( - e2e2 "gitlab.com/elixxir/client/e2e" + "gitlab.com/elixxir/crypto/e2e" "math/rand" "testing" "time" @@ -74,7 +74,7 @@ func genSidhKeys() (*sidh.PrivateKey, *sidh.PublicKey, *sidh.PrivateKey, *sidh.P func testSendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte, cmixParams cmix.CMIXParams) ( - e2e2.SendReport, error) { + e2e.SendReport, error) { rounds := []id.Round{id.Round(0), id.Round(1), id.Round(2)} alicePartner, err := r.GetPartner(aliceID) if err != nil { @@ -110,7 +110,7 @@ func testSendE2E(mt catalog.MessageType, recipient *id.ID, bobSwitchboard.Speak(confirmMessage) - return e2e2.SendReport{ + return e2e.SendReport{ RoundList: rounds, }, nil } diff --git a/e2e/sendE2E.go b/e2e/sendE2E.go index fbe407013..1ff21404d 100644 --- a/e2e/sendE2E.go +++ b/e2e/sendE2E.go @@ -19,28 +19,11 @@ import ( "gitlab.com/xx_network/primitives/netTime" ) -type SendReport struct { - // RoundList is the list of rounds which the message payload - // is sent. - RoundList []id.Round - - // MessageId is the ID of the message sent. - MessageId e2e.MessageID - - // SentTime is the time in which the message was sent. - // More specifically it is when SendE2e is called. - SentTime time.Time - - // KeyResidue is the residue of the key used for the first partition of the - // message payload. The residue is a hash of the key and a salt. - KeyResidue e2e.KeyResidue -} - func (m *manager) SendE2E(mt catalog.MessageType, recipient *id.ID, - payload []byte, params Params) (SendReport, error) { + payload []byte, params Params) (e2e.SendReport, error) { if !m.net.IsHealthy() { - return SendReport{}, + return e2e.SendReport{}, errors.New("cannot sendE2E when network is not healthy") } @@ -63,7 +46,7 @@ func (m *manager) SendE2E(mt catalog.MessageType, recipient *id.ID, // sendE2eFn contains a prepared sendE2E operation and sends an E2E message when // called, returning the results of the send. -type sendE2eFn func() (SendReport, error) +type sendE2eFn func() (e2e.SendReport, error) // prepareSendE2E makes a prepared function that does the e2e send. // This is so that when doing deletePartner we can prepare the send before @@ -108,7 +91,7 @@ func (m *manager) prepareSendE2E(mt catalog.MessageType, recipient *id.ID, if mt != catalog.KeyExchangeTrigger { // Check if any rekeys need to happen and trigger them rekeySendFunc := func(mt catalog.MessageType, recipient *id.ID, - payload []byte, cmixParams cmix.CMIXParams) (SendReport, error) { + payload []byte, cmixParams cmix.CMIXParams) (e2e.SendReport, error) { par := params par.CMIXParams = cmixParams return m.SendE2E(mt, recipient, payload, par) @@ -171,7 +154,7 @@ func (m *manager) prepareSendE2E(mt catalog.MessageType, recipient *id.ID, sendFuncs = append(sendFuncs, thisSendFunc) } - sendE2E = func() (SendReport, error) { + sendE2E = func() (e2e.SendReport, error) { for i := range sendFuncs { sendFuncs[i]() } @@ -182,7 +165,7 @@ func (m *manager) prepareSendE2E(mt catalog.MessageType, recipient *id.ID, if numFail > 0 { jww.INFO.Printf("Failed to E2E send %d/%d to %s", numFail, len(partitions), recipient) - return SendReport{}, errors.Errorf( + return e2e.SendReport{}, errors.Errorf( "Failed to E2E send %v/%v sub payloads: %s", numFail, len(partitions), errRtn) } else { @@ -193,7 +176,7 @@ func (m *manager) prepareSendE2E(mt catalog.MessageType, recipient *id.ID, jww.INFO.Printf("Successful E2E Send of %d messages to %s with msgID %s", len(partitions), recipient, msgID) - return SendReport{ + return e2e.SendReport{ RoundList: roundIds, MessageId: msgID, SentTime: ts, @@ -204,10 +187,10 @@ func (m *manager) prepareSendE2E(mt catalog.MessageType, recipient *id.ID, } func (m *manager) sendE2E(mt catalog.MessageType, recipient *id.ID, - payload []byte, params Params) (SendReport, error) { + payload []byte, params Params) (e2e.SendReport, error) { sendFunc, err := m.prepareSendE2E(mt, recipient, payload, params) if err != nil { - return SendReport{}, err + return e2e.SendReport{}, err } return sendFunc() } diff --git a/fileTransfer/connect/utils_test.go b/fileTransfer/connect/utils_test.go index 927a70efb..400b5288f 100644 --- a/fileTransfer/connect/utils_test.go +++ b/fileTransfer/connect/utils_test.go @@ -26,6 +26,7 @@ import ( "gitlab.com/elixxir/client/xxdk" "gitlab.com/elixxir/comms/network" "gitlab.com/elixxir/crypto/cyclic" + cryptoE2e "gitlab.com/elixxir/crypto/e2e" "gitlab.com/elixxir/crypto/fastRNG" "gitlab.com/elixxir/ekv" "gitlab.com/elixxir/primitives/format" @@ -266,7 +267,7 @@ func (m *mockConnection) GetPartner() partner.Manager { // SendE2E adds the message to the e2e handler map. func (m *mockConnection) SendE2E(mt catalog.MessageType, payload []byte, - _ e2e.Params) (e2e.SendReport, error) { + _ e2e.Params) (cryptoE2e.SendReport, error) { m.handler.Lock() defer m.handler.Unlock() @@ -276,7 +277,7 @@ func (m *mockConnection) SendE2E(mt catalog.MessageType, payload []byte, Sender: m.myID, }) - return e2e.SendReport{RoundList: []id.Round{42}}, nil + return cryptoE2e.SendReport{RoundList: []id.Round{42}}, nil } func (m *mockConnection) RegisterListener(mt catalog.MessageType, diff --git a/fileTransfer/connect/wrapper.go b/fileTransfer/connect/wrapper.go index 2b0163aa7..0d826daec 100644 --- a/fileTransfer/connect/wrapper.go +++ b/fileTransfer/connect/wrapper.go @@ -13,6 +13,7 @@ import ( "gitlab.com/elixxir/client/e2e/ratchet/partner" "gitlab.com/elixxir/client/e2e/receive" ft "gitlab.com/elixxir/client/fileTransfer" + cryptoE2e "gitlab.com/elixxir/crypto/e2e" ftCrypto "gitlab.com/elixxir/crypto/fileTransfer" "time" ) @@ -39,7 +40,7 @@ type Wrapper struct { type connection interface { GetPartner() partner.Manager SendE2E(mt catalog.MessageType, payload []byte, params e2e.Params) ( - e2e.SendReport, error) + cryptoE2e.SendReport, error) RegisterListener(messageType catalog.MessageType, newListener receive.Listener) (receive.ListenerID, error) } diff --git a/fileTransfer/e2e/utils_test.go b/fileTransfer/e2e/utils_test.go index 34265f35e..a185a84aa 100644 --- a/fileTransfer/e2e/utils_test.go +++ b/fileTransfer/e2e/utils_test.go @@ -28,6 +28,7 @@ import ( "gitlab.com/elixxir/client/xxdk" "gitlab.com/elixxir/comms/network" "gitlab.com/elixxir/crypto/cyclic" + cryptoE2e "gitlab.com/elixxir/crypto/e2e" "gitlab.com/elixxir/crypto/fastRNG" "gitlab.com/elixxir/ekv" "gitlab.com/elixxir/primitives/format" @@ -257,7 +258,7 @@ func (m *mockE2e) StartProcesses() (stoppable.Stoppable, error) { panic("impleme // SendE2E adds the message to the e2e handler map. func (m *mockE2e) SendE2E(mt catalog.MessageType, recipient *id.ID, - payload []byte, _ e2e.Params) (e2e.SendReport, error) { + payload []byte, _ e2e.Params) (cryptoE2e.SendReport, error) { m.handler.listeners[mt].Hear(receive.Message{ MessageType: mt, @@ -266,7 +267,7 @@ func (m *mockE2e) SendE2E(mt catalog.MessageType, recipient *id.ID, RecipientID: recipient, }) - return e2e.SendReport{RoundList: []id.Round{42}}, nil + return cryptoE2e.SendReport{RoundList: []id.Round{42}}, nil } func (m *mockE2e) RegisterListener(_ *id.ID, mt catalog.MessageType, diff --git a/fileTransfer/e2e/wrapper.go b/fileTransfer/e2e/wrapper.go index ffb90b2b4..de212b0ca 100644 --- a/fileTransfer/e2e/wrapper.go +++ b/fileTransfer/e2e/wrapper.go @@ -12,6 +12,7 @@ import ( "gitlab.com/elixxir/client/e2e" "gitlab.com/elixxir/client/e2e/receive" ft "gitlab.com/elixxir/client/fileTransfer" + cryptoE2e "gitlab.com/elixxir/crypto/e2e" ftCrypto "gitlab.com/elixxir/crypto/fileTransfer" "gitlab.com/xx_network/primitives/id" "time" @@ -38,7 +39,7 @@ type Wrapper struct { // for easier testing. type e2eHandler interface { SendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte, - params e2e.Params) (e2e.SendReport, error) + params e2e.Params) (cryptoE2e.SendReport, error) RegisterListener(senderID *id.ID, messageType catalog.MessageType, newListener receive.Listener) receive.ListenerID } diff --git a/go.mod b/go.mod index f8abc624c..23b51ee34 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/spf13/viper v1.12.0 gitlab.com/elixxir/bloomfilter v0.0.0-20211222005329-7d931ceead6f gitlab.com/elixxir/comms v0.0.4-0.20220603231314-e47e4af13326 - gitlab.com/elixxir/crypto v0.0.7-0.20220823235814-7f7036f95acb + gitlab.com/elixxir/crypto v0.0.7-0.20220826192201-c00efec3c556 gitlab.com/elixxir/ekv v0.1.7 gitlab.com/elixxir/primitives v0.0.3-0.20220606195757-40f7a589347f gitlab.com/xx_network/comms v0.0.4-0.20220630163702-f3d372ef6acd diff --git a/go.sum b/go.sum index 9925d78e0..e67a58bdc 100644 --- a/go.sum +++ b/go.sum @@ -446,6 +446,8 @@ gitlab.com/elixxir/crypto v0.0.7-0.20220822180822-5e1b688a9500 h1:KI+7GoG2/9x/J5 gitlab.com/elixxir/crypto v0.0.7-0.20220822180822-5e1b688a9500/go.mod h1:0gH41Kb/a9Akdv+2+vMJVdx+REVwR8CZXTr2+BrgeeA= gitlab.com/elixxir/crypto v0.0.7-0.20220823235814-7f7036f95acb h1:J5/yaBi7ZucSLIVHUanxgV6FKT/yDzF5I4TQYZsQqIQ= gitlab.com/elixxir/crypto v0.0.7-0.20220823235814-7f7036f95acb/go.mod h1:0gH41Kb/a9Akdv+2+vMJVdx+REVwR8CZXTr2+BrgeeA= +gitlab.com/elixxir/crypto v0.0.7-0.20220826192201-c00efec3c556 h1:8ExJNUdf8JvGpfQH5Ch+Zk+sc9YJ2pLExO/ZKnGo11w= +gitlab.com/elixxir/crypto v0.0.7-0.20220826192201-c00efec3c556/go.mod h1:0gH41Kb/a9Akdv+2+vMJVdx+REVwR8CZXTr2+BrgeeA= gitlab.com/elixxir/ekv v0.1.7 h1:OW2z+N4QCqqMFzouAwFTWWMKz0Y/PDhyYReN7gQ5NiQ= gitlab.com/elixxir/ekv v0.1.7/go.mod h1:e6WPUt97taFZe5PFLPb1Dupk7tqmDCTQu1kkstqJvw4= gitlab.com/elixxir/primitives v0.0.0-20200731184040-494269b53b4d/go.mod h1:OQgUZq7SjnE0b+8+iIAT2eqQF+2IFHn73tOo+aV11mg= diff --git a/groupChat/e2eManager_test.go b/groupChat/e2eManager_test.go index 19775d9f9..1c4a777d1 100644 --- a/groupChat/e2eManager_test.go +++ b/groupChat/e2eManager_test.go @@ -11,6 +11,7 @@ import ( "gitlab.com/elixxir/client/e2e/receive" "gitlab.com/elixxir/client/stoppable" "gitlab.com/elixxir/crypto/cyclic" + cryptoE2e "gitlab.com/elixxir/crypto/e2e" "gitlab.com/xx_network/primitives/id" "sync" "testing" @@ -64,15 +65,15 @@ func (tnm *testE2eManager) GetE2eMsg(i int) testE2eMessage { } func (tnm *testE2eManager) SendE2E(_ catalog.MessageType, recipient *id.ID, - payload []byte, _ clientE2E.Params) (clientE2E.SendReport, error) { + payload []byte, _ clientE2E.Params) (cryptoE2e.SendReport, error) { tnm.Lock() defer tnm.Unlock() tnm.errSkip++ if tnm.sendErr == 1 { - return clientE2E.SendReport{}, errors.New("SendE2E error") + return cryptoE2e.SendReport{}, errors.New("SendE2E error") } else if tnm.sendErr == 2 && tnm.errSkip%2 == 0 { - return clientE2E.SendReport{}, errors.New("SendE2E error") + return cryptoE2e.SendReport{}, errors.New("SendE2E error") } tnm.e2eMessages = append(tnm.e2eMessages, testE2eMessage{ @@ -80,7 +81,7 @@ func (tnm *testE2eManager) SendE2E(_ catalog.MessageType, recipient *id.ID, Payload: payload, }) - return clientE2E.SendReport{RoundList: []id.Round{0, 1, 2, 3}}, nil + return cryptoE2e.SendReport{RoundList: []id.Round{0, 1, 2, 3}}, nil } func (*testE2eManager) RegisterListener(*id.ID, catalog.MessageType, receive.Listener) receive.ListenerID { diff --git a/groupChat/interface.go b/groupChat/interface.go index bf0469ccd..d670a565c 100644 --- a/groupChat/interface.go +++ b/groupChat/interface.go @@ -32,6 +32,7 @@ import ( "gitlab.com/elixxir/client/storage" "gitlab.com/elixxir/client/xxdk" "gitlab.com/elixxir/crypto/cyclic" + cryptoE2e "gitlab.com/elixxir/crypto/e2e" "gitlab.com/elixxir/crypto/fastRNG" "gitlab.com/elixxir/crypto/group" "gitlab.com/xx_network/primitives/id" @@ -125,7 +126,7 @@ type groupCmix interface { // needed by GroupChat type groupE2eHandler interface { SendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte, - params e2e.Params) (e2e.SendReport, error) + params e2e.Params) (cryptoE2e.SendReport, error) RegisterListener(senderID *id.ID, messageType catalog.MessageType, newListener receive.Listener) receive.ListenerID AddService(tag string, processor message.Processor) error diff --git a/ud/mockE2e_test.go b/ud/mockE2e_test.go index 86a880401..bcdf30e75 100644 --- a/ud/mockE2e_test.go +++ b/ud/mockE2e_test.go @@ -15,6 +15,7 @@ import ( "gitlab.com/elixxir/client/storage/versioned" "gitlab.com/elixxir/client/xxdk" "gitlab.com/elixxir/crypto/cyclic" + cryptoE2e "gitlab.com/elixxir/crypto/e2e" "gitlab.com/elixxir/crypto/fastRNG" "gitlab.com/xx_network/crypto/csprng" "gitlab.com/xx_network/crypto/signature/rsa" @@ -108,7 +109,7 @@ func (m mockE2eHandler) StartProcesses() (stoppable.Stoppable, error) { panic("implement me") } -func (m mockE2eHandler) SendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte, params e2e.Params) (e2e.SendReport, error) { +func (m mockE2eHandler) SendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte, params e2e.Params) (cryptoE2e.SendReport, error) { //TODO implement me panic("implement me") } -- GitLab