From a509277a3ebd732e8f617a56a5717813c302a82c Mon Sep 17 00:00:00 2001 From: joshemb <josh@elixxir.io> Date: Tue, 23 Aug 2022 17:18:27 -0700 Subject: [PATCH] Propoage SendE2e refactor across the stack --- auth/utils_test.go | 4 ++-- bindings/connect.go | 3 ++- bindings/e2eHandler.go | 5 ++++- cmd/connect.go | 2 +- cmd/root.go | 2 +- connect/authenticated.go | 2 +- connect/connect.go | 6 +++--- connect/utils_test.go | 4 ++-- fileTransfer/connect/send.go | 4 ++-- fileTransfer/connect/utils_test.go | 6 ++++-- fileTransfer/connect/wrapper.go | 2 +- fileTransfer/e2e/send.go | 4 ++-- fileTransfer/e2e/utils_test.go | 4 ++-- fileTransfer/e2e/wrapper.go | 3 ++- groupChat/e2eManager_test.go | 8 ++++---- groupChat/interface.go | 2 +- groupChat/sendRequests.go | 2 +- restlike/connect/receiver.go | 2 +- restlike/connect/request.go | 6 ++++-- ud/mockE2e_test.go | 2 +- 20 files changed, 41 insertions(+), 32 deletions(-) diff --git a/auth/utils_test.go b/auth/utils_test.go index 5f27a218e..0fd05d2ae 100644 --- a/auth/utils_test.go +++ b/auth/utils_test.go @@ -62,8 +62,8 @@ func (m mockE2eHandler) StartProcesses() (stoppable.Stoppable, error) { func (m mockE2eHandler) SendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte, params e2e.Params) ([]id.Round, cryptoE2e.MessageID, - time.Time, error) { - return nil, cryptoE2e.MessageID{}, time.Time{}, nil + time.Time, cryptoE2e.KeyResidue, error) { + return nil, cryptoE2e.MessageID{}, time.Time{}, cryptoE2e.KeyResidue{}, nil } func (m mockE2eHandler) RegisterListener(senderID *id.ID, diff --git a/bindings/connect.go b/bindings/connect.go index 912ee6ffa..75e1d7f40 100644 --- a/bindings/connect.go +++ b/bindings/connect.go @@ -85,7 +85,7 @@ func (c *Cmix) Connect(e2eId int, recipientContact, e2eParamsJSON []byte) ( // - []byte - the JSON marshalled bytes of the E2ESendReport object, which can // be passed into Cmix.WaitForRoundResult to see if the send succeeded. func (c *Connection) SendE2E(mt int, payload []byte) ([]byte, error) { - rounds, mid, ts, err := c.connection.SendE2E(catalog.MessageType(mt), payload, + rounds, mid, ts, keyResidue, err := c.connection.SendE2E(catalog.MessageType(mt), payload, c.params.Base) if err != nil { @@ -96,6 +96,7 @@ func (c *Connection) SendE2E(mt int, payload []byte) ([]byte, error) { RoundsList: makeRoundsList(rounds...), MessageID: mid.Marshal(), Timestamp: ts.UnixNano(), + KeyResidue: keyResidue, } return json.Marshal(&sr) diff --git a/bindings/e2eHandler.go b/bindings/e2eHandler.go index b71d6646d..a80e23e08 100644 --- a/bindings/e2eHandler.go +++ b/bindings/e2eHandler.go @@ -33,6 +33,8 @@ type E2ESendReport struct { RoundsList MessageID []byte Timestamp int64 + // todo: make marshal function + KeyResidue []byte } // GetReceptionID returns the marshalled default IDs. @@ -133,7 +135,7 @@ func (e *E2e) SendE2E(messageType int, recipientId, payload, return nil, err } - roundIds, messageId, ts, err := e.api.GetE2E().SendE2E( + roundIds, messageId, ts, keyResidue, err := e.api.GetE2E().SendE2E( catalog.MessageType(messageType), recipient, payload, params) if err != nil { return nil, err @@ -143,6 +145,7 @@ func (e *E2e) SendE2E(messageType int, recipientId, payload, RoundsList: makeRoundsList(roundIds...), MessageID: messageId.Marshal(), Timestamp: ts.UnixNano(), + KeyResidue: keyResidue, } return json.Marshal(result) } diff --git a/cmd/connect.go b/cmd/connect.go index e8697dc60..bb1e9ff17 100644 --- a/cmd/connect.go +++ b/cmd/connect.go @@ -486,7 +486,7 @@ func miscConnectionFunctions(user *xxdk.E2e, conn connect.Connection) { conn.GetPartner().PartnerId()) payload := []byte(msgBody) for { - roundIDs, _, _, err := conn.SendE2E(catalog.XxMessage, payload, + roundIDs, _, _, _, err := conn.SendE2E(catalog.XxMessage, payload, paramsE2E) if err != nil { jww.FATAL.Panicf("[CONN] Failed to send E2E message: %v", err) diff --git a/cmd/root.go b/cmd/root.go index 837b68e1a..6fe4ee778 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -288,7 +288,7 @@ var rootCmd = &cobra.Command{ e2eParams.Base) } else { e2eParams.Base.DebugTag = "cmd.E2E" - roundIDs, _, _, err = user.GetE2E().SendE2E(mt, + roundIDs, _, _, _, err = user.GetE2E().SendE2E(mt, recipient, payload, e2eParams.Base) } if err != nil { diff --git a/connect/authenticated.go b/connect/authenticated.go index c45489fbc..de3d9e656 100644 --- a/connect/authenticated.go +++ b/connect/authenticated.go @@ -98,7 +98,7 @@ func connectWithAuthentication(conn Connection, timeStart time.Time, } // Send message to server - rids, _, _, err := conn.SendE2E(catalog.ConnectionAuthenticationRequest, + rids, _, _, _, err := conn.SendE2E(catalog.ConnectionAuthenticationRequest, payload, clientE2e.GetDefaultParams()) if err != nil { // Close connection on an error diff --git a/connect/connect.go b/connect/connect.go index ba87dc918..8c20cf569 100644 --- a/connect/connect.go +++ b/connect/connect.go @@ -43,7 +43,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) ( - []id.Round, e2e.MessageID, time.Time, error) + []id.Round, e2e.MessageID, time.Time, e2e.KeyResidue, error) // RegisterListener is used for E2E reception // and allows for reading data sent from the partner.Manager @@ -221,9 +221,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) ([]id.Round, e2e.MessageID, time.Time, error) { + params clientE2e.Params) ([]id.Round, e2e.MessageID, time.Time, e2e.KeyResidue, error) { if h.isClosed() { - return nil, e2e.MessageID{}, time.Time{}, alreadyClosedErr + return nil, e2e.MessageID{}, time.Time{}, e2e.KeyResidue{}, alreadyClosedErr } h.updateLastUse(netTime.Now()) diff --git a/connect/utils_test.go b/connect/utils_test.go index 6e4be5173..4414b2e8b 100644 --- a/connect/utils_test.go +++ b/connect/utils_test.go @@ -116,7 +116,7 @@ func (m *mockConnection) GetPartner() partner.Manager { return m.partner } func (m *mockConnection) SendE2E( mt catalog.MessageType, payload []byte, _ e2e.Params) ( - []id.Round, cryptoE2e.MessageID, time.Time, error) { + []id.Round, cryptoE2e.MessageID, time.Time, cryptoE2e.KeyResidue, error) { m.payloadChan <- payload m.listener.Hear(receive.Message{ MessageType: mt, @@ -124,7 +124,7 @@ func (m *mockConnection) SendE2E( Sender: m.partner.myID, RecipientID: m.partner.partnerId, }) - return nil, cryptoE2e.MessageID{}, time.Time{}, nil + return nil, cryptoE2e.MessageID{}, time.Time{}, cryptoE2e.KeyResidue{}, nil } func (m *mockConnection) RegisterListener( diff --git a/fileTransfer/connect/send.go b/fileTransfer/connect/send.go index 2b00c8ba7..91dcfb675 100644 --- a/fileTransfer/connect/send.go +++ b/fileTransfer/connect/send.go @@ -45,7 +45,7 @@ func sendNewFileTransferMessage( params.LastServiceTag = catalog.Silent params.DebugTag = initialMessageDebugTag - _, _, _, err := connectionHandler.SendE2E( + _, _, _, _, err := connectionHandler.SendE2E( catalog.NewFileTransfer, transferInfo, params) if err != nil { return errors.Errorf(errNewFtSendE2e, err) @@ -65,7 +65,7 @@ func sendEndFileTransferMessage(cmix ft.Cmix, connectionHandler connection) { params.LastServiceTag = catalog.EndFT params.DebugTag = lastMessageDebugTag - _, _, _, err := connectionHandler.SendE2E( + _, _, _, _, err := connectionHandler.SendE2E( catalog.EndFileTransfer, nil, params) if err != nil { jww.ERROR.Printf(errEndFtSendE2e, err) diff --git a/fileTransfer/connect/utils_test.go b/fileTransfer/connect/utils_test.go index 7d0fb6aeb..af9990b9c 100644 --- a/fileTransfer/connect/utils_test.go +++ b/fileTransfer/connect/utils_test.go @@ -268,7 +268,8 @@ 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) ([]id.Round, e2eCrypto.MessageID, time.Time, error) { + _ e2e.Params) ([]id.Round, e2eCrypto.MessageID, time.Time, + e2eCrypto.KeyResidue, error) { m.handler.Lock() defer m.handler.Unlock() @@ -278,7 +279,8 @@ func (m *mockConnection) SendE2E(mt catalog.MessageType, payload []byte, Sender: m.myID, }) - return []id.Round{42}, e2eCrypto.MessageID{}, netTime.Now(), nil + return []id.Round{42}, e2eCrypto.MessageID{}, netTime.Now(), + e2eCrypto.KeyResidue{}, nil } func (m *mockConnection) RegisterListener(mt catalog.MessageType, diff --git a/fileTransfer/connect/wrapper.go b/fileTransfer/connect/wrapper.go index 60a3f6641..b0943f5eb 100644 --- a/fileTransfer/connect/wrapper.go +++ b/fileTransfer/connect/wrapper.go @@ -41,7 +41,7 @@ type Wrapper struct { type connection interface { GetPartner() partner.Manager SendE2E(mt catalog.MessageType, payload []byte, params e2e.Params) ( - []id.Round, e2eCrypto.MessageID, time.Time, error) + []id.Round, e2eCrypto.MessageID, time.Time, e2eCrypto.KeyResidue, error) RegisterListener(messageType catalog.MessageType, newListener receive.Listener) (receive.ListenerID, error) } diff --git a/fileTransfer/e2e/send.go b/fileTransfer/e2e/send.go index a073d0afe..017313dc2 100644 --- a/fileTransfer/e2e/send.go +++ b/fileTransfer/e2e/send.go @@ -46,7 +46,7 @@ func sendNewFileTransferMessage( params.LastServiceTag = catalog.Silent params.DebugTag = initialMessageDebugTag - _, _, _, err := e2eHandler.SendE2E( + _, _, _, _, err := e2eHandler.SendE2E( catalog.NewFileTransfer, recipient, transferInfo, params) if err != nil { return errors.Errorf(errNewFtSendE2e, err) @@ -66,7 +66,7 @@ func sendEndFileTransferMessage(recipient *id.ID, cmix ft.Cmix, e2eHandler e2eHa params.LastServiceTag = catalog.EndFT params.DebugTag = lastMessageDebugTag - _, _, _, err := e2eHandler.SendE2E( + _, _, _, _, err := e2eHandler.SendE2E( catalog.EndFileTransfer, recipient, nil, params) if err != nil { jww.ERROR.Printf(errEndFtSendE2e, err) diff --git a/fileTransfer/e2e/utils_test.go b/fileTransfer/e2e/utils_test.go index 164d15574..c2ecdd01a 100644 --- a/fileTransfer/e2e/utils_test.go +++ b/fileTransfer/e2e/utils_test.go @@ -259,7 +259,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) ([]id.Round, e.MessageID, time.Time, error) { + payload []byte, _ e2e.Params) ([]id.Round, e.MessageID, time.Time, e.KeyResidue, error) { m.handler.listeners[mt].Hear(receive.Message{ MessageType: mt, @@ -268,7 +268,7 @@ func (m *mockE2e) SendE2E(mt catalog.MessageType, recipient *id.ID, RecipientID: recipient, }) - return []id.Round{42}, e.MessageID{}, netTime.Now(), nil + return []id.Round{42}, e.MessageID{}, netTime.Now(), e.KeyResidue{}, nil } func (m *mockE2e) RegisterListener(_ *id.ID, mt catalog.MessageType, diff --git a/fileTransfer/e2e/wrapper.go b/fileTransfer/e2e/wrapper.go index e27c281c9..12b44091b 100644 --- a/fileTransfer/e2e/wrapper.go +++ b/fileTransfer/e2e/wrapper.go @@ -39,7 +39,8 @@ type Wrapper struct { // for easier testing. type e2eHandler interface { SendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte, - params e2e.Params) ([]id.Round, e2eCrypto.MessageID, time.Time, error) + params e2e.Params) ([]id.Round, e2eCrypto.MessageID, time.Time, + e2eCrypto.KeyResidue, error) RegisterListener(senderID *id.ID, messageType catalog.MessageType, newListener receive.Listener) receive.ListenerID } diff --git a/groupChat/e2eManager_test.go b/groupChat/e2eManager_test.go index 37e4019cb..7bee5fa08 100644 --- a/groupChat/e2eManager_test.go +++ b/groupChat/e2eManager_test.go @@ -66,15 +66,15 @@ func (tnm *testE2eManager) GetE2eMsg(i int) testE2eMessage { func (tnm *testE2eManager) SendE2E(_ catalog.MessageType, recipient *id.ID, payload []byte, _ clientE2E.Params) ([]id.Round, e2e.MessageID, time.Time, - error) { + e2e.KeyResidue, error) { tnm.Lock() defer tnm.Unlock() tnm.errSkip++ if tnm.sendErr == 1 { - return nil, e2e.MessageID{}, time.Time{}, errors.New("SendE2E error") + return nil, e2e.MessageID{}, time.Time{}, e2e.KeyResidue{}, errors.New("SendE2E error") } else if tnm.sendErr == 2 && tnm.errSkip%2 == 0 { - return nil, e2e.MessageID{}, time.Time{}, errors.New("SendE2E error") + return nil, e2e.MessageID{}, time.Time{}, e2e.KeyResidue{}, errors.New("SendE2E error") } tnm.e2eMessages = append(tnm.e2eMessages, testE2eMessage{ @@ -82,7 +82,7 @@ func (tnm *testE2eManager) SendE2E(_ catalog.MessageType, recipient *id.ID, Payload: payload, }) - return []id.Round{0, 1, 2, 3}, e2e.MessageID{}, time.Time{}, nil + return []id.Round{0, 1, 2, 3}, e2e.MessageID{}, time.Time{}, e2e.KeyResidue{}, nil } func (*testE2eManager) RegisterListener(*id.ID, catalog.MessageType, receive.Listener) receive.ListenerID { diff --git a/groupChat/interface.go b/groupChat/interface.go index 0355c9094..28d7f4e3a 100644 --- a/groupChat/interface.go +++ b/groupChat/interface.go @@ -126,7 +126,7 @@ type groupCmix interface { // needed by GroupChat type groupE2eHandler interface { SendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte, - params e2e.Params) ([]id.Round, crypto.MessageID, time.Time, error) + params e2e.Params) ([]id.Round, crypto.MessageID, time.Time, crypto.KeyResidue, error) RegisterListener(senderID *id.ID, messageType catalog.MessageType, newListener receive.Listener) receive.ListenerID AddService(tag string, processor message.Processor) error diff --git a/groupChat/sendRequests.go b/groupChat/sendRequests.go index b28985361..43648928b 100644 --- a/groupChat/sendRequests.go +++ b/groupChat/sendRequests.go @@ -120,7 +120,7 @@ func (m *manager) sendRequest(memberID *id.ID, request []byte) ([]id.Round, erro p.LastServiceTag = catalog.GroupRq p.DebugTag = "group.Request" - rounds, _, _, err := m.getE2eHandler().SendE2E( + rounds, _, _, _, err := m.getE2eHandler().SendE2E( catalog.GroupCreationRequest, memberID, request, p) if err != nil { return nil, errors.Errorf(sendE2eErr, memberID, err) diff --git a/restlike/connect/receiver.go b/restlike/connect/receiver.go index d6e87c574..051a91d3f 100644 --- a/restlike/connect/receiver.go +++ b/restlike/connect/receiver.go @@ -55,7 +55,7 @@ func respond(response *restlike.Message, conn connect.Connection) error { } // TODO: Parameterize params - _, _, _, err = conn.SendE2E(catalog.XxMessage, payload, e2e.GetDefaultParams()) + _, _, _, _, err = conn.SendE2E(catalog.XxMessage, payload, e2e.GetDefaultParams()) if err != nil { return errors.Errorf("unable to send restlike response message: %+v", err) } diff --git a/restlike/connect/request.go b/restlike/connect/request.go index 4ea32656a..7d0b435c0 100644 --- a/restlike/connect/request.go +++ b/restlike/connect/request.go @@ -49,7 +49,8 @@ func (s *Request) Request(method restlike.Method, path restlike.URI, s.Net.RegisterListener(catalog.XxMessage, &response{responseCallback: cb}) // Transmit the Message - _, _, _, err = s.Net.SendE2E(catalog.XxMessage, msg, e2eParams) + // fixme: should this use the key residue? + _, _, _, _, err = s.Net.SendE2E(catalog.XxMessage, msg, e2eParams) if err != nil { return nil, err } @@ -84,6 +85,7 @@ func (s *Request) AsyncRequest(method restlike.Method, path restlike.URI, s.Net.RegisterListener(catalog.XxMessage, &response{responseCallback: cb}) // Transmit the Message - _, _, _, err = s.Net.SendE2E(catalog.XxMessage, msg, e2eParams) + // fixme: should this use the key residue? + _, _, _, _, err = s.Net.SendE2E(catalog.XxMessage, msg, e2eParams) return err } diff --git a/ud/mockE2e_test.go b/ud/mockE2e_test.go index c57e148fe..33b1e543a 100644 --- a/ud/mockE2e_test.go +++ b/ud/mockE2e_test.go @@ -109,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) ([]id.Round, cryptoE2e.MessageID, time.Time, error) { +func (m mockE2eHandler) SendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte, params e2e.Params) ([]id.Round, cryptoE2e.MessageID, time.Time, cryptoE2e.KeyResidue, error) { //TODO implement me panic("implement me") } -- GitLab