diff --git a/js/models/core/Passphrase.js b/js/models/core/Passphrase.js index 358b21682..04485596c 100644 --- a/js/models/core/Passphrase.js +++ b/js/models/core/Passphrase.js @@ -1,5 +1,7 @@ 'use strict'; +var CryptoJS = CryptoJS || require('crypto-js'); + function Passphrase(config) { config = config || {}; this.salt = config.salt || 'mjuBtGybi/4='; diff --git a/package.json b/package.json index 8e9e91402..26dcad40e 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,8 @@ "node-cryptojs-aes": "0.4.0", "socket.io-client": "1.0.6", "travis-cov": "0.2.5", - "uglifyify": "1.2.3" + "uglifyify": "1.2.3", + "crypto-js": "3.1.2" }, "main": "app.js", "homepage": "https://github.com/bitpay/copay", diff --git a/test/test.Passphrase.js b/test/test.Passphrase.js index bad60109f..54e61726b 100644 --- a/test/test.Passphrase.js +++ b/test/test.Passphrase.js @@ -11,8 +11,6 @@ try { } var Passphrase = copay.Passphrase; - - describe('Passphrase model', function() { it('should create an instance', function() { @@ -20,4 +18,22 @@ describe('Passphrase model', function() { should.exist(p); }); + it('should generate key from password', function () { + var p = new Passphrase({ + salt: 'mjuBtGybi/4=', + iterations: 10, + }); + var pass = '123456'; + var k = p.get(pass); + var k64 = p.getBase64(pass); + + // Note: hashes were generated using CryptoJS + k.toString().should.equal('2283fe11b9a189b82f1c09200806920cbdd8ef752f53dea910f90ab526f441acdbd5128555647a7e390a1a9fea042226963ccd0f7851030b3d6e282ccebaa17e'); + k64.toString().should.equal('IoP+EbmhibgvHAkgCAaSDL3Y73UvU96pEPkKtSb0Qazb1RKFVWR6fjkKGp/qBCImljzND3hRAws9bigszrqhfg=='); + + p.getBase64Async(pass, function (ret) { + ret.toString().should.equal('IoP+EbmhibgvHAkgCAaSDL3Y73UvU96pEPkKtSb0Qazb1RKFVWR6fjkKGp/qBCImljzND3hRAws9bigszrqhfg=='); + }); + }); + });