1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-27 12:56:01 +01:00
metamask-extension/app/scripts/lib/seed-phrase-verifier.js

58 lines
1.9 KiB
JavaScript
Raw Normal View History

import KeyringController from 'eth-keyring-controller'
import log from 'loglevel'
2018-03-03 00:32:57 +01:00
const seedPhraseVerifier = {
/**
* Verifies if the seed words can restore the accounts.
*
* Key notes:
* - The seed words can recreate the primary keyring and the accounts belonging to it.
* - The created accounts in the primary keyring are always the same.
* - The keyring always creates the accounts in the same sequence.
*
* @param {array} createdAccounts - The accounts to restore
* @param {string} seedWords - The seed words to verify
* @returns {Promise<void>} - Promises undefined
*
*/
2018-03-03 00:40:40 +01:00
verifyAccounts (createdAccounts, seedWords) {
2018-03-03 00:32:57 +01:00
return new Promise((resolve, reject) => {
if (!createdAccounts || createdAccounts.length < 1) {
return reject(new Error('No created accounts defined.'))
}
2018-03-03 00:40:40 +01:00
const keyringController = new KeyringController({})
const Keyring = keyringController.getKeyringClassForType('HD Key Tree')
const opts = {
2018-03-03 00:32:57 +01:00
mnemonic: seedWords,
numberOfAccounts: createdAccounts.length,
}
2018-03-03 00:40:40 +01:00
const keyring = new Keyring(opts)
2018-03-03 00:32:57 +01:00
keyring.getAccounts()
.then((restoredAccounts) => {
log.debug('Created accounts: ' + JSON.stringify(createdAccounts))
log.debug('Restored accounts: ' + JSON.stringify(restoredAccounts))
2018-03-03 00:40:40 +01:00
if (restoredAccounts.length !== createdAccounts.length) {
2018-03-03 00:32:57 +01:00
// this should not happen...
2018-03-03 00:40:40 +01:00
return reject(new Error('Wrong number of accounts'))
2018-03-03 00:32:57 +01:00
}
for (let i = 0; i < restoredAccounts.length; i++) {
2018-03-03 14:11:02 +01:00
if (restoredAccounts[i].toLowerCase() !== createdAccounts[i].toLowerCase()) {
2018-03-03 00:32:57 +01:00
return reject(new Error('Not identical accounts! Original: ' + createdAccounts[i] + ', Restored: ' + restoredAccounts[i]))
}
}
return resolve()
})
})
2018-03-03 00:40:40 +01:00
},
2018-03-03 00:32:57 +01:00
}
export default seedPhraseVerifier