diff --git a/src/crypto/CrossSigning.js b/src/crypto/CrossSigning.js index d3ecaf647..f414788a7 100644 --- a/src/crypto/CrossSigning.js +++ b/src/crypto/CrossSigning.js @@ -202,6 +202,9 @@ export class CrossSigningInfo extends EventEmitter { */ static async getFromSecretStorage(type, secretStorage) { const encodedKey = await secretStorage.get(`m.cross_signing.${type}`); + if (!encodedKey) { + return null; + } return decodeBase64(encodedKey); } diff --git a/src/crypto/index.js b/src/crypto/index.js index 0be9716d1..f0254a0b1 100644 --- a/src/crypto/index.js +++ b/src/crypto/index.js @@ -2122,9 +2122,18 @@ Crypto.prototype.setDeviceVerification = async function( // do cross-signing if (verified && userId === this._userId) { logger.info("Own device " + deviceId + " marked verified: signing"); - const device = await this._crossSigningInfo.signDevice( - userId, DeviceInfo.fromStorage(dev, deviceId), - ); + + // Signing only needed if other device not already signed + let device; + const deviceTrust = this.checkDeviceTrust(userId, deviceId); + if (deviceTrust.isCrossSigningVerified()) { + logger.log(`Own device ${deviceId} already cross-signing verified`); + } else { + device = await this._crossSigningInfo.signDevice( + userId, DeviceInfo.fromStorage(dev, deviceId), + ); + } + if (device) { const upload = async ({shouldEmit}) => { logger.info("Uploading signature for " + deviceId);