From 4ee9a4d1913c4be02902de62937129027af62e46 Mon Sep 17 00:00:00 2001 From: Richard Moore Date: Fri, 26 Jan 2018 21:56:20 -0500 Subject: [PATCH] Added x-ethers compatible encrypted mnemonic to JSON wallets. --- tests/make-tests/make-wallets.js | 10 +- ...sale-.json => wallet-crowdsale_null-.json} | 0 ...son => wallet-crowdsale_password-foo.json} | 0 .../test-wallets/wallet-ethers1-password.json | 1 + .../test-wallets/wallet-ethers2-password.json | 1 + ...et-test-life.json => wallet-life-foo.json} | 0 ...-.json => wallet-secretstorage_null-.json} | 0 ...=> wallet-secretstorage_password-foo.json} | 0 tests/test-wallet.js | 4 + tests/tests/wallets.json.gz | Bin 1805 -> 2719 bytes wallet/package.json | 2 +- wallet/secret-storage.js | 106 +++++++++++++++--- wallet/wallet.js | 19 +++- 13 files changed, 125 insertions(+), 18 deletions(-) rename tests/make-tests/test-wallets/{wallet-crowdsale-.json => wallet-crowdsale_null-.json} (100%) rename tests/make-tests/test-wallets/{wallet-crowdsale-foo.json => wallet-crowdsale_password-foo.json} (100%) create mode 100644 tests/make-tests/test-wallets/wallet-ethers1-password.json create mode 100644 tests/make-tests/test-wallets/wallet-ethers2-password.json rename tests/make-tests/test-wallets/{wallet-test-life.json => wallet-life-foo.json} (100%) rename tests/make-tests/test-wallets/{wallet-secretstorage-.json => wallet-secretstorage_null-.json} (100%) rename tests/make-tests/test-wallets/{wallet-secretstorage-foo.json => wallet-secretstorage_password-foo.json} (100%) diff --git a/tests/make-tests/make-wallets.js b/tests/make-tests/make-wallets.js index 025056c40..b56a4101e 100644 --- a/tests/make-tests/make-wallets.js +++ b/tests/make-tests/make-wallets.js @@ -32,8 +32,15 @@ var privateKeys = { '0x4a9cf99357f5789251a8d7fad5b86d0f31eeb938': '0xa016182717223d01f776149ec0b4a217d0e9930cad263f205427c6d3cd5560e7', '0x88a5c2d9919e46f883eb62f7b8dd9d0cc45bc290': '0xf03e581353c794928373fb0893bc731aefc4c4e234e643f3a46998b03cd4d7c5', '0x17c5185167401ed00cf5f5b2fc97d9bbfdb7d025': '0x4242424242424242424242424242424242424242424242424242424242424242', + '0x012363d61bdc53d0290a0f25e9c89f8257550fb8': '0x4c94faa2c558a998d10ee8b2b9b8eb1fbcb8a6ac5fd085c6f95535604fc1bffb', + '0x15db397ed5f682acb22b0afc6c8de4cdfbda7cbc': '0xcdf3c34a2ea0ff181f462856168f5851e68c37b583eb158403e43aeab4964fee' } +var mnemonics = { + '0x15db397ed5f682acb22b0afc6c8de4cdfbda7cbc': 'debris glass rich exotic window other film slow expose flight either wealth', + '0x012363d61bdc53d0290a0f25e9c89f8257550fb8': 'service basket parent alcohol fault similar survey twelve hockey cloud walk panel' +}; + var walletPath = path.join(__dirname, 'test-wallets'); fs.readdirSync(walletPath).forEach(function(filename) { var data = require(path.join(walletPath, filename)); @@ -44,8 +51,6 @@ fs.readdirSync(walletPath).forEach(function(filename) { var password = filename.substring(0, filename.length - 5).split('-'); password = password[password.length - 1]; - if (password === 'life') { password = 'foo'; } - if (data.ethaddr) { Output.push({ type: 'crowdsale', @@ -61,6 +66,7 @@ fs.readdirSync(walletPath).forEach(function(filename) { type: 'secret-storage', address: prefixAddress(data.address), json: JSON.stringify(data), + mnemonic: mnemonics[prefixAddress(data.address)] || '', name: name, password: password, privateKey: privateKeys[prefixAddress(data.address)], diff --git a/tests/make-tests/test-wallets/wallet-crowdsale-.json b/tests/make-tests/test-wallets/wallet-crowdsale_null-.json similarity index 100% rename from tests/make-tests/test-wallets/wallet-crowdsale-.json rename to tests/make-tests/test-wallets/wallet-crowdsale_null-.json diff --git a/tests/make-tests/test-wallets/wallet-crowdsale-foo.json b/tests/make-tests/test-wallets/wallet-crowdsale_password-foo.json similarity index 100% rename from tests/make-tests/test-wallets/wallet-crowdsale-foo.json rename to tests/make-tests/test-wallets/wallet-crowdsale_password-foo.json diff --git a/tests/make-tests/test-wallets/wallet-ethers1-password.json b/tests/make-tests/test-wallets/wallet-ethers1-password.json new file mode 100644 index 000000000..a609bddde --- /dev/null +++ b/tests/make-tests/test-wallets/wallet-ethers1-password.json @@ -0,0 +1 @@ +{"address":"012363d61bdc53d0290a0f25e9c89f8257550fb8","id":"5ba8719b-faf9-49ec-8bca-21522e3d56dc","version":3,"Crypto":{"cipher":"aes-128-ctr","cipherparams":{"iv":"bc0473d60284d2d6994bb6793e916d06"},"ciphertext":"e73ed0b0c53bcaea4516a15faba3f6d76dbe71b9b46a460ed7e04a68e0867dd7","kdf":"scrypt","kdfparams":{"salt":"97f0b6e17c392f76a726ceea02bac98f17265f1aa5cf8f9ad1c2b56025bc4714","n":131072,"dklen":32,"p":1,"r":8},"mac":"ff4f2db7e7588f8dd41374d7b98dfd7746b554c0099a6c0765be7b1c7913e1f3"},"x-ethers":{"client":"ethers.js","gethFilename":"UTC--2018-01-27T01-52-22.0Z--012363d61bdc53d0290a0f25e9c89f8257550fb8","mnemonicCounter":"70224accc00e35328a010a19fef51121","mnemonicCiphertext":"cf835e13e4f90b190052263dbd24b020","version":"0.1"}} diff --git a/tests/make-tests/test-wallets/wallet-ethers2-password.json b/tests/make-tests/test-wallets/wallet-ethers2-password.json new file mode 100644 index 000000000..f4546dc9a --- /dev/null +++ b/tests/make-tests/test-wallets/wallet-ethers2-password.json @@ -0,0 +1 @@ +{"version":3,"id":"05D302EE-23DC-48C4-B89C-CAAAC1C780C4","x-ethers":{"gethFilename":"UTC--2018-01-26T20-25-02.0Z--15db397ed5f682acb22b0afc6c8de4cdfbda7cbc","mnemonicCiphertext":"b92c7c3da540ae7beee55365fb330c33","mnemonicCounter":"a65d689a73c096025f2acae3f7068510","client":"ethers/iOS","version":"0.1"},"Crypto":{"ciphertext":"fa6ff2374087a089ec9fcba3bc21389f5e26ec2932c95b608ebe0218efab83c6","cipherparams":{"iv":"5ddca45b254406516ca2c97d18d5dfd9"},"kdf":"scrypt","kdfparams":{"r":8,"p":1,"n":262144,"dklen":32,"salt":"864a474f8586ab0fa97ed9240ae6227b2b22b48bdf298137c355e4a07eb19831"},"mac":"eaa89325acedbf88c0893e53c8c8d426b590655746c66da9cd76e4f72d84084f","cipher":"aes-128-ctr"},"address":"15db397ed5f682acb22b0afc6c8de4cdfbda7cbc"} diff --git a/tests/make-tests/test-wallets/wallet-test-life.json b/tests/make-tests/test-wallets/wallet-life-foo.json similarity index 100% rename from tests/make-tests/test-wallets/wallet-test-life.json rename to tests/make-tests/test-wallets/wallet-life-foo.json diff --git a/tests/make-tests/test-wallets/wallet-secretstorage-.json b/tests/make-tests/test-wallets/wallet-secretstorage_null-.json similarity index 100% rename from tests/make-tests/test-wallets/wallet-secretstorage-.json rename to tests/make-tests/test-wallets/wallet-secretstorage_null-.json diff --git a/tests/make-tests/test-wallets/wallet-secretstorage-foo.json b/tests/make-tests/test-wallets/wallet-secretstorage_password-foo.json similarity index 100% rename from tests/make-tests/test-wallets/wallet-secretstorage-foo.json rename to tests/make-tests/test-wallets/wallet-secretstorage_password-foo.json diff --git a/tests/test-wallet.js b/tests/test-wallet.js index 804f02335..0990cf622 100644 --- a/tests/test-wallet.js +++ b/tests/test-wallet.js @@ -41,6 +41,10 @@ describe('Test JSON Wallets', function() { 'generated correct private key - ' + wallet.privateKey); assert.equal(wallet.address.toLowerCase(), test.address, 'generate correct address - ' + wallet.address); + if (test.mnemonic) { + assert.equal(wallet.mnemonic, test.mnemonic, + 'mnemonic enabled encrypted wallet has a mnemonic'); + } }); }); }); diff --git a/tests/tests/wallets.json.gz b/tests/tests/wallets.json.gz index d09b64086c5d79c3c03873b9f5cd2474b80cb449..09c6e3876d3916ed43536df09c7de05d7a7a624b 100644 GIT binary patch literal 2719 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