diff --git a/api/client.go b/api/client.go index 03fd0b318e9da7c1b8b1bc10b198ac53d7478ffb..58189f738e062e604e9f5256f87414982032805f 100644 --- a/api/client.go +++ b/api/client.go @@ -976,6 +976,12 @@ func checkVersionAndSetupStorage(def *ndf.NetworkDefinition, Source: protoUser.ReceptionID[:], }, protoUser.ReceptionID) + storageSess.GetEdge().Add(edge.Preimage{ + Data: preimage.GenerateRequest(protoUser.ReceptionID), + Type: preimage.Reset, + Source: protoUser.ReceptionID[:], + }, protoUser.ReceptionID) + if err != nil { return nil, errors.WithMessage(err, "Failed to denote state "+ "change in session") diff --git a/auth/cmix.go b/auth/cmix.go index 0f76dd7efc1f757613c0cd43897afb851f4bd93a..9fceb57fb8a0a52912ce6ab2633397c80c8fc80d 100644 --- a/auth/cmix.go +++ b/auth/cmix.go @@ -34,7 +34,7 @@ func getMixPayloadSize(primeSize int) int { // is created. func sendAuthRequest(recipient *id.ID, contents, mac []byte, primeSize int, fingerprint format.Fingerprint, net interfaces.NetworkManager, - cMixParams params.CMIX) (id.Round, error) { + cMixParams params.CMIX, reset bool) (id.Round, error) { cmixMsg := format.NewMessage(primeSize) cmixMsg.SetKeyFP(fingerprint) cmixMsg.SetMac(mac) @@ -42,8 +42,12 @@ func sendAuthRequest(recipient *id.ID, contents, mac []byte, primeSize int, jww.INFO.Printf("Requesting Auth with %s, msgDigest: %s", recipient, cmixMsg.Digest()) + if reset { + cMixParams.IdentityPreimage = preimage.GenerateRequest(recipient) + } else { + cMixParams.IdentityPreimage = preimage.GenerateReset(recipient) + } - cMixParams.IdentityPreimage = preimage.GenerateRequest(recipient) cMixParams.DebugTag = "auth.Request" round, _, err := net.SendCMIX(cmixMsg, recipient, cMixParams) if err != nil { diff --git a/auth/request.go b/auth/request.go index c7c9e16d87536b918f6d498ec9104d0960bc0131..8f39fc9db835f30e41e51e6a6fe5db377aef666f 100644 --- a/auth/request.go +++ b/auth/request.go @@ -181,7 +181,7 @@ func requestAuth(partner, me contact.Contact, rng io.Reader, reset bool, cMixParams := params.GetDefaultCMIX() rndID, err := sendAuthRequest(partner.ID, contents, mac, cMixPrimeSize, - requestfp, net, cMixParams) + requestfp, net, cMixParams, reset) return rndID, err } diff --git a/bindings/notifications.go b/bindings/notifications.go index 7f393cf7271c253cf5e07771f9f570d89b69a3de..57972fbe45babeda42022a2cdd7751f0efc3c179 100644 --- a/bindings/notifications.go +++ b/bindings/notifications.go @@ -54,6 +54,7 @@ func (mnfmr *ManyNotificationForMeReport) Len() int { // TYPE SOURCE DESCRIPTION // "default" recipient user ID A message with no association // "request" sender user ID A channel request has been received +// "reset" sender user ID A channel reset has been received // "confirm" sender user ID A channel request has been accepted // "silent" sender user ID A message which should not be notified on // "e2e" sender user ID reception of an E2E message diff --git a/interfaces/preimage/generate.go b/interfaces/preimage/generate.go index 84798d696a8b2311e6e89b01f64c885eb6c2d5b8..28e8a2fc48a528205e7f3cf05377474cb58552b5 100644 --- a/interfaces/preimage/generate.go +++ b/interfaces/preimage/generate.go @@ -28,3 +28,13 @@ func GenerateRequest(recipient *id.ID) []byte { // Base 64 encode hash and truncate return h.Sum(nil) } + +func GenerateReset(recipient *id.ID) []byte { + // Hash fingerprints + h, _ := blake2b.New256(nil) + h.Write(recipient[:]) + h.Write([]byte(Reset)) + + // Base 64 encode hash and truncate + return h.Sum(nil) +} diff --git a/interfaces/preimage/types.go b/interfaces/preimage/types.go index bd6226e623594561ef0338210af8824c1b789f27..7067c87a538f10aea3e778c255146c27277c418d 100644 --- a/interfaces/preimage/types.go +++ b/interfaces/preimage/types.go @@ -3,6 +3,7 @@ package preimage const ( Default = "default" Request = "request" + Reset = "reset" Confirm = "confirm" Silent = "silent" E2e = "e2e"