Socket
Socket
Sign inDemoInstall

bip39

Package Overview
Dependencies
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bip39 - npm Package Compare versions

Comparing version 2.1.0 to 2.1.2

.travis.yml

21

index.js
var assert = require('assert')
var crypto = require('crypto')
var pbkdf2 = require('pbkdf2-compat').pbkdf2Sync
var createHash = require('create-hash')
var pbkdf2 = require('pbkdf2').pbkdf2Sync
var randomBytes = require('randombytes')
var unorm = require('unorm')

@@ -8,3 +10,6 @@ var DEFAULT_WORDLIST = require('./wordlists/en.json')

function mnemonicToSeed(mnemonic, password) {
return pbkdf2(mnemonic, salt(password), 2048, 64, 'sha512')
var mnemonicBuffer = new Buffer(mnemonic, 'utf8')
var saltBuffer = new Buffer(salt(password), 'utf8')
return pbkdf2(mnemonicBuffer, saltBuffer, 2048, 64, 'sha512')
}

@@ -72,3 +77,3 @@

strength = strength || 128
rng = rng || crypto.randomBytes
rng = rng || randomBytes

@@ -90,3 +95,3 @@ var hex = rng(strength / 8).toString('hex')

function checksumBits(entropyBuffer) {
var hash = crypto.createHash('sha256').update(entropyBuffer).digest()
var hash = createHash('sha256').update(entropyBuffer).digest()

@@ -101,9 +106,5 @@ // Calculated constants from BIP39

function salt(password) {
return encode_utf8('mnemonic' + (password || ''))
return 'mnemonic' + (unorm.nfkd(password) || '') // Use unorm until String.prototype.normalize gets better browser support
}
function encode_utf8(s) {
return unescape(encodeURIComponent(s))
}
//=========== helper methods from bitcoinjs-lib ========

@@ -110,0 +111,0 @@

{
"name": "bip39",
"version": "2.1.0",
"version": "2.1.2",
"description": "Bitcoin BIP39: Mnemonic code for generating deterministic keys",

@@ -8,3 +8,3 @@ "main": "index.js",

"test": "mocha --reporter list test/*.js",
"compile": "browserify index.js -s BIP39 > bip39.js"
"compile": "browserify index.js -s bip39 > bip39.js"
},

@@ -25,22 +25,12 @@ "author": "Wei Lu",

"dependencies": {
"pbkdf2-compat": "2.0.0"
"create-hash": "^1.1.0",
"pbkdf2": "^3.0.0",
"randombytes": "^2.0.1",
"unorm": "^1.3.3"
},
"devDependencies": {
"browserify": "^5.12.0",
"mocha": "^1.17.1",
"sinon": "^1.10.3"
},
"testling": {
"browsers": [
"android-browser/4.2..latest",
"chrome/20..latest",
"firefox/21..latest",
"ipad/6..latest",
"iphone/6..latest",
"opera/15..latest",
"safari/latest"
],
"harness": "mocha-bdd",
"files": "test/*.js"
"browserify": "^9.0.0",
"mocha": "^2.2.0",
"mock-require": "^1.0.5"
}
}
BIP39
=====
[![Build Status](https://travis-ci.org/weilu/bip39.png?branch=master)](https://travis-ci.org/weilu/bip39)
JavaScript implementation of [Bitcoin BIP39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki): Mnemonic code for generating deterministic keys

@@ -11,24 +13,24 @@

```javascript
var BIP39 = require('bip39')
var bip39 = require('bip39')
var mnemonic = BIP39.entropyToMnemonic('1337') // hex input, defaults to BIP39 English word list
var mnemonic = bip39.entropyToMnemonic('1337') // hex input, defaults to BIP39 English word list
// 'basket actual'
BIP39.mnemonicToEntropy(mnemonic) // hex input, defaults to BIP39 English word list
bip39.mnemonicToEntropy(mnemonic) // hex input, defaults to BIP39 English word list
// '1337'
// Generate a random mnemonic using crypto.randomBytes
mnemonic = BIP39.generateMnemonic() // strength defaults to 128 bits
mnemonic = bip39.generateMnemonic() // strength defaults to 128 bits
// 'seed sock milk update focus rotate barely fade car face mechanic mercy'
BIP39.mnemonicToSeedHex('basket actual')
bip39.mnemonicToSeedHex('basket actual')
// '5cf2d4a8b0355e90295bdfc565a022a409af063d5365bb57bf74d9528f494bfa4400f53d8349b80fdae44082d7f9541e1dba2b003bcfec9d0d53781ca676651f'
BIP39.mnemonicToSeed('basket actual')
bip39.mnemonicToSeed('basket actual')
// <Buffer 5c f2 d4 a8 b0 35 5e 90 29 5b df c5 65 a0 22 a4 09 af 06 3d 53 65 bb 57 bf 74 d9 52 8f 49 4b fa 44 00 f5 3d 83 49 b8 0f da e4 40 82 d7 f9 54 1e 1d ba 2b ...>
BIP39.validateMnemonic(mnemonic)
bip39.validateMnemonic(mnemonic)
// true
BIP39.validateMnemonic('basket actual')
bip39.validateMnemonic('basket actual')
// false

@@ -43,2 +45,2 @@ ```

After loading this file in your browser, you will be able to use the global `BIP39` object.
After loading this file in your browser, you will be able to use the global `bip39` object.
var assert = require('assert')
var crypto = require('crypto')
var mock = require('mock-require')
mock('randombytes', function(size) {
return new Buffer('qwertyuiopasdfghjklzxcvbnm[];,./'.slice(0, size))
})
var BIP39 = require('../index.js')
var sinon = require('sinon')

@@ -54,9 +58,7 @@ var wordlists = {

vectors.english.forEach(function(v, i) {
it('works for tests vector ' + i, sinon.test(function() {
this.mock(crypto).expects('randomBytes')
.exactly(1)
.onCall(0).returns(new Buffer(v[0], 'hex'))
it('works for tests vector ' + i, function() {
function rng() { return new Buffer(v[0], 'hex') }
assert.equal(BIP39.generateMnemonic(), v[1])
}))
assert.equal(BIP39.generateMnemonic(undefined, rng), v[1])
})
})

@@ -71,2 +73,6 @@

it('defaults to randombytes for the RNG', function() {
assert.equal(BIP39.generateMnemonic(32), 'imitate robot frequent')
})
it('allows a custom RNG to be used', function() {

@@ -125,2 +131,16 @@ var rng = function(size) {

})
describe('utf8 passwords', function() {
vectors.japanese.forEach(function(v) {
it ('creates the correct seed', function() {
var utf8Password = "㍍ガバヴァぱばぐゞちぢ十人十色"
assert.equal(BIP39.mnemonicToSeedHex(v[1], utf8Password), v[2])
})
it ('works with already normalized password', function() {
var normalizedPassword = "メートルガバヴァぱばぐゞちぢ十人十色"
assert.equal(BIP39.mnemonicToSeedHex(v[1], normalizedPassword), v[2])
})
})
})
})

@@ -135,3 +135,10 @@ {

]
],
"japanese": [
[
"00000000000000000000000000000000",
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",
"ba553eedefe76e67e2602dc20184c564010859faada929a090dd2c57aacb204ceefd15404ab50ef3e8dbeae5195aeae64b0def4d2eead1cdc728a33ced520ffd"
]
]
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc