Skip to content

Commit

Permalink
Merge pull request ethereum#2493 from almindor/develop
Browse files Browse the repository at this point in the history
eth: add personal_importRawKey
  • Loading branch information
fjl committed Apr 29, 2016
2 parents cfa999f + 572da73 commit 1c20313
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 7 deletions.
7 changes: 6 additions & 1 deletion accounts/account_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,12 @@ func (am *Manager) Import(keyJSON []byte, passphrase, newPassphrase string) (Acc

// ImportECDSA stores the given key into the key directory, encrypting it with the passphrase.
func (am *Manager) ImportECDSA(priv *ecdsa.PrivateKey, passphrase string) (Account, error) {
return am.importKey(newKeyFromECDSA(priv), passphrase)
key := newKeyFromECDSA(priv)
if am.cache.hasAddress(key.Address) {
return Account{}, fmt.Errorf("account already exists")
}

return am.importKey(key, passphrase)
}

func (am *Manager) importKey(key *Key, passphrase string) (Account, error) {
Expand Down
11 changes: 11 additions & 0 deletions eth/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package eth

import (
"bytes"
"encoding/hex"
"encoding/json"
"errors"
"fmt"
Expand Down Expand Up @@ -448,6 +449,16 @@ func (s *PrivateAccountAPI) NewAccount(password string) (common.Address, error)
return common.Address{}, err
}

func (s *PrivateAccountAPI) ImportRawKey(privkey string, password string) (common.Address, error) {
hexkey, err := hex.DecodeString(privkey)
if err != nil {
return common.Address{}, err
}

acc, err := s.am.ImportECDSA(crypto.ToECDSA(hexkey), password)
return acc.Address, err
}

// UnlockAccount will unlock the account associated with the given address with
// the given password for duration seconds. If duration is nil it will use a
// default of 300 seconds. It returns an indication if the account was unlocked.
Expand Down
27 changes: 21 additions & 6 deletions internal/web3ext/web3ext.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@
package web3ext

var Modules = map[string]string{
"txpool": TxPool_JS,
"admin": Admin_JS,
"eth": Eth_JS,
"miner": Miner_JS,
"debug": Debug_JS,
"net": Net_JS,
"txpool": TxPool_JS,
"admin": Admin_JS,
"personal": Personal_JS,
"eth": Eth_JS,
"miner": Miner_JS,
"debug": Debug_JS,
"net": Net_JS,
}

const TxPool_JS = `
Expand Down Expand Up @@ -175,6 +176,20 @@ web3._extend({
});
`

const Personal_JS = `
web3._extend({
property: 'personal',
methods:
[
new web3._extend.Method({
name: 'importRawKey',
call: 'personal_importRawKey',
params: 2
})
]
});
`

const Eth_JS = `
web3._extend({
property: 'eth',
Expand Down

0 comments on commit 1c20313

Please sign in to comment.