docs/03_keosd/35_wallet-specification.md
Wallet Import Format is an encoding for a private EDSA key. EOS uses the same version, checksum, and encoding scheme as the Bitcoin WIF addresses and should be compatible with existing libraries [1].
This is an example of a WIF Private Key:
5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAbuatmU
This encoding is good for:
This encoding is not good for:
Considerations:
0000000000000000000000000000000000000000000000000000000000000000
800000000000000000000000000000000000000000000000000000000000000000
ce145d282834c009c24410812a60588c1085b63d65a7effc2e0a5e3a2e21b236
0565fba7ebf8143516e0222d7950c28589a34c3ee144c3876ceb01bfb0e9bb70
0565fba7
8000000000000000000000000000000000000000000000000000000000000000000565fba7
5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAbuatmU
5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAbuatmU
8000000000000000000000000000000000000000000000000000000000000000000565fba7
800000000000000000000000000000000000000000000000000000000000000000
0565fba7
ce145d282834c009c24410812a60588c1085b63d65a7effc2e0a5e3a2e21b236
0565fba7ebf8143516e0222d7950c28589a34c3ee144c3876ceb01bfb0e9bb70
0565fba7
Make sure the checksum in steps 3 and 6 match.
Slice the versioned private key from step 3 into the version and private key.
80
0000000000000000000000000000000000000000000000000000000000000000
Base58Check is a JavaScript implementation of this algorithm and may be used to encode and decode EOS WIF private keys.
base58check = require('base58check')
wif = base58check.encode(privateKey = '00'.repeat(32), version = '80', encoding = 'hex')
assert.equal('5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAbuatmU', wif)
let {prefix, data} = base58check.decode(wif)
assert.equal(prefix.toString('hex'), '80')
assert.equal(data.toString('hex'), '00'.repeat(32))
[1] Bitcoin WIF format - https://en.bitcoin.it/wiki/Wallet_import_format