Encapsulate message sending to hide parameter

This commit is contained in:
Matt Corallo 2015-01-20 18:32:10 -10:00 committed by lilia
parent bfb3e7751e
commit 412f206efc

View file

@ -454,11 +454,7 @@ window.axolotl.protocol = function() {
return finish(); return finish();
} }
/************************* var doDecryptWhisperMessage = function(encodedNumber, messageBytes, session, registrationId) {
*** Public crypto API ***
*************************/
// returns decrypted plaintext and a function that MUST BE CALLED SYNCHRONOUSLY if the message indicates session close
self.decryptWhisperMessage = function(encodedNumber, messageBytes, session, registrationId) {
if (messageBytes[0] != String.fromCharCode((3 << 4) | 3)) if (messageBytes[0] != String.fromCharCode((3 << 4) | 3))
throw new Error("Bad version number on WhisperMessage"); throw new Error("Bad version number on WhisperMessage");
@ -510,7 +506,7 @@ window.axolotl.protocol = function() {
return [plaintext, function() { return [plaintext, function() {
closeSession(session, true); closeSession(session, true);
removeOldChains(session); removeOldChains(session);
crypto_storage.saveSession(encodedNumber, session, registrationId); crypto_storage.saveSession(encodedNumber, session);
}]; }];
}); });
}); });
@ -519,11 +515,21 @@ window.axolotl.protocol = function() {
}); });
} }
/*************************
*** Public crypto API ***
*************************/
//TODO: SHARP EDGE HERE
//XXX: Also, you MUST call the session close function before processing another message....except its a promise...so you literally cant!
// returns decrypted plaintext and a function that must be called if the message indicates session close
self.decryptWhisperMessage = function(encodedNumber, messageBytes, session) {
return doDecryptWhisperMessage(encodedNumber, messageBytes, session);
}
// Inits a session (maybe) and then decrypts the message // Inits a session (maybe) and then decrypts the message
self.handlePreKeyWhisperMessage = function(from, encodedMessage) { self.handlePreKeyWhisperMessage = function(from, encodedMessage) {
var preKeyProto = axolotl.protobuf.PreKeyWhisperMessage.decode(encodedMessage, 'binary'); var preKeyProto = axolotl.protobuf.PreKeyWhisperMessage.decode(encodedMessage, 'binary');
return initSessionFromPreKeyWhisperMessage(from, preKeyProto).then(function(sessions) { return initSessionFromPreKeyWhisperMessage(from, preKeyProto).then(function(sessions) {
return self.decryptWhisperMessage(from, getString(preKeyProto.message), sessions[0], preKeyProto.registrationId).then(function(result) { return doDecryptWhisperMessage(from, getString(preKeyProto.message), sessions[0], preKeyProto.registrationId).then(function(result) {
if (sessions[1] !== undefined) if (sessions[1] !== undefined)
sessions[1](); sessions[1]();
return result; return result;