Browse Source

Add Async method for converting to seed.

fixTypes
junderw 6 years ago
committed by Jonathan Underwood
parent
commit
ba096d6a80
  1. 27
      index.js
  2. 5
      test/index.js

27
index.js

@ -1,6 +1,8 @@
var Buffer = require('safe-buffer').Buffer
var createHash = require('create-hash')
var pbkdf2 = require('pbkdf2').pbkdf2Sync
var _pbkdf2 = require('pbkdf2')
var pbkdf2 = _pbkdf2.pbkdf2Sync
var pbkdf2Async = _pbkdf2.pbkdf2
var randomBytes = require('randombytes')
// use unorm until String.prototype.normalize gets better browser support
@ -58,6 +60,27 @@ function mnemonicToSeedHex (mnemonic, password) {
return mnemonicToSeed(mnemonic, password).toString('hex')
}
function mnemonicToSeedAsync (mnemonic, password) {
return new Promise(function (resolve, reject) {
try {
var mnemonicBuffer = Buffer.from(unorm.nfkd(mnemonic), 'utf8')
var saltBuffer = Buffer.from(salt(unorm.nfkd(password)), 'utf8')
} catch (error) {
return reject(error)
}
pbkdf2Async(mnemonicBuffer, saltBuffer, 2048, 64, 'sha512', function (err, data) {
if (err) return reject(err)
else return resolve(data)
})
})
}
function mnemonicToSeedHexAsync (mnemonic, password) {
return mnemonicToSeedAsync(mnemonic, password)
.then(function (buf) { return buf.toString('hex') })
}
function mnemonicToEntropy (mnemonic, wordlist) {
wordlist = wordlist || DEFAULT_WORDLIST
@ -132,7 +155,9 @@ function validateMnemonic (mnemonic, wordlist) {
module.exports = {
mnemonicToSeed: mnemonicToSeed,
mnemonicToSeedAsync: mnemonicToSeedAsync,
mnemonicToSeedHex: mnemonicToSeedHex,
mnemonicToSeedHexAsync: mnemonicToSeedHexAsync,
mnemonicToEntropy: mnemonicToEntropy,
entropyToMnemonic: entropyToMnemonic,
generateMnemonic: generateMnemonic,

5
test/index.js

@ -16,10 +16,13 @@ function testVector (description, wordlist, password, v, i) {
var vseedHex = v[2]
test('for ' + description + '(' + i + '), ' + ventropy, function (t) {
t.plan(5)
t.plan(6)
t.equal(bip39.mnemonicToEntropy(vmnemonic, wordlist), ventropy, 'mnemonicToEntropy returns ' + ventropy.slice(0, 40) + '...')
t.equal(bip39.mnemonicToSeedHex(vmnemonic, password), vseedHex, 'mnemonicToSeedHex returns ' + vseedHex.slice(0, 40) + '...')
bip39.mnemonicToSeedHexAsync(vmnemonic, password).then(function (asyncSeedHex) {
t.equal(asyncSeedHex, vseedHex, 'mnemonicToSeedHexAsync returns ' + vseedHex.slice(0, 40) + '...')
})
t.equal(bip39.entropyToMnemonic(ventropy, wordlist), vmnemonic, 'entropyToMnemonic returns ' + vmnemonic.slice(0, 40) + '...')
function rng () { return Buffer.from(ventropy, 'hex') }

Loading…
Cancel
Save