|
|
@ -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, |
|
|
|