diff --git a/src/matrix/e2ee/OlmWorker.js b/src/matrix/e2ee/OlmWorker.js index 649db309..e538dd31 100644 --- a/src/matrix/e2ee/OlmWorker.js +++ b/src/matrix/e2ee/OlmWorker.js @@ -37,9 +37,15 @@ export class OlmWorker { account.unpickle("", pickle); } - async createOutboundSession(account, newSession, theirIdentityKey, theirOneTimeKey) { + async createOutboundOlmSession(account, newSession, theirIdentityKey, theirOneTimeKey) { const accountPickle = account.pickle(""); - const sessionPickle = await this._workerPool.send({type: "olm_create_outbound", accountPickle, theirIdentityKey, theirOneTimeKey}).response(); + let randomValues; + if (window.msCrypto) { + randomValues = [ + window.msCrypto.getRandomValues(new Uint8Array(64)), + ]; + } + const sessionPickle = await this._workerPool.send({type: "olm_create_outbound", accountPickle, theirIdentityKey, theirOneTimeKey, randomValues}).response(); newSession.unpickle("", sessionPickle); } diff --git a/src/platform/web/worker/main.js b/src/platform/web/worker/main.js index ae440f57..db8d84e9 100644 --- a/src/platform/web/worker/main.js +++ b/src/platform/web/worker/main.js @@ -142,13 +142,14 @@ class MessageHandler { }); } - _olmCreateOutbound(accountPickle, theirIdentityKey, theirOneTimeKey) { + _olmCreateOutbound(randomValues, accountPickle, theirIdentityKey, theirOneTimeKey) { return this._toMessage(() => { + this._feedRandomValues(randomValues); const account = new this._olm.Account(); const newSession = new this._olm.Session(); try { account.unpickle("", accountPickle); - newSession.create_outbound(account, newSession, theirIdentityKey, theirOneTimeKey); + newSession.create_outbound(account, theirIdentityKey, theirOneTimeKey); return newSession.pickle(""); } finally { account.free(); @@ -168,7 +169,7 @@ class MessageHandler { } else if (type === "olm_create_account_otks") { this._sendReply(message, this._olmCreateAccountAndOTKs(message.randomValues, message.otkAmount)); } else if (type === "olm_create_outbound") { - this._sendReply(message, this._olmCreateOutbound(message.accountPickle, message.theirIdentityKey, message.theirOneTimeKey)); + this._sendReply(message, this._olmCreateOutbound(message.randomValues, message.accountPickle, message.theirIdentityKey, message.theirOneTimeKey)); } } }