This commit is contained in:
Mo Bitar
2018-05-15 12:06:14 -05:00
parent ff9993717c
commit 8307fd4446
6 changed files with 65 additions and 84 deletions

View File

@@ -28,7 +28,7 @@ angular.module('app')
this.unlock = function(passcode, callback) {
var params = this.passcodeAuthParams();
SFJS.crypto.computeEncryptionKeysForUser(_.merge({password: passcode}, params), function(keys){
SFJS.crypto.computeEncryptionKeysForUser(passcode, params, (keys) => {
if(keys.pw !== params.hash) {
callback(false);
return;
@@ -38,26 +38,24 @@ angular.module('app')
this.decryptLocalStorage(keys);
this._locked = false;
callback(true);
}.bind(this));
});
}
this.setPasscode = (passcode, callback) => {
var cost = SFJS.crypto.defaultPasswordGenerationCost();
var salt = SFJS.crypto.generateRandomKey(512);
var defaultParams = {pw_cost: cost, pw_salt: salt, version: "002"};
var uuid = SFJS.crypto.generateUUID();
SFJS.crypto.computeEncryptionKeysForUser(_.merge({password: passcode}, defaultParams), function(keys) {
defaultParams.hash = keys.pw;
SFJS.crypto.generateInitialEncryptionKeysForUser(uuid, passcode, (keys, authParams) => {
authParams.hash = keys.pw;
this._keys = keys;
this._hasPasscode = true;
// Encrypting will initially clear localStorage
this.encryptLocalStorage(keys);
this.encryptLocalStorage(keys, authParams);
// After it's cleared, it's safe to write to it
storageManager.setItem("offlineParams", JSON.stringify(defaultParams), StorageManager.Fixed);
storageManager.setItem("offlineParams", JSON.stringify(authParams), StorageManager.Fixed);
callback(true);
}.bind(this));
});
}
this.changePasscode = (newPasscode, callback) => {
@@ -71,7 +69,7 @@ angular.module('app')
this._hasPasscode = false;
}
this.encryptLocalStorage = function(keys) {
this.encryptLocalStorage = function(keys, authParams) {
storageManager.setKeys(keys);
// Switch to Ephemeral storage, wiping Fixed storage
// Last argument is `force`, which we set to true because in the case of changing passcode