1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00
metamask-extension/app/scripts/account-import-strategies/index.js
2021-04-16 10:05:13 -05:00

59 lines
1.4 KiB
JavaScript

import log from 'loglevel';
import Wallet from 'ethereumjs-wallet';
import importers from 'ethereumjs-wallet/thirdparty';
import {
toBuffer,
isValidPrivate,
bufferToHex,
stripHexPrefix,
} from 'ethereumjs-util';
import { addHexPrefix } from '../lib/util';
const accountImporter = {
importAccount(strategy, args) {
try {
const importer = this.strategies[strategy];
const privateKeyHex = importer(...args);
return Promise.resolve(privateKeyHex);
} catch (e) {
return Promise.reject(e);
}
},
strategies: {
'Private Key': (privateKey) => {
if (!privateKey) {
throw new Error('Cannot import an empty key.');
}
const prefixed = addHexPrefix(privateKey);
const buffer = toBuffer(prefixed);
if (!isValidPrivate(buffer)) {
throw new Error('Cannot import invalid private key.');
}
const stripped = stripHexPrefix(prefixed);
return stripped;
},
'JSON File': (input, password) => {
let wallet;
try {
wallet = importers.fromEtherWallet(input, password);
} catch (e) {
log.debug('Attempt to import as EtherWallet format failed, trying V3');
wallet = Wallet.fromV3(input, password, true);
}
return walletToPrivateKey(wallet);
},
},
};
function walletToPrivateKey(wallet) {
const privateKeyBuffer = wallet.getPrivateKey();
return bufferToHex(privateKeyBuffer);
}
export default accountImporter;