Update libaxolotl

encryptMessageFor now requires an array buffer instead of a protobuf.

By converting the message to an array buffer outside the Promise.all, we
avoid allocating a new copy for each device.

// FREEBIE
This commit is contained in:
lilia 2015-11-17 11:54:45 -08:00
parent 4615e730ca
commit 641a7dbc6d
3 changed files with 12 additions and 6 deletions

View file

@ -37510,7 +37510,10 @@ window.axolotl.protocol = function(storage_interface) {
}
// return Promise(encoded [PreKey]WhisperMessage)
self.encryptMessageFor = function(deviceObject, pushMessageContent) {
self.encryptMessageFor = function(deviceObject, plaintext) {
if (!(plaintext instanceof ArrayBuffer)) {
throw new Error("Expected plaintext to be an ArrayBuffer");
}
return storage_interface.getMyIdentityKey().then(function(ourIdentityKey) {
return storage_interface.getMyRegistrationId().then(function(myRegistrationId) {
return crypto_storage.getOpenSession(deviceObject.encodedNumber).then(function(session) {
@ -37518,7 +37521,6 @@ window.axolotl.protocol = function(storage_interface) {
var doEncryptPushMessageContent = function() {
var msg = new axolotlInternal.protobuf.WhisperMessage();
var plaintext = axolotlInternal.utils.convertToArrayBuffer(pushMessageContent.encode());
var paddedPlaintext = new Uint8Array(getPaddedMessageLength(plaintext.byteLength));
paddedPlaintext.set(new Uint8Array(plaintext));
@ -39864,6 +39866,7 @@ MessageSender.prototype = {
// message == DataMessage or ContentMessage proto
encryptToDevices: function(timestamp, number, deviceObjectList, message) {
var legacy = (message instanceof textsecure.protobuf.DataMessage);
var plaintext = message.toArrayBuffer();
var relay = deviceObjectList[0].relay;
for (var i=1; i < deviceObjectList.length; ++i) {
if (deviceObjectList[i].relay !== relay) {
@ -39871,7 +39874,7 @@ MessageSender.prototype = {
}
}
return Promise.all(deviceObjectList.map(function(device) {
return textsecure.protocol_wrapper.encryptMessageFor(device, message).then(function(encryptedMsg) {
return textsecure.protocol_wrapper.encryptMessageFor(device, plaintext).then(function(encryptedMsg) {
return textsecure.protocol_wrapper.getRegistrationId(device.encodedNumber).then(function(registrationId) {
return textsecure.storage.devices.removeTempKeysFromDevice(device.encodedNumber).then(function() {
var json = {

View file

@ -37412,7 +37412,10 @@ window.axolotl.protocol = function(storage_interface) {
}
// return Promise(encoded [PreKey]WhisperMessage)
self.encryptMessageFor = function(deviceObject, pushMessageContent) {
self.encryptMessageFor = function(deviceObject, plaintext) {
if (!(plaintext instanceof ArrayBuffer)) {
throw new Error("Expected plaintext to be an ArrayBuffer");
}
return storage_interface.getMyIdentityKey().then(function(ourIdentityKey) {
return storage_interface.getMyRegistrationId().then(function(myRegistrationId) {
return crypto_storage.getOpenSession(deviceObject.encodedNumber).then(function(session) {
@ -37420,7 +37423,6 @@ window.axolotl.protocol = function(storage_interface) {
var doEncryptPushMessageContent = function() {
var msg = new axolotlInternal.protobuf.WhisperMessage();
var plaintext = axolotlInternal.utils.convertToArrayBuffer(pushMessageContent.encode());
var paddedPlaintext = new Uint8Array(getPaddedMessageLength(plaintext.byteLength));
paddedPlaintext.set(new Uint8Array(plaintext));

View file

@ -11,6 +11,7 @@ MessageSender.prototype = {
// message == DataMessage or ContentMessage proto
encryptToDevices: function(timestamp, number, deviceObjectList, message) {
var legacy = (message instanceof textsecure.protobuf.DataMessage);
var plaintext = message.toArrayBuffer();
var relay = deviceObjectList[0].relay;
for (var i=1; i < deviceObjectList.length; ++i) {
if (deviceObjectList[i].relay !== relay) {
@ -18,7 +19,7 @@ MessageSender.prototype = {
}
}
return Promise.all(deviceObjectList.map(function(device) {
return textsecure.protocol_wrapper.encryptMessageFor(device, message).then(function(encryptedMsg) {
return textsecure.protocol_wrapper.encryptMessageFor(device, plaintext).then(function(encryptedMsg) {
return textsecure.protocol_wrapper.getRegistrationId(device.encodedNumber).then(function(registrationId) {
return textsecure.storage.devices.removeTempKeysFromDevice(device.encodedNumber).then(function() {
var json = {