From 3845c55155bd928bae6fb8b58822f49b21afc071 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Wed, 31 May 2017 11:05:52 -0400 Subject: [PATCH] generate enc key on registration --- src/app/accounts/accountsRegisterController.js | 4 +++- src/app/services/authService.js | 6 +++--- src/app/services/cryptoService.js | 15 ++++++++++++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/app/accounts/accountsRegisterController.js b/src/app/accounts/accountsRegisterController.js index 3591d54ca7..9adf37e4ba 100644 --- a/src/app/accounts/accountsRegisterController.js +++ b/src/app/accounts/accountsRegisterController.js @@ -42,13 +42,15 @@ angular var email = $scope.model.email.toLowerCase(); var key = cryptoService.makeKey($scope.model.masterPassword, email); + var encKey = cryptoService.makeEncKey(key); - $scope.registerPromise = cryptoService.makeKeyPair(key).then(function (result) { + $scope.registerPromise = cryptoService.makeKeyPair(encKey.encKey).then(function (result) { var request = { name: $scope.model.name, email: email, masterPasswordHash: cryptoService.hashPassword($scope.model.masterPassword, key), masterPasswordHint: $scope.model.masterPasswordHint, + key: encKey.encKeyEnc, keys: { publicKey: result.publicKey, encryptedPrivateKey: result.privateKeyEnc diff --git a/src/app/services/authService.js b/src/app/services/authService.js index 13aa291efc..bf26d53a9f 100644 --- a/src/app/services/authService.js +++ b/src/app/services/authService.js @@ -40,18 +40,18 @@ angular } if (response.PrivateKey) { - cryptoService.setPrivateKey(response.PrivateKey, key); + cryptoService.setPrivateKey(response.PrivateKey); return true; } else { - return cryptoService.makeKeyPair(key); + return cryptoService.makeKeyPair(); } }).then(function (keyResults) { if (keyResults === true) { return; } - cryptoService.setPrivateKey(keyResults.privateKeyEnc, key); + cryptoService.setPrivateKey(keyResults.privateKeyEnc); return apiService.accounts.putKeys({ publicKey: keyResults.publicKey, encryptedPrivateKey: keyResults.privateKeyEnc diff --git a/src/app/services/cryptoService.js b/src/app/services/cryptoService.js index f007c2b30e..f7ecbb7198 100644 --- a/src/app/services/cryptoService.js +++ b/src/app/services/cryptoService.js @@ -57,7 +57,7 @@ angular setKey = true; } catch (e) { - console.log('Cannot set org key ' + i + '. Decryption failed.'); + console.log('Cannot set org key for ' + orgId + '. Decryption failed.'); } } } @@ -236,6 +236,19 @@ angular return new SymmetricCryptoKey(keyBytes); }; + _service.makeEncKey = function (key) { + if (!key) { + throw 'Invalid parameters.'; + } + + var encKey = forge.random.getBytesSync(512 / 8); + var encKeyEnc = _service.encrypt(encKey, key, 'raw'); + return { + encKey: new SymmetricCryptoKey(encKey), + encKeyEnc: encKeyEnc + }; + }; + _service.makeKeyPair = function (key) { var deferred = $q.defer();