Update libaxolotl
// FREEBIE
This commit is contained in:
parent
ac7c95fed0
commit
f8fd613669
2 changed files with 48 additions and 8 deletions
|
@ -37048,11 +37048,25 @@ window.axolotl.protocol = function(storage_interface) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function detectDuplicateOpenSessions(sessions, encodedNumber) {
|
||||||
|
var openSession = undefined;
|
||||||
|
for (var key in sessions) {
|
||||||
|
if (sessions[key].indexInfo.closed == -1) {
|
||||||
|
if (openSession !== undefined)
|
||||||
|
throw new Error("Datastore inconsistensy: multiple open sessions for " + encodedNumber);
|
||||||
|
openSession = sessions[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
crypto_storage.getOpenSession = function(encodedNumber) {
|
crypto_storage.getOpenSession = function(encodedNumber) {
|
||||||
return getSessions(encodedNumber).then(function(sessions) {
|
return getSessions(encodedNumber).then(function(sessions) {
|
||||||
if (sessions === undefined)
|
if (sessions === undefined)
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
|
detectDuplicateOpenSessions(sessions, encodedNumber);
|
||||||
|
|
||||||
for (var key in sessions)
|
for (var key in sessions)
|
||||||
if (sessions[key].indexInfo.closed == -1)
|
if (sessions[key].indexInfo.closed == -1)
|
||||||
return sessions[key];
|
return sessions[key];
|
||||||
|
@ -37065,13 +37079,13 @@ window.axolotl.protocol = function(storage_interface) {
|
||||||
if (sessions === undefined)
|
if (sessions === undefined)
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
|
detectDuplicateOpenSessions(sessions, encodedNumber);
|
||||||
|
|
||||||
var searchKey = axolotlInternal.utils.convertToString(remoteEphemeralKey);
|
var searchKey = axolotlInternal.utils.convertToString(remoteEphemeralKey);
|
||||||
|
|
||||||
var openSession = undefined;
|
var openSession = undefined;
|
||||||
for (var key in sessions) {
|
for (var key in sessions) {
|
||||||
if (sessions[key].indexInfo.closed == -1) {
|
if (sessions[key].indexInfo.closed == -1) {
|
||||||
if (openSession !== undefined)
|
|
||||||
throw new Error("Datastore inconsistensy: multiple open sessions for " + encodedNumber);
|
|
||||||
openSession = sessions[key];
|
openSession = sessions[key];
|
||||||
}
|
}
|
||||||
if (sessions[key][searchKey] !== undefined)
|
if (sessions[key][searchKey] !== undefined)
|
||||||
|
@ -37325,8 +37339,10 @@ window.axolotl.protocol = function(storage_interface) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var fillMessageKeys = function(chain, counter) {
|
var fillMessageKeys = function(chain, counter) {
|
||||||
if (chain.chainKey.counter + 1000 < counter) //TODO: maybe 1000 is too low/high in some cases?
|
if (Object.keys(chain.messageKeys).length >= 1000) {
|
||||||
|
console.log("Too many message keys for chain");
|
||||||
return Promise.resolve(); // Stalker, much?
|
return Promise.resolve(); // Stalker, much?
|
||||||
|
}
|
||||||
|
|
||||||
if (chain.chainKey.counter >= counter)
|
if (chain.chainKey.counter >= counter)
|
||||||
return Promise.resolve(); // Already calculated
|
return Promise.resolve(); // Already calculated
|
||||||
|
@ -37411,7 +37427,11 @@ window.axolotl.protocol = function(storage_interface) {
|
||||||
var chain = session[axolotlInternal.utils.convertToString(message.ephemeralKey)];
|
var chain = session[axolotlInternal.utils.convertToString(message.ephemeralKey)];
|
||||||
|
|
||||||
return fillMessageKeys(chain, message.counter).then(function() {
|
return fillMessageKeys(chain, message.counter).then(function() {
|
||||||
return HKDF(axolotlInternal.utils.convertToArrayBuffer(chain.messageKeys[message.counter]), '', "WhisperMessageKeys").then(function(keys) {
|
var messageKey = chain.messageKeys[message.counter];
|
||||||
|
if (messageKey === undefined) {
|
||||||
|
throw new Error("Message key not found. The counter was repeated or the key was not filled.");
|
||||||
|
}
|
||||||
|
return HKDF(axolotlInternal.utils.convertToArrayBuffer(messageKey), '', "WhisperMessageKeys").then(function(keys) {
|
||||||
return storage_interface.getMyIdentityKey().then(function(ourIdentityKey) {
|
return storage_interface.getMyIdentityKey().then(function(ourIdentityKey) {
|
||||||
delete chain.messageKeys[message.counter];
|
delete chain.messageKeys[message.counter];
|
||||||
|
|
||||||
|
|
|
@ -36950,11 +36950,25 @@ window.axolotl.protocol = function(storage_interface) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function detectDuplicateOpenSessions(sessions, encodedNumber) {
|
||||||
|
var openSession = undefined;
|
||||||
|
for (var key in sessions) {
|
||||||
|
if (sessions[key].indexInfo.closed == -1) {
|
||||||
|
if (openSession !== undefined)
|
||||||
|
throw new Error("Datastore inconsistensy: multiple open sessions for " + encodedNumber);
|
||||||
|
openSession = sessions[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
crypto_storage.getOpenSession = function(encodedNumber) {
|
crypto_storage.getOpenSession = function(encodedNumber) {
|
||||||
return getSessions(encodedNumber).then(function(sessions) {
|
return getSessions(encodedNumber).then(function(sessions) {
|
||||||
if (sessions === undefined)
|
if (sessions === undefined)
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
|
detectDuplicateOpenSessions(sessions, encodedNumber);
|
||||||
|
|
||||||
for (var key in sessions)
|
for (var key in sessions)
|
||||||
if (sessions[key].indexInfo.closed == -1)
|
if (sessions[key].indexInfo.closed == -1)
|
||||||
return sessions[key];
|
return sessions[key];
|
||||||
|
@ -36967,13 +36981,13 @@ window.axolotl.protocol = function(storage_interface) {
|
||||||
if (sessions === undefined)
|
if (sessions === undefined)
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
|
detectDuplicateOpenSessions(sessions, encodedNumber);
|
||||||
|
|
||||||
var searchKey = axolotlInternal.utils.convertToString(remoteEphemeralKey);
|
var searchKey = axolotlInternal.utils.convertToString(remoteEphemeralKey);
|
||||||
|
|
||||||
var openSession = undefined;
|
var openSession = undefined;
|
||||||
for (var key in sessions) {
|
for (var key in sessions) {
|
||||||
if (sessions[key].indexInfo.closed == -1) {
|
if (sessions[key].indexInfo.closed == -1) {
|
||||||
if (openSession !== undefined)
|
|
||||||
throw new Error("Datastore inconsistensy: multiple open sessions for " + encodedNumber);
|
|
||||||
openSession = sessions[key];
|
openSession = sessions[key];
|
||||||
}
|
}
|
||||||
if (sessions[key][searchKey] !== undefined)
|
if (sessions[key][searchKey] !== undefined)
|
||||||
|
@ -37227,8 +37241,10 @@ window.axolotl.protocol = function(storage_interface) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var fillMessageKeys = function(chain, counter) {
|
var fillMessageKeys = function(chain, counter) {
|
||||||
if (chain.chainKey.counter + 1000 < counter) //TODO: maybe 1000 is too low/high in some cases?
|
if (Object.keys(chain.messageKeys).length >= 1000) {
|
||||||
|
console.log("Too many message keys for chain");
|
||||||
return Promise.resolve(); // Stalker, much?
|
return Promise.resolve(); // Stalker, much?
|
||||||
|
}
|
||||||
|
|
||||||
if (chain.chainKey.counter >= counter)
|
if (chain.chainKey.counter >= counter)
|
||||||
return Promise.resolve(); // Already calculated
|
return Promise.resolve(); // Already calculated
|
||||||
|
@ -37313,7 +37329,11 @@ window.axolotl.protocol = function(storage_interface) {
|
||||||
var chain = session[axolotlInternal.utils.convertToString(message.ephemeralKey)];
|
var chain = session[axolotlInternal.utils.convertToString(message.ephemeralKey)];
|
||||||
|
|
||||||
return fillMessageKeys(chain, message.counter).then(function() {
|
return fillMessageKeys(chain, message.counter).then(function() {
|
||||||
return HKDF(axolotlInternal.utils.convertToArrayBuffer(chain.messageKeys[message.counter]), '', "WhisperMessageKeys").then(function(keys) {
|
var messageKey = chain.messageKeys[message.counter];
|
||||||
|
if (messageKey === undefined) {
|
||||||
|
throw new Error("Message key not found. The counter was repeated or the key was not filled.");
|
||||||
|
}
|
||||||
|
return HKDF(axolotlInternal.utils.convertToArrayBuffer(messageKey), '', "WhisperMessageKeys").then(function(keys) {
|
||||||
return storage_interface.getMyIdentityKey().then(function(ourIdentityKey) {
|
return storage_interface.getMyIdentityKey().then(function(ourIdentityKey) {
|
||||||
delete chain.messageKeys[message.counter];
|
delete chain.messageKeys[message.counter];
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue