ethereumjs-wallet
A lightweight wallet implementation. At the moment it supports key creation and conversion between various formats.
It is complemented by the following packages:
Motivations are:
- be lightweight
- work in a browser
- use a single, maintained version of crypto library
- support import/export between various wallet formats
Features not supported:
- signing transactions
- managing storage (neither in node.js or the browser)
API
Constructors:
generate([icap])
- create an instance based on a new random key (setting icap
to true will generate an address suitable for the ICAP Direct mode
)fromPrivateKey(input)
- create an instance based on a raw keyfromV1(input, password)
- import a wallet (Version 1 of the Ethereum wallet format)fromV3(input, password)
- import a wallet (Version 3 of the Ethereum wallet format)fromEthSale(input, password)
- import an Ethereum Pre Sale wallet
For the V1, V3 and EthSale formats the input is a JSON serialized string. All these formats require a password.
Third party imports:
fromEtherCamp(passphrase)
- import a brain wallet used by Ether.CampfromEtherWallet(input, password)
- import a wallet generated by EtherWalletfromKryptoKit(seed)
- import a wallet from a KryptoKit seedfromQuorumWallet(passphrase, userid)
- import a brain wallet used by Quorum Wallet
To use these, first import the appropriate submodule:
var thirdparty = require('ethereumjs-wallet/thirdparty')
Instance methods:
getPrivateKey()
- return the private keygetPublicKey()
- return the public keygetAddress()
- return the addressgetChecksumAddressString()
- return the address with checksumtoV3(password, [options])
- return the wallet as a JSON string (Version 3 of the Ethereum wallet format)
All of the above instance methods return a Buffer or JSON. Use the String
suffixed versions for a string output, such as getPrivateKeyString()
.
The options
is an optional object hash, where all the serialization parameters can be fine tuned:
- uuid - UUID. One is randomly generated.
- salt - Random salt for the
kdf
. Size must match the requirements of the KDF (key derivation function). Random number generated via crypto.getRandomBytes
if nothing is supplied. - iv - Initialization vector for the
cipher
. Size must match the requirements of the cipher. Random number generated via crypto.getRandomBytes
if nothing is supplied. - kdf - The key derivation function, see below.
- dklen - Derived key length. For certain
cipher
settings, this must match the block sizes of those. - cipher - The cipher to use. Names must match those of supported by
OpenSSL
, e.g. aes-128-ctr
or aes-128-cbc
.
Depending on the kdf
selected, the following options are available too.
For pbkdf2
:
c
- Number of iterations. Defaults to 262144.prf
- The only supported (and default) value is hmac-sha256
. So no point changing it.
For scrypt
:
n
- Iteration count. Defaults to 262144.r
- Block size for the underlying hash. Defaults to 8.p
- Parallelization factor. Defaults to 1.
The following settings are favoured by the Go Ethereum implementation and we default to the same:
kdf
: scrypt
dklen
: 32
n
: 262144
r
: 8
p
: 1
cipher
: aes-128-ctr