From 7bd24eda3ae89356d1caea6f3f2b34a9487c0172 Mon Sep 17 00:00:00 2001 From: "Richard T. Carback III" <rick.carback@gmail.com> Date: Tue, 26 Apr 2022 01:55:35 +0000 Subject: [PATCH] Don't replay sent requests on a reset --- auth/receivedConfirm.go | 4 ++-- auth/receivedRequest.go | 4 ++++ auth/request.go | 10 +++++++++- auth/state.go | 6 +++--- auth/store/store.go | 20 +++++++++++--------- 5 files changed, 29 insertions(+), 15 deletions(-) diff --git a/auth/receivedConfirm.go b/auth/receivedConfirm.go index 202085d34..c4b5a7e81 100644 --- a/auth/receivedConfirm.go +++ b/auth/receivedConfirm.go @@ -50,8 +50,8 @@ func (rcs *receivedConfirmService) Process(msg format.Message, baseFmt.GetEcrPayload(), msg.GetMac(), state.e2e.GetGroup()) if !success { - em := fmt.Sprintf("Received auth confirmation failed its mac " + - "check") + em := fmt.Sprintf("Received auth confirmation " + + "failed its mac check") jww.WARN.Print(em) state.event.Report(10, "Auth", "ConfirmError", em) return diff --git a/auth/receivedRequest.go b/auth/receivedRequest.go index 7b033cc2c..22a94b064 100644 --- a/auth/receivedRequest.go +++ b/auth/receivedRequest.go @@ -149,6 +149,10 @@ func (rrs *receivedRequestService) Process(message format.Message, // new request reset := false if rrs.reset { + jww.INFO.Printf("AuthRequest ResetSession from %s,"+ + " msgDigest: %s, FP: %s", partnerID, + format.DigestContents(message.GetContents()), + base64.StdEncoding.EncodeToString(fp)) // delete only deletes if the partner is present, so we can just call delete // instead of checking if it exists and then calling delete, and check the // error to see if it did or didnt exist diff --git a/auth/request.go b/auth/request.go index 8a064c1fe..9c0dc2e4d 100644 --- a/auth/request.go +++ b/auth/request.go @@ -86,6 +86,10 @@ func (s *state) request(partner contact.Contact, myfacts fact.FactList, } else { jww.INFO.Printf("Resending request to %s from %s as "+ "one was already sent", partner.ID, me) + dhPriv = sr.GetMyPrivKey() + dhPub = sr.GetMyPubKey() + //sidhPriv = sr.GetMySIDHPrivKey() + sidhPub = sr.GetMySIDHPubKey() } } @@ -114,9 +118,13 @@ func (s *state) request(partner contact.Contact, myfacts fact.FactList, p := cmix.GetDefaultCMIXParams() p.DebugTag = "auth.Request" + tag := s.params.RequestTag + if reset { + tag = s.params.ResetRequestTag + } svc := message.Service{ Identifier: partner.ID.Marshal(), - Tag: s.params.RequestTag, + Tag: tag, Metadata: nil, } round, _, err := s.net.Send(partner.ID, requestfp, svc, contents, mac, p) diff --git a/auth/state.go b/auth/state.go index a3e3d59df..2be3d4d6b 100644 --- a/auth/state.go +++ b/auth/state.go @@ -77,11 +77,11 @@ type e2eHandler interface { } type Callbacks interface { - Request(requestor contact.Contact, receptionID receptionID.EphemeralIdentity, + Request(partner contact.Contact, receptionID receptionID.EphemeralIdentity, round rounds.Round) - Confirm(requestor contact.Contact, receptionID receptionID.EphemeralIdentity, + Confirm(partner contact.Contact, receptionID receptionID.EphemeralIdentity, round rounds.Round) - Reset(requestor contact.Contact, receptionID receptionID.EphemeralIdentity, + Reset(partner contact.Contact, receptionID receptionID.EphemeralIdentity, round rounds.Round) } diff --git a/auth/store/store.go b/auth/store/store.go index 241a090ef..d38510933 100644 --- a/auth/store/store.go +++ b/auth/store/store.go @@ -181,15 +181,17 @@ func (s *Store) AddSent(partner *id.ID, partnerHistoricalPubKey, myPrivKey, s.mux.Lock() defer s.mux.Unlock() - if sentRq, ok := s.sentByID[*partner]; ok { - return sentRq, errors.Errorf("Cannot make new sentRequest "+ - "for partner %s, a sent request already exists", - partner) - } - if _, ok := s.receivedByID[*partner]; ok { - return nil, errors.Errorf("Cannot make new sentRequest for "+ - " partner %s, a received reqyest already exists", - partner) + if !reset { + if sentRq, ok := s.sentByID[*partner]; ok { + return sentRq, errors.Errorf("sent request "+ + "already exists for partner %s", + partner) + } + if _, ok := s.receivedByID[*partner]; ok { + return nil, errors.Errorf("received request "+ + "already exists for partner %s", + partner) + } } sr, err := newSentRequest(s.kv, partner, partnerHistoricalPubKey, -- GitLab