From 812c3605c1a4cb06df8b8d7a5aa7c0d3c756319e Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Tue, 1 Mar 2022 10:35:50 +0000 Subject: [PATCH] Check both directions of changes --- keyserver/internal/cross_signing.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/keyserver/internal/cross_signing.go b/keyserver/internal/cross_signing.go index 49a4a6a3c..5124f37e6 100644 --- a/keyserver/internal/cross_signing.go +++ b/keyserver/internal/cross_signing.go @@ -192,13 +192,20 @@ func (a *KeyInternalAPI) PerformUploadDeviceKeys(ctx context.Context, req *api.P // Check if anything actually changed compared to what we have in the database. changed := false - for purpose, keydata := range toStore { - if _, ok := existingKeys[purpose]; !ok { - // A new key purpose has been specified that we didn't know before. + for _, purpose := range []gomatrixserverlib.CrossSigningKeyPurpose{ + gomatrixserverlib.CrossSigningKeyPurposeMaster, + gomatrixserverlib.CrossSigningKeyPurposeSelfSigning, + gomatrixserverlib.CrossSigningKeyPurposeUserSigning, + } { + old, gotOld := existingKeys[purpose] + new, gotNew := toStore[purpose] + if gotOld != gotNew { + // A new key purpose has been specified that we didn't know before, + // or one has been removed. changed = true break } - if !bytes.Equal(existingKeys[purpose], keydata) { + if !bytes.Equal(old, new) { // One of the existing keys for a purpose we already knew about has // changed. changed = true