diff --git a/lib/crypto/index.js b/lib/crypto/index.js index 28b65ca91..a0cd4fc70 100644 --- a/lib/crypto/index.js +++ b/lib/crypto/index.js @@ -797,10 +797,15 @@ Crypto.prototype.encryptEventIfNeeded = function(event, room) { return null; } + var myKeys = { + curve25519: this._olmDevice.deviceCurve25519Key, + ed25519: this._olmDevice.deviceEd25519Key, + }; + return alg.encryptMessage( room, event.getType(), event.getContent() ).then(function(encryptedContent) { - event.makeEncrypted("m.room.encrypted", encryptedContent); + event.makeEncrypted("m.room.encrypted", encryptedContent, myKeys); }); }; diff --git a/lib/models/event.js b/lib/models/event.js index 83bf207c3..7f4e91259 100644 --- a/lib/models/event.js +++ b/lib/models/event.js @@ -214,12 +214,15 @@ module.exports.MatrixEvent.prototype = { * "m.room.encrypted" * * @param {object} crypto_content raw 'content' for the encrypted event. + * @param {object} keys The local keys claimed and proved by this event. */ - makeEncrypted: function(crypto_type, crypto_content) { + makeEncrypted: function(crypto_type, crypto_content, keys) { // keep the plain-text data for 'view source' this._clearEvent = { type: this.event.type, content: this.event.content, + keysProved: keys, + keysClaimed: keys, }; this.event.type = crypto_type; this.event.content = crypto_content; @@ -243,6 +246,10 @@ module.exports.MatrixEvent.prototype = { /** * The keys that must have been owned by the sender of this encrypted event. + * These don't necessarily have to come from this event itself, but may be + * implied by the cryptographic session. + * For example megolm messages don't claim keys directly, but instead + * inherit a claim from the olm message that established the session. * @return {object} */ getKeysProved: function() { @@ -251,6 +258,10 @@ module.exports.MatrixEvent.prototype = { /** * The additional keys the sender of this encrypted event claims to possess + * These don't necessarily have to come from this event itself, but may be + * implied by the cryptographic session. + * For example megolm messages don't claim keys directly, but instead + * inherit a claim from the olm message that established the session. * @return {object} */ getKeysClaimed: function() {