diff --git a/js/libtextsecure.js b/js/libtextsecure.js index 6d5a6989..e5a7a43c 100644 --- a/js/libtextsecure.js +++ b/js/libtextsecure.js @@ -38109,15 +38109,23 @@ axolotlInternal.RecipientRecord = function() { window.textsecure.storage.devices = { saveKeysToDeviceObject: function(deviceObject) { var number = textsecure.utils.unencodeNumber(deviceObject.encodedNumber)[0]; - return textsecure.storage.axolotl.putIdentityKey(number, deviceObject.identityKey).then(function() { - tempKeys[deviceObject.encodedNumber] = { - preKey: deviceObject.preKey, - preKeyId: deviceObject.preKeyId, - signedKey: deviceObject.signedKey, - signedKeyId: deviceObject.signedKeyId, - signedKeySignature: deviceObject.signedKeySignature, - registrationId: deviceObject.registrationId - }; + return textsecure.storage.axolotl.getIdentityKey(number).then(function(identityKey) { + if (identityKey !== undefined && deviceObject.identityKey !== undefined && getString(identityKey) != getString(deviceObject.identityKey)) { + var error = new Error("Identity key changed"); + error.identityKey = deviceObject.identityKey; + throw error; + } + + return textsecure.storage.axolotl.putIdentityKey(number, deviceObject.identityKey).then(function() { + tempKeys[deviceObject.encodedNumber] = { + preKey: deviceObject.preKey, + preKeyId: deviceObject.preKeyId, + signedKey: deviceObject.signedKey, + signedKeyId: deviceObject.signedKeyId, + signedKeySignature: deviceObject.signedKeySignature, + registrationId: deviceObject.registrationId + }; + }); }); }, diff --git a/libtextsecure/storage/devices.js b/libtextsecure/storage/devices.js index e7bf0d59..3f60e080 100644 --- a/libtextsecure/storage/devices.js +++ b/libtextsecure/storage/devices.js @@ -28,15 +28,23 @@ window.textsecure.storage.devices = { saveKeysToDeviceObject: function(deviceObject) { var number = textsecure.utils.unencodeNumber(deviceObject.encodedNumber)[0]; - return textsecure.storage.axolotl.putIdentityKey(number, deviceObject.identityKey).then(function() { - tempKeys[deviceObject.encodedNumber] = { - preKey: deviceObject.preKey, - preKeyId: deviceObject.preKeyId, - signedKey: deviceObject.signedKey, - signedKeyId: deviceObject.signedKeyId, - signedKeySignature: deviceObject.signedKeySignature, - registrationId: deviceObject.registrationId - }; + return textsecure.storage.axolotl.getIdentityKey(number).then(function(identityKey) { + if (identityKey !== undefined && deviceObject.identityKey !== undefined && getString(identityKey) != getString(deviceObject.identityKey)) { + var error = new Error("Identity key changed"); + error.identityKey = deviceObject.identityKey; + throw error; + } + + return textsecure.storage.axolotl.putIdentityKey(number, deviceObject.identityKey).then(function() { + tempKeys[deviceObject.encodedNumber] = { + preKey: deviceObject.preKey, + preKeyId: deviceObject.preKeyId, + signedKey: deviceObject.signedKey, + signedKeyId: deviceObject.signedKeyId, + signedKeySignature: deviceObject.signedKeySignature, + registrationId: deviceObject.registrationId + }; + }); }); },