Upgrade libsignal-protocol v1.1.6
This commit is contained in:
parent
7b3b01bdf6
commit
fe209a2f41
2 changed files with 102 additions and 102 deletions
|
@ -35636,11 +35636,10 @@ Internal.ChainType = {
|
||||||
RECEIVING: 2
|
RECEIVING: 2
|
||||||
};
|
};
|
||||||
|
|
||||||
var ARCHIVED_STATES_MAX_LENGTH = 40;
|
|
||||||
|
|
||||||
Internal.SessionRecord = function() {
|
Internal.SessionRecord = function() {
|
||||||
'use strict';
|
'use strict';
|
||||||
var MESSAGE_LOST_THRESHOLD_MS = 1000*60*60*24*7;
|
var ARCHIVED_STATES_MAX_LENGTH = 40;
|
||||||
|
var SESSION_RECORD_VERSION = 'v1';
|
||||||
|
|
||||||
var StaticByteBufferProto = new dcodeIO.ByteBuffer().__proto__;
|
var StaticByteBufferProto = new dcodeIO.ByteBuffer().__proto__;
|
||||||
var StaticArrayBufferProto = new ArrayBuffer().__proto__;
|
var StaticArrayBufferProto = new ArrayBuffer().__proto__;
|
||||||
|
@ -35680,30 +35679,50 @@ Internal.SessionRecord = function() {
|
||||||
return JSON.stringify(ensureStringed(thing)); //TODO: jquery???
|
return JSON.stringify(ensureStringed(thing)); //TODO: jquery???
|
||||||
}
|
}
|
||||||
|
|
||||||
var SessionRecord = function(identityKey, registrationId) {
|
var migrations = [
|
||||||
this._sessions = {};
|
{
|
||||||
identityKey = util.toString(identityKey);
|
version: 'v1',
|
||||||
if (typeof identityKey !== 'string') {
|
migrate: function migrateV1(data) {
|
||||||
throw new Error('SessionRecord: Invalid identityKey');
|
var sessions = data.sessions;
|
||||||
|
if (data.registrationId) {
|
||||||
|
for (var key in sessions) {
|
||||||
|
if (!sessions[key].registrationId) {
|
||||||
|
sessions[key].registrationId = data.registrationId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.identityKey = identityKey;
|
}
|
||||||
this.registrationId = registrationId;
|
];
|
||||||
|
|
||||||
if (this.registrationId === undefined || typeof this.registrationId !== 'number') {
|
function migrate(data) {
|
||||||
this.registrationId = null;
|
var run = (data.version === undefined);
|
||||||
|
for (var i=0; i < migrations.length; ++i) {
|
||||||
|
if (run) {
|
||||||
|
migrations[i].migrate(data);
|
||||||
|
} else if (migrations[i].version === data.version) {
|
||||||
|
run = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (!run) {
|
||||||
|
throw new Error("Error migrating SessionRecord");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var SessionRecord = function() {
|
||||||
|
this._sessions = {};
|
||||||
|
this.version = SESSION_RECORD_VERSION;
|
||||||
};
|
};
|
||||||
|
|
||||||
SessionRecord.deserialize = function(serialized) {
|
SessionRecord.deserialize = function(serialized) {
|
||||||
var data = JSON.parse(serialized);
|
var data = JSON.parse(serialized);
|
||||||
var record = new SessionRecord(data.identityKey, data.registrationId);
|
if (data.version !== SESSION_RECORD_VERSION) { migrate(data); }
|
||||||
|
|
||||||
|
var record = new SessionRecord();
|
||||||
record._sessions = data.sessions;
|
record._sessions = data.sessions;
|
||||||
if (record._sessions === undefined || record._sessions === null || typeof record._sessions !== "object" || Array.isArray(record._sessions)) {
|
if (record._sessions === undefined || record._sessions === null || typeof record._sessions !== "object" || Array.isArray(record._sessions)) {
|
||||||
throw new Error("Error deserializing SessionRecord");
|
throw new Error("Error deserializing SessionRecord");
|
||||||
}
|
}
|
||||||
if (record.identityKey === undefined || record.registrationId === undefined) {
|
|
||||||
throw new Error("Error deserializing SessionRecord");
|
|
||||||
}
|
|
||||||
return record;
|
return record;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -35711,12 +35730,11 @@ Internal.SessionRecord = function() {
|
||||||
serialize: function() {
|
serialize: function() {
|
||||||
return jsonThing({
|
return jsonThing({
|
||||||
sessions : this._sessions,
|
sessions : this._sessions,
|
||||||
registrationId : this.registrationId,
|
version : this.version
|
||||||
identityKey : this.identityKey
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
haveOpenSession: function() {
|
haveOpenSession: function() {
|
||||||
return this.registrationId !== null;
|
return this.getOpenSession() !== undefined;
|
||||||
},
|
},
|
||||||
|
|
||||||
getSessionByBaseKey: function(baseKey) {
|
getSessionByBaseKey: function(baseKey) {
|
||||||
|
@ -35775,37 +35793,15 @@ Internal.SessionRecord = function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
updateSessionState: function(session, registrationId) {
|
updateSessionState: function(session) {
|
||||||
var sessions = this._sessions;
|
var sessions = this._sessions;
|
||||||
|
|
||||||
this.removeOldChains(session);
|
this.removeOldChains(session);
|
||||||
|
|
||||||
if (this.identityKey === null) {
|
|
||||||
this.identityKey = session.indexInfo.remoteIdentityKey;
|
|
||||||
}
|
|
||||||
if (util.toString(this.identityKey) !== util.toString(session.indexInfo.remoteIdentityKey)) {
|
|
||||||
var e = new Error("Identity key changed at session save time");
|
|
||||||
e.identityKey = session.indexInfo.remoteIdentityKey.toArrayBuffer();
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
|
|
||||||
sessions[util.toString(session.indexInfo.baseKey)] = session;
|
sessions[util.toString(session.indexInfo.baseKey)] = session;
|
||||||
|
|
||||||
this.removeOldSessions();
|
this.removeOldSessions();
|
||||||
|
|
||||||
var openSessionRemaining = false;
|
|
||||||
for (var key in sessions) {
|
|
||||||
if (sessions[key].indexInfo.closed == -1) {
|
|
||||||
openSessionRemaining = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!openSessionRemaining) { // Used as a flag to get new pre keys for the next session
|
|
||||||
this.registrationId = null;
|
|
||||||
} else if (this.registrationId === null && registrationId !== undefined) {
|
|
||||||
this.registrationId = registrationId;
|
|
||||||
} else if (this.registrationId === null) {
|
|
||||||
throw new Error("Had open sessions on a record that had no registrationId set");
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
getSessions: function() {
|
getSessions: function() {
|
||||||
// return an array of sessions ordered by time closed,
|
// return an array of sessions ordered by time closed,
|
||||||
|
@ -35959,7 +35955,7 @@ SessionBuilder.prototype = {
|
||||||
}).then(function(baseKey) {
|
}).then(function(baseKey) {
|
||||||
var devicePreKey = (device.preKey.publicKey);
|
var devicePreKey = (device.preKey.publicKey);
|
||||||
return this.initSession(true, baseKey, undefined, device.identityKey,
|
return this.initSession(true, baseKey, undefined, device.identityKey,
|
||||||
devicePreKey, device.signedPreKey.publicKey
|
devicePreKey, device.signedPreKey.publicKey, device.registrationId
|
||||||
).then(function(session) {
|
).then(function(session) {
|
||||||
session.pendingPreKey = {
|
session.pendingPreKey = {
|
||||||
preKeyId : device.preKey.keyId,
|
preKeyId : device.preKey.keyId,
|
||||||
|
@ -35975,14 +35971,14 @@ SessionBuilder.prototype = {
|
||||||
if (serialized !== undefined) {
|
if (serialized !== undefined) {
|
||||||
record = Internal.SessionRecord.deserialize(serialized);
|
record = Internal.SessionRecord.deserialize(serialized);
|
||||||
} else {
|
} else {
|
||||||
record = new Internal.SessionRecord(device.identityKey, device.registrationId);
|
record = new Internal.SessionRecord();
|
||||||
}
|
}
|
||||||
|
|
||||||
record.archiveCurrentState();
|
record.archiveCurrentState();
|
||||||
record.updateSessionState(session, device.registrationId);
|
record.updateSessionState(session, device.registrationId);
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
this.storage.storeSession(address, record.serialize()),
|
this.storage.storeSession(address, record.serialize()),
|
||||||
this.storage.saveIdentity(this.remoteAddress.getName(), record.identityKey)
|
this.storage.saveIdentity(this.remoteAddress.getName(), session.indexInfo.remoteIdentityKey)
|
||||||
]);
|
]);
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
@ -36033,7 +36029,7 @@ SessionBuilder.prototype = {
|
||||||
}
|
}
|
||||||
return this.initSession(false, preKeyPair, signedPreKeyPair,
|
return this.initSession(false, preKeyPair, signedPreKeyPair,
|
||||||
message.identityKey.toArrayBuffer(),
|
message.identityKey.toArrayBuffer(),
|
||||||
message.baseKey.toArrayBuffer(), undefined
|
message.baseKey.toArrayBuffer(), undefined, message.registrationId
|
||||||
).then(function(new_session) {
|
).then(function(new_session) {
|
||||||
// Note that the session is not actually saved until the very
|
// Note that the session is not actually saved until the very
|
||||||
// end of decryptWhisperMessage ... to ensure that the sender
|
// end of decryptWhisperMessage ... to ensure that the sender
|
||||||
|
@ -36047,7 +36043,7 @@ SessionBuilder.prototype = {
|
||||||
},
|
},
|
||||||
initSession: function(isInitiator, ourEphemeralKey, ourSignedKey,
|
initSession: function(isInitiator, ourEphemeralKey, ourSignedKey,
|
||||||
theirIdentityPubKey, theirEphemeralPubKey,
|
theirIdentityPubKey, theirEphemeralPubKey,
|
||||||
theirSignedPubKey) {
|
theirSignedPubKey, registrationId) {
|
||||||
return this.storage.getIdentityKeyPair().then(function(ourIdentityKey) {
|
return this.storage.getIdentityKeyPair().then(function(ourIdentityKey) {
|
||||||
if (isInitiator) {
|
if (isInitiator) {
|
||||||
if (ourSignedKey !== undefined) {
|
if (ourSignedKey !== undefined) {
|
||||||
|
@ -36097,6 +36093,7 @@ SessionBuilder.prototype = {
|
||||||
return Internal.HKDF(sharedSecret.buffer, new ArrayBuffer(32), "WhisperText");
|
return Internal.HKDF(sharedSecret.buffer, new ArrayBuffer(32), "WhisperText");
|
||||||
}).then(function(masterKey) {
|
}).then(function(masterKey) {
|
||||||
var session = {
|
var session = {
|
||||||
|
registrationId: registrationId,
|
||||||
currentRatchet: {
|
currentRatchet: {
|
||||||
rootKey : masterKey[0],
|
rootKey : masterKey[0],
|
||||||
lastRemoteEphemeralKey : theirSignedPubKey,
|
lastRemoteEphemeralKey : theirSignedPubKey,
|
||||||
|
@ -36255,14 +36252,14 @@ SessionCipher.prototype = {
|
||||||
return {
|
return {
|
||||||
type : 3,
|
type : 3,
|
||||||
body : result,
|
body : result,
|
||||||
registrationId : record.registrationId
|
registrationId : session.registrationId
|
||||||
};
|
};
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
type : 1,
|
type : 1,
|
||||||
body : util.toString(message),
|
body : util.toString(message),
|
||||||
registrationId : record.registrationId
|
registrationId : session.registrationId
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -36319,7 +36316,6 @@ SessionCipher.prototype = {
|
||||||
throw new Error("No registrationId");
|
throw new Error("No registrationId");
|
||||||
}
|
}
|
||||||
record = new Internal.SessionRecord(
|
record = new Internal.SessionRecord(
|
||||||
util.toString(preKeyProto.identityKey),
|
|
||||||
preKeyProto.registrationId
|
preKeyProto.registrationId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -36488,7 +36484,11 @@ SessionCipher.prototype = {
|
||||||
if (record === undefined) {
|
if (record === undefined) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
return record.registrationId;
|
var openSession = record.getOpenSession();
|
||||||
|
if (openSession === undefined) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return openSession.registrationId;
|
||||||
});
|
});
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
},
|
},
|
||||||
|
|
|
@ -35512,11 +35512,10 @@ Internal.ChainType = {
|
||||||
RECEIVING: 2
|
RECEIVING: 2
|
||||||
};
|
};
|
||||||
|
|
||||||
var ARCHIVED_STATES_MAX_LENGTH = 40;
|
|
||||||
|
|
||||||
Internal.SessionRecord = function() {
|
Internal.SessionRecord = function() {
|
||||||
'use strict';
|
'use strict';
|
||||||
var MESSAGE_LOST_THRESHOLD_MS = 1000*60*60*24*7;
|
var ARCHIVED_STATES_MAX_LENGTH = 40;
|
||||||
|
var SESSION_RECORD_VERSION = 'v1';
|
||||||
|
|
||||||
var StaticByteBufferProto = new dcodeIO.ByteBuffer().__proto__;
|
var StaticByteBufferProto = new dcodeIO.ByteBuffer().__proto__;
|
||||||
var StaticArrayBufferProto = new ArrayBuffer().__proto__;
|
var StaticArrayBufferProto = new ArrayBuffer().__proto__;
|
||||||
|
@ -35556,30 +35555,50 @@ Internal.SessionRecord = function() {
|
||||||
return JSON.stringify(ensureStringed(thing)); //TODO: jquery???
|
return JSON.stringify(ensureStringed(thing)); //TODO: jquery???
|
||||||
}
|
}
|
||||||
|
|
||||||
var SessionRecord = function(identityKey, registrationId) {
|
var migrations = [
|
||||||
this._sessions = {};
|
{
|
||||||
identityKey = util.toString(identityKey);
|
version: 'v1',
|
||||||
if (typeof identityKey !== 'string') {
|
migrate: function migrateV1(data) {
|
||||||
throw new Error('SessionRecord: Invalid identityKey');
|
var sessions = data.sessions;
|
||||||
|
if (data.registrationId) {
|
||||||
|
for (var key in sessions) {
|
||||||
|
if (!sessions[key].registrationId) {
|
||||||
|
sessions[key].registrationId = data.registrationId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.identityKey = identityKey;
|
}
|
||||||
this.registrationId = registrationId;
|
];
|
||||||
|
|
||||||
if (this.registrationId === undefined || typeof this.registrationId !== 'number') {
|
function migrate(data) {
|
||||||
this.registrationId = null;
|
var run = (data.version === undefined);
|
||||||
|
for (var i=0; i < migrations.length; ++i) {
|
||||||
|
if (run) {
|
||||||
|
migrations[i].migrate(data);
|
||||||
|
} else if (migrations[i].version === data.version) {
|
||||||
|
run = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (!run) {
|
||||||
|
throw new Error("Error migrating SessionRecord");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var SessionRecord = function() {
|
||||||
|
this._sessions = {};
|
||||||
|
this.version = SESSION_RECORD_VERSION;
|
||||||
};
|
};
|
||||||
|
|
||||||
SessionRecord.deserialize = function(serialized) {
|
SessionRecord.deserialize = function(serialized) {
|
||||||
var data = JSON.parse(serialized);
|
var data = JSON.parse(serialized);
|
||||||
var record = new SessionRecord(data.identityKey, data.registrationId);
|
if (data.version !== SESSION_RECORD_VERSION) { migrate(data); }
|
||||||
|
|
||||||
|
var record = new SessionRecord();
|
||||||
record._sessions = data.sessions;
|
record._sessions = data.sessions;
|
||||||
if (record._sessions === undefined || record._sessions === null || typeof record._sessions !== "object" || Array.isArray(record._sessions)) {
|
if (record._sessions === undefined || record._sessions === null || typeof record._sessions !== "object" || Array.isArray(record._sessions)) {
|
||||||
throw new Error("Error deserializing SessionRecord");
|
throw new Error("Error deserializing SessionRecord");
|
||||||
}
|
}
|
||||||
if (record.identityKey === undefined || record.registrationId === undefined) {
|
|
||||||
throw new Error("Error deserializing SessionRecord");
|
|
||||||
}
|
|
||||||
return record;
|
return record;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -35587,12 +35606,11 @@ Internal.SessionRecord = function() {
|
||||||
serialize: function() {
|
serialize: function() {
|
||||||
return jsonThing({
|
return jsonThing({
|
||||||
sessions : this._sessions,
|
sessions : this._sessions,
|
||||||
registrationId : this.registrationId,
|
version : this.version
|
||||||
identityKey : this.identityKey
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
haveOpenSession: function() {
|
haveOpenSession: function() {
|
||||||
return this.registrationId !== null;
|
return this.getOpenSession() !== undefined;
|
||||||
},
|
},
|
||||||
|
|
||||||
getSessionByBaseKey: function(baseKey) {
|
getSessionByBaseKey: function(baseKey) {
|
||||||
|
@ -35651,37 +35669,15 @@ Internal.SessionRecord = function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
updateSessionState: function(session, registrationId) {
|
updateSessionState: function(session) {
|
||||||
var sessions = this._sessions;
|
var sessions = this._sessions;
|
||||||
|
|
||||||
this.removeOldChains(session);
|
this.removeOldChains(session);
|
||||||
|
|
||||||
if (this.identityKey === null) {
|
|
||||||
this.identityKey = session.indexInfo.remoteIdentityKey;
|
|
||||||
}
|
|
||||||
if (util.toString(this.identityKey) !== util.toString(session.indexInfo.remoteIdentityKey)) {
|
|
||||||
var e = new Error("Identity key changed at session save time");
|
|
||||||
e.identityKey = session.indexInfo.remoteIdentityKey.toArrayBuffer();
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
|
|
||||||
sessions[util.toString(session.indexInfo.baseKey)] = session;
|
sessions[util.toString(session.indexInfo.baseKey)] = session;
|
||||||
|
|
||||||
this.removeOldSessions();
|
this.removeOldSessions();
|
||||||
|
|
||||||
var openSessionRemaining = false;
|
|
||||||
for (var key in sessions) {
|
|
||||||
if (sessions[key].indexInfo.closed == -1) {
|
|
||||||
openSessionRemaining = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!openSessionRemaining) { // Used as a flag to get new pre keys for the next session
|
|
||||||
this.registrationId = null;
|
|
||||||
} else if (this.registrationId === null && registrationId !== undefined) {
|
|
||||||
this.registrationId = registrationId;
|
|
||||||
} else if (this.registrationId === null) {
|
|
||||||
throw new Error("Had open sessions on a record that had no registrationId set");
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
getSessions: function() {
|
getSessions: function() {
|
||||||
// return an array of sessions ordered by time closed,
|
// return an array of sessions ordered by time closed,
|
||||||
|
@ -35835,7 +35831,7 @@ SessionBuilder.prototype = {
|
||||||
}).then(function(baseKey) {
|
}).then(function(baseKey) {
|
||||||
var devicePreKey = (device.preKey.publicKey);
|
var devicePreKey = (device.preKey.publicKey);
|
||||||
return this.initSession(true, baseKey, undefined, device.identityKey,
|
return this.initSession(true, baseKey, undefined, device.identityKey,
|
||||||
devicePreKey, device.signedPreKey.publicKey
|
devicePreKey, device.signedPreKey.publicKey, device.registrationId
|
||||||
).then(function(session) {
|
).then(function(session) {
|
||||||
session.pendingPreKey = {
|
session.pendingPreKey = {
|
||||||
preKeyId : device.preKey.keyId,
|
preKeyId : device.preKey.keyId,
|
||||||
|
@ -35851,14 +35847,14 @@ SessionBuilder.prototype = {
|
||||||
if (serialized !== undefined) {
|
if (serialized !== undefined) {
|
||||||
record = Internal.SessionRecord.deserialize(serialized);
|
record = Internal.SessionRecord.deserialize(serialized);
|
||||||
} else {
|
} else {
|
||||||
record = new Internal.SessionRecord(device.identityKey, device.registrationId);
|
record = new Internal.SessionRecord();
|
||||||
}
|
}
|
||||||
|
|
||||||
record.archiveCurrentState();
|
record.archiveCurrentState();
|
||||||
record.updateSessionState(session, device.registrationId);
|
record.updateSessionState(session, device.registrationId);
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
this.storage.storeSession(address, record.serialize()),
|
this.storage.storeSession(address, record.serialize()),
|
||||||
this.storage.saveIdentity(this.remoteAddress.getName(), record.identityKey)
|
this.storage.saveIdentity(this.remoteAddress.getName(), session.indexInfo.remoteIdentityKey)
|
||||||
]);
|
]);
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
@ -35909,7 +35905,7 @@ SessionBuilder.prototype = {
|
||||||
}
|
}
|
||||||
return this.initSession(false, preKeyPair, signedPreKeyPair,
|
return this.initSession(false, preKeyPair, signedPreKeyPair,
|
||||||
message.identityKey.toArrayBuffer(),
|
message.identityKey.toArrayBuffer(),
|
||||||
message.baseKey.toArrayBuffer(), undefined
|
message.baseKey.toArrayBuffer(), undefined, message.registrationId
|
||||||
).then(function(new_session) {
|
).then(function(new_session) {
|
||||||
// Note that the session is not actually saved until the very
|
// Note that the session is not actually saved until the very
|
||||||
// end of decryptWhisperMessage ... to ensure that the sender
|
// end of decryptWhisperMessage ... to ensure that the sender
|
||||||
|
@ -35923,7 +35919,7 @@ SessionBuilder.prototype = {
|
||||||
},
|
},
|
||||||
initSession: function(isInitiator, ourEphemeralKey, ourSignedKey,
|
initSession: function(isInitiator, ourEphemeralKey, ourSignedKey,
|
||||||
theirIdentityPubKey, theirEphemeralPubKey,
|
theirIdentityPubKey, theirEphemeralPubKey,
|
||||||
theirSignedPubKey) {
|
theirSignedPubKey, registrationId) {
|
||||||
return this.storage.getIdentityKeyPair().then(function(ourIdentityKey) {
|
return this.storage.getIdentityKeyPair().then(function(ourIdentityKey) {
|
||||||
if (isInitiator) {
|
if (isInitiator) {
|
||||||
if (ourSignedKey !== undefined) {
|
if (ourSignedKey !== undefined) {
|
||||||
|
@ -35973,6 +35969,7 @@ SessionBuilder.prototype = {
|
||||||
return Internal.HKDF(sharedSecret.buffer, new ArrayBuffer(32), "WhisperText");
|
return Internal.HKDF(sharedSecret.buffer, new ArrayBuffer(32), "WhisperText");
|
||||||
}).then(function(masterKey) {
|
}).then(function(masterKey) {
|
||||||
var session = {
|
var session = {
|
||||||
|
registrationId: registrationId,
|
||||||
currentRatchet: {
|
currentRatchet: {
|
||||||
rootKey : masterKey[0],
|
rootKey : masterKey[0],
|
||||||
lastRemoteEphemeralKey : theirSignedPubKey,
|
lastRemoteEphemeralKey : theirSignedPubKey,
|
||||||
|
@ -36131,14 +36128,14 @@ SessionCipher.prototype = {
|
||||||
return {
|
return {
|
||||||
type : 3,
|
type : 3,
|
||||||
body : result,
|
body : result,
|
||||||
registrationId : record.registrationId
|
registrationId : session.registrationId
|
||||||
};
|
};
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
type : 1,
|
type : 1,
|
||||||
body : util.toString(message),
|
body : util.toString(message),
|
||||||
registrationId : record.registrationId
|
registrationId : session.registrationId
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -36195,7 +36192,6 @@ SessionCipher.prototype = {
|
||||||
throw new Error("No registrationId");
|
throw new Error("No registrationId");
|
||||||
}
|
}
|
||||||
record = new Internal.SessionRecord(
|
record = new Internal.SessionRecord(
|
||||||
util.toString(preKeyProto.identityKey),
|
|
||||||
preKeyProto.registrationId
|
preKeyProto.registrationId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -36364,7 +36360,11 @@ SessionCipher.prototype = {
|
||||||
if (record === undefined) {
|
if (record === undefined) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
return record.registrationId;
|
var openSession = record.getOpenSession();
|
||||||
|
if (openSession === undefined) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return openSession.registrationId;
|
||||||
});
|
});
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue