aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/keyrings/simple.js
diff options
context:
space:
mode:
authorDan Finlay <dan@danfinlay.com>2017-02-22 06:25:47 +0800
committerDan Finlay <dan@danfinlay.com>2017-02-22 06:25:47 +0800
commit0584988688a471698e9b3ad05cb0597f0270ea9e (patch)
treebdcbb009636dcdea67abcc28238023dd8bf7e882 /app/scripts/keyrings/simple.js
parent29f07238f443007a03c968349af4d3fca7e10522 (diff)
downloadtangerine-wallet-browser-0584988688a471698e9b3ad05cb0597f0270ea9e.tar.gz
tangerine-wallet-browser-0584988688a471698e9b3ad05cb0597f0270ea9e.tar.zst
tangerine-wallet-browser-0584988688a471698e9b3ad05cb0597f0270ea9e.zip
Move sigUtil and keyrings to external modules
These external modules now have their own test coverage and build enforcement. This allowed me to somewhat more easily add good tests around our personalSign strategy (held now in [eth-sig-util](https://github.com/flyswatter/eth-sig-util), and allow each of the keyrings to import that, etc.
Diffstat (limited to 'app/scripts/keyrings/simple.js')
-rw-r--r--app/scripts/keyrings/simple.js100
1 files changed, 0 insertions, 100 deletions
diff --git a/app/scripts/keyrings/simple.js b/app/scripts/keyrings/simple.js
deleted file mode 100644
index 82881aa2d..000000000
--- a/app/scripts/keyrings/simple.js
+++ /dev/null
@@ -1,100 +0,0 @@
-const EventEmitter = require('events').EventEmitter
-const Wallet = require('ethereumjs-wallet')
-const ethUtil = require('ethereumjs-util')
-const type = 'Simple Key Pair'
-const sigUtil = require('../lib/sig-util')
-
-class SimpleKeyring extends EventEmitter {
-
- /* PUBLIC METHODS */
-
- constructor (opts) {
- super()
- this.type = type
- this.opts = opts || {}
- this.wallets = []
- }
-
- serialize () {
- return Promise.resolve(this.wallets.map(w => w.getPrivateKey().toString('hex')))
- }
-
- deserialize (privateKeys = []) {
- return new Promise((resolve, reject) => {
- try {
- this.wallets = privateKeys.map((privateKey) => {
- const stripped = ethUtil.stripHexPrefix(privateKey)
- const buffer = new Buffer(stripped, 'hex')
- const wallet = Wallet.fromPrivateKey(buffer)
- return wallet
- })
- } catch (e) {
- reject(e)
- }
- resolve()
- })
- }
-
- addAccounts (n = 1) {
- var newWallets = []
- for (var i = 0; i < n; i++) {
- newWallets.push(Wallet.generate())
- }
- this.wallets = this.wallets.concat(newWallets)
- const hexWallets = newWallets.map(w => ethUtil.bufferToHex(w.getAddress()))
- return Promise.resolve(hexWallets)
- }
-
- getAccounts () {
- return Promise.resolve(this.wallets.map(w => ethUtil.bufferToHex(w.getAddress())))
- }
-
- // tx is an instance of the ethereumjs-transaction class.
- signTransaction (address, tx) {
- const wallet = this._getWalletForAccount(address)
- var privKey = wallet.getPrivateKey()
- tx.sign(privKey)
- return Promise.resolve(tx)
- }
-
- // For eth_sign, we need to sign transactions:
- signMessage (withAccount, data) {
- const wallet = this._getWalletForAccount(withAccount)
- const message = ethUtil.stripHexPrefix(data)
- var privKey = wallet.getPrivateKey()
- var msgSig = ethUtil.ecsign(new Buffer(message, 'hex'), privKey)
- var rawMsgSig = ethUtil.bufferToHex(sigUtil.concatSig(msgSig.v, msgSig.r, msgSig.s))
- return Promise.resolve(rawMsgSig)
- }
-
- // For eth_sign, we need to sign transactions:
-
- newGethSignMessage (withAccount, msgHex) {
- const wallet = this._getWalletForAccount(withAccount)
- const privKey = wallet.getPrivateKey()
- const msgBuffer = ethUtil.toBuffer(msgHex)
- const msgHash = ethUtil.hashPersonalMessage(msgBuffer)
- const msgSig = ethUtil.ecsign(msgHash, privKey)
- const rawMsgSig = ethUtil.bufferToHex(sigUtil.concatSig(msgSig.v, msgSig.r, msgSig.s))
- return Promise.resolve(rawMsgSig)
- }
-
- exportAccount (address) {
- const wallet = this._getWalletForAccount(address)
- return Promise.resolve(wallet.getPrivateKey().toString('hex'))
- }
-
-
- /* PRIVATE METHODS */
-
- _getWalletForAccount (account) {
- const address = sigUtil.normalize(account)
- let wallet = this.wallets.find(w => ethUtil.bufferToHex(w.getAddress()) === address)
- if (!wallet) throw new Error('Simple Keyring - Unable to find matching address.')
- return wallet
- }
-
-}
-
-SimpleKeyring.type = type
-module.exports = SimpleKeyring