Socket
Socket
Sign inDemoInstall

bip39

Package Overview
Dependencies
Maintainers
2
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.2.0 to 2.3.0

util/wordlists.js

92

index.js

@@ -1,34 +0,41 @@

var assert = require('assert')
var createHash = require('create-hash')
var pbkdf2 = require('pbkdf2').pbkdf2Sync
var randomBytes = require('randombytes')
// use unorm until String.prototype.normalize gets better browser support
var unorm = require('unorm')
var DEFAULT_WORDLIST = require('./wordlists/en.json')
var ENGLISH_WORDLIST = require('./wordlists/english.json')
var FRENCH_WORDLIST = require('./wordlists/french.json')
var ITALIAN_WORDLIST = require('./wordlists/italian.json')
var JAPANESE_WORDLIST = require('./wordlists/japanese.json')
var SPANISH_WORDLIST = require('./wordlists/spanish.json')
var DEFAULT_WORDLIST = ENGLISH_WORDLIST
function mnemonicToSeed(mnemonic, password) {
var mnemonicBuffer = new Buffer(mnemonic, 'utf8')
var saltBuffer = new Buffer(salt(password), 'utf8')
function salt (password) {
return 'mnemonic' + (password || '')
}
function mnemonicToSeed (mnemonic, password) {
var mnemonicBuffer = new Buffer(unorm.nfkd(mnemonic), 'utf8')
var saltBuffer = new Buffer(salt(unorm.nfkd(password)), 'utf8')
return pbkdf2(mnemonicBuffer, saltBuffer, 2048, 64, 'sha512')
}
function mnemonicToSeedHex(mnemonic, password) {
function mnemonicToSeedHex (mnemonic, password) {
return mnemonicToSeed(mnemonic, password).toString('hex')
}
function mnemonicToEntropy(mnemonic, wordlist) {
function mnemonicToEntropy (mnemonic, wordlist) {
wordlist = wordlist || DEFAULT_WORDLIST
var words = mnemonic.split(' ')
assert(words.length % 3 === 0, 'Invalid mnemonic')
var words = unorm.nfkd(mnemonic).split(' ')
if (words.length % 3 !== 0) throw new Error('Invalid mnemonic')
if (words.some(function (word) {
return wordlist.indexOf(word) === -1
})) throw new Error('Invalid mnemonic')
var belongToList = words.every(function(word) {
return wordlist.indexOf(word) > -1
})
assert(belongToList, 'Invalid mnemonic')
// convert word indices to 11 bit binary strings
var bits = words.map(function(word) {
var bits = words.map(function (word) {
var index = wordlist.indexOf(word)

@@ -44,3 +51,3 @@ return lpad(index.toString(2), '0', 11)

// calculate the checksum and compare
var entropyBytes = entropy.match(/(.{1,8})/g).map(function(bin) {
var entropyBytes = entropy.match(/(.{1,8})/g).map(function (bin) {
return parseInt(bin, 2)

@@ -51,8 +58,18 @@ })

assert(newChecksum === checksum, 'Invalid mnemonic checksum')
// recreate properly chunked and padded bits to get the properly padded checksum
var bits2 = (entropy + newChecksum).match(/(.{1,11})/g).map(function (index) {
return lpad(index, '0', 11)
}).join('')
var dividerIndex2 = Math.floor(bits2.length / 33) * 32
var newChecksum2 = bits2.slice(dividerIndex2)
if (newChecksum2 !== checksum) {
throw new Error('Invalid mnemonic checksum')
}
return entropyBuffer.toString('hex')
}
function entropyToMnemonic(entropy, wordlist) {
function entropyToMnemonic (entropy, wordlist) {
wordlist = wordlist || DEFAULT_WORDLIST

@@ -67,3 +84,3 @@

var words = chunks.map(function(binary) {
var words = chunks.map(function (binary) {
var index = parseInt(binary, 2)

@@ -74,6 +91,6 @@

return words.join(' ')
return wordlist === JAPANESE_WORDLIST ? words.join('\u3000') : words.join(' ')
}
function generateMnemonic(strength, rng, wordlist) {
function generateMnemonic (strength, rng, wordlist) {
strength = strength || 128

@@ -86,3 +103,3 @@ rng = rng || randomBytes

function validateMnemonic(mnemonic, wordlist) {
function validateMnemonic (mnemonic, wordlist) {
try {

@@ -97,3 +114,3 @@ mnemonicToEntropy(mnemonic, wordlist)

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

@@ -108,17 +125,13 @@

function salt(password) {
return 'mnemonic' + (unorm.nfkd(password) || '') // Use unorm until String.prototype.normalize gets better browser support
}
// =========== helper methods from bitcoinjs-lib ========
//=========== helper methods from bitcoinjs-lib ========
function bytesToBinary(bytes) {
return bytes.map(function(x) {
function bytesToBinary (bytes) {
return bytes.map(function (x) {
return lpad(x.toString(2), '0', 8)
}).join('');
}).join('')
}
function lpad(str, padString, length) {
while (str.length < length) str = padString + str;
return str;
function lpad (str, padString, length) {
while (str.length < length) str = padString + str
return str
}

@@ -134,4 +147,11 @@

wordlists: {
EN: DEFAULT_WORDLIST
EN: ENGLISH_WORDLIST,
JA: JAPANESE_WORDLIST,
english: ENGLISH_WORDLIST,
french: FRENCH_WORDLIST,
italian: ITALIAN_WORDLIST,
japanese: JAPANESE_WORDLIST,
spanish: SPANISH_WORDLIST
}
}
{
"name": "bip39",
"version": "2.2.0",
"version": "2.3.0",
"description": "Bitcoin BIP39: Mnemonic code for generating deterministic keys",
"main": "index.js",
"scripts": {
"test": "mocha --reporter list test/*.js",
"compile": "browserify index.js -s bip39 > bip39.js"
"coverage": "nyc --branches 100 --functions 100 --check-coverage npm run unit",
"standard": "standard",
"test": "npm run standard && npm run unit",
"unit": "tape test/*.js",
"update": "node -e \"require('./util/wordlists').update()\""
},

@@ -25,3 +28,3 @@ "author": "Wei Lu",

"create-hash": "^1.1.0",
"pbkdf2": "^3.0.0",
"pbkdf2": "^3.0.9",
"randombytes": "^2.0.1",

@@ -31,6 +34,8 @@ "unorm": "^1.3.3"

"devDependencies": {
"browserify": "^9.0.0",
"mocha": "^2.2.0",
"mock-require": "^1.0.5"
"node-fetch": "^1.6.3",
"nyc": "^8.3.0",
"proxyquire": "^1.7.10",
"standard": "*",
"tape": "^4.6.2"
}
}

@@ -1,46 +0,51 @@

BIP39
=====
# BIP39
[![Build Status](https://travis-ci.org/bitcoinjs/bip39.png?branch=master)](https://travis-ci.org/bitcoinjs/bip39)
[![Version](http://img.shields.io/npm/v/bip39.svg)](https://www.npmjs.org/package/bip39)
[![NPM](https://img.shields.io/npm/v/bip39.svg)](https://www.npmjs.org/package/bip39)
[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard)
JavaScript implementation of [Bitcoin BIP39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki): Mnemonic code for generating deterministic keys
## Usage
## Reminder for developers
`npm install bip39`
***Please remember to allow recovery from mnemonic phrases that have invalid checksums (or that you don't have the wordlist)***
```javascript
var bip39 = require('bip39')
When a checksum is invalid, warn the user that the phrase is not something generated by your app, and ask if they would like to use it anyway. This way, your app only needs to hold the wordlists for your supported languages, but you can recover phrases made by other apps in other languages.
var mnemonic = bip39.entropyToMnemonic('133755ff') // hex input, defaults to BIP39 English word list
// 'basket rival lemon'
However, there should be other checks in place, such as checking to make sure the user is inputting 12 words or more separated by a space. ie. `phrase.trim().split(/\s+/g).length >= 12`
bip39.mnemonicToEntropy(mnemonic) // hex input, defaults to BIP39 English word list
// '133755ff'
## Examples
``` js
// Generate a random mnemonic (uses crypto.randomBytes under the hood), defaults to 128-bits of entropy
var mnemonic = bip39.generateMnemonic()
// => 'seed sock milk update focus rotate barely fade car face mechanic mercy'
// Generate a random mnemonic using crypto.randomBytes
mnemonic = bip39.generateMnemonic() // strength defaults to 128 bits
// 'seed sock milk update focus rotate barely fade car face mechanic mercy'
bip39.mnemonicToSeedHex('basket actual')
// '5cf2d4a8b0355e90295bdfc565a022a409af063d5365bb57bf74d9528f494bfa4400f53d8349b80fdae44082d7f9541e1dba2b003bcfec9d0d53781ca676651f'
// => '5cf2d4a8b0355e90295bdfc565a022a409af063d5365bb57bf74d9528f494bfa4400f53d8349b80fdae44082d7f9541e1dba2b003bcfec9d0d53781ca676651f'
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 ...>
// => <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)
// true
// => true
bip39.validateMnemonic('basket actual')
// false
// => false
```
### Browser
Compile `bip39.js` with the following command:
``` js
var bip39 = require('bip39')
$ npm run compile
// defaults to BIP39 English word list
// uses HEX strings for entropy
var mnemonic = bip39.entropyToMnemonic('133755ff')
// => basket rival lemon
After loading this file in your browser, you will be able to use the global `bip39` object.
// reversible
bip39.mnemonicToEntropy(mnemonic)
// => '133755ff'
```

@@ -1,12 +0,7 @@

var assert = require('assert')
var mock = require('mock-require')
mock('randombytes', function(size) {
return new Buffer('qwertyuiopasdfghjklzxcvbnm[];,./'.slice(0, size))
})
var BIP39 = require('../index.js')
var wordlists = {
english: require('../wordlists/en.json'),
var bip39 = require('../')
var proxyquire = require('proxyquire')
var download = require('../util/wordlists').download
var WORDLISTS = {
english: require('../wordlists/english.json'),
japanese: require('../wordlists/japanese.json'),
custom: require('./wordlist.json')

@@ -16,168 +11,120 @@ }

var vectors = require('./vectors.json')
var test = require('tape')
describe('BIP39', function() {
describe('mnemonicToSeedHex', function() {
this.timeout(20000)
function testVector (description, wordlist, password, v, i) {
var ventropy = v[0]
var vmnemonic = v[1]
var vseedHex = v[2]
vectors.english.forEach(function(v, i) {
it('works for tests vector ' + i, function() {
assert.equal(BIP39.mnemonicToSeedHex(v[1], 'TREZOR'), v[2])
})
})
})
test('for ' + description + ' test vector ' + i, function (t) {
t.plan(5)
describe('mnemonicToEntropy', function() {
vectors.english.forEach(function(v, i) {
it('works for tests vector ' + i, function() {
assert.equal(BIP39.mnemonicToEntropy(v[1]), v[0])
})
})
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) + '...')
vectors.custom.forEach(function(v, i) {
it('works for custom test vector ' + i, function() {
assert.equal(BIP39.mnemonicToEntropy(v[1], wordlists.custom), v[0])
})
})
})
t.equal(bip39.entropyToMnemonic(ventropy, wordlist), vmnemonic, 'entropyToMnemonic returns ' + vmnemonic.slice(0, 40) + '...')
describe('entropyToMnemonic', function() {
vectors.english.forEach(function(v, i) {
it('works for tests vector ' + i, function() {
assert.equal(BIP39.entropyToMnemonic(v[0]), v[1])
})
})
vectors.custom.forEach(function(v, i) {
it('works for custom test vector ' + i, function() {
assert.equal(BIP39.entropyToMnemonic(v[0], wordlists.custom), v[1])
})
})
function rng () { return new Buffer(ventropy, 'hex') }
t.equal(bip39.generateMnemonic(undefined, rng, wordlist), vmnemonic, 'generateMnemonic returns RNG entropy unmodified')
t.equal(bip39.validateMnemonic(vmnemonic, wordlist), true, 'validateMnemonic returns true')
})
}
describe('generateMnemonic', function() {
vectors.english.forEach(function(v, i) {
it('works for tests vector ' + i, function() {
function rng() { return new Buffer(v[0], 'hex') }
vectors.english.forEach(function (v, i) { testVector('English', undefined, 'TREZOR', v, i) })
vectors.japanese.forEach(function (v, i) { testVector('Japanese', WORDLISTS.japanese, '㍍ガバヴァぱばぐゞちぢ十人十色', v, i) })
vectors.custom.forEach(function (v, i) { testVector('Custom', WORDLISTS.custom, undefined, v, i) })
assert.equal(BIP39.generateMnemonic(undefined, rng), v[1])
})
})
test('UTF8 passwords', function (t) {
t.plan(vectors.japanese.length * 2)
it('can vary generated entropy bit length', function() {
var mnemonic = BIP39.generateMnemonic(96)
var words = mnemonic.split(' ')
vectors.japanese.forEach(function (v) {
var vmnemonic = v[1]
var vseedHex = v[2]
assert.equal(words.length, 9)
})
var password = '㍍ガバヴァぱばぐゞちぢ十人十色'
var normalizedPassword = 'メートルガバヴァぱばぐゞちぢ十人十色'
it('defaults to randombytes for the RNG', function() {
assert.equal(BIP39.generateMnemonic(32), 'imitate robot frequent')
})
t.equal(bip39.mnemonicToSeedHex(vmnemonic, password), vseedHex, 'mnemonicToSeedHex normalizes passwords')
t.equal(bip39.mnemonicToSeedHex(vmnemonic, normalizedPassword), vseedHex, 'mnemonicToSeedHex leaves normalizes passwords as-is')
})
})
it('allows a custom RNG to be used', function() {
var rng = function(size) {
var buffer = new Buffer(size)
buffer.fill(4) // guaranteed random
return buffer
}
test('README example 1', function (t) {
// defaults to BIP39 English word list
var entropy = '133755ff'
var mnemonic = bip39.entropyToMnemonic(entropy)
var mnemonic = BIP39.generateMnemonic(64, rng)
assert.equal(mnemonic, 'advice cage absurd amount doctor act')
})
t.plan(2)
t.equal(mnemonic, 'basket rival lemon')
it('adheres to a custom wordlist', function() {
var rng = function(size) {
var buffer = new Buffer(size)
buffer.fill(4) // guaranteed random
return buffer
}
// reversible
t.equal(bip39.mnemonicToEntropy(mnemonic), entropy)
})
var mnemonic = BIP39.generateMnemonic(64, rng, wordlists.custom)
assert.equal(mnemonic, 'adv1c3 cag3 ab5urd am0unt d0ct0r act')
})
})
test('README example 2', function (t) {
var stub = {
randombytes: function (size) {
return new Buffer('qwertyuiopasdfghjklzxcvbnm[];,./'.slice(0, size))
}
}
var proxiedbip39 = proxyquire('../', stub)
describe('validateMnemonic', function() {
vectors.english.forEach(function(v, i) {
// mnemonic strength defaults to 128 bits
var mnemonic = proxiedbip39.generateMnemonic()
it('passes check ' + i, function() {
assert(BIP39.validateMnemonic(v[1]))
})
})
t.plan(2)
t.equal(mnemonic, 'imitate robot frame trophy nuclear regret saddle around inflict case oil spice')
t.equal(bip39.validateMnemonic(mnemonic), true)
})
describe('with a custom wordlist', function() {
vectors.custom.forEach(function(v, i) {
test('README example 3', function (t) {
var mnemonic = 'basket actual'
var seed = bip39.mnemonicToSeed(mnemonic)
var seedHex = bip39.mnemonicToSeedHex(mnemonic)
it('passes custom check ' + i, function() {
assert(BIP39.validateMnemonic(v[1], wordlists.custom))
})
})
})
t.plan(3)
t.equal(seed.toString('hex'), seedHex)
t.equal(seedHex, '5cf2d4a8b0355e90295bdfc565a022a409af063d5365bb57bf74d9528f494bfa4400f53d8349b80fdae44082d7f9541e1dba2b003bcfec9d0d53781ca676651f')
t.equal(bip39.validateMnemonic(mnemonic), false)
})
it('fails for mnemonics of wrong length', function() {
assert(!BIP39.validateMnemonic('sleep kitten'))
assert(!BIP39.validateMnemonic('sleep kitten sleep kitten sleep kitten'))
})
test('generateMnemonic can vary entropy length', function (t) {
var words = bip39.generateMnemonic(96).split(' ')
it('fails for mnemonics that contains words not from the word list', function() {
assert(!BIP39.validateMnemonic("turtle front uncle idea crush write shrug there lottery flower risky shell"))
})
t.plan(1)
t.equal(words.length, 9, 'can vary generated entropy bit length')
})
it('fails for mnemonics of invalid checksum', function() {
assert(!BIP39.validateMnemonic('sleep kitten sleep kitten sleep kitten sleep kitten sleep kitten sleep kitten'))
})
})
test('generateMnemonic only requests the exact amount of data from an RNG', function (t) {
t.plan(1)
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])
})
})
bip39.generateMnemonic(96, function (size) {
t.equal(size, 96 / 8)
return new Buffer(size)
})
})
describe('Examples in readme', function() {
var bip39 = BIP39
test('validateMnemonic', function (t) {
t.plan(4)
var mnemonic = bip39.entropyToMnemonic('133755ff') // hex input, defaults to BIP39 English word list
// 'basket rival lemon'
assert.ok((/^\w+ \w+ \w+$/).test(mnemonic))
t.equal(bip39.validateMnemonic('sleep kitten'), false, 'fails for a mnemonic that is too short')
t.equal(bip39.validateMnemonic('sleep kitten sleep kitten sleep kitten'), false, 'fails for a mnemonic that is too short')
t.equal(bip39.validateMnemonic('turtle front uncle idea crush write shrug there lottery flower risky shell'), false, 'fails if mnemonic words are not in the word list')
t.equal(bip39.validateMnemonic('sleep kitten sleep kitten sleep kitten sleep kitten sleep kitten sleep kitten'), false, 'fails for invalid checksum')
})
var temp = bip39.mnemonicToEntropy(mnemonic) // hex input, defaults to BIP39 English word list
// '133755ff'
assert.equal(temp, '133755ff')
test('exposes standard wordlists', function (t) {
t.plan(2)
t.same(bip39.wordlists.EN, WORDLISTS.english)
t.equal(bip39.wordlists.EN.length, 2048)
})
// Generate a random mnemonic using crypto.randomBytes
mnemonic = bip39.generateMnemonic() // strength defaults to 128 bits
//'bench maximum balance appear cousin negative muscle inform enjoy chief vocal hello'
assert.ok(/^(\w+ ){11}\w+$/.test(mnemonic))
test('verify wordlists from https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md', function (t) {
download().then(function (wordlists) {
Object.keys(wordlists).forEach(function (name) {
t.same(bip39.wordlists[name], wordlists[name])
})
var str = bip39.mnemonicToSeedHex('basket actual')
//'5cf2d4a8b0355e90295bdfc565a022a409af063d5365bb57bf74d9528f494bfa4400f53d8349b80fdae44082d7f9541e1dba2b003bcfec9d0d53781ca676651f'
assert.equal(str, '5cf2d4a8b0355e90295bdfc565a022a409af063d5365bb57bf74d9528f494bfa4400f53d8349b80fdae44082d7f9541e1dba2b003bcfec9d0d53781ca676651f')
var buff = bip39.mnemonicToSeed('basket actual')
var fiveC = 5*16+12
assert.equal(buff[0], fiveC)
// <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 ...>
var bool = bip39.validateMnemonic(mnemonic)
// true
assert.ok(bool)
bool = bip39.validateMnemonic('basket actual')
// false
assert.ok(! bool)
t.end()
})
it('exposes standard wordlists', function () {
assert(BIP39.wordlists.EN)
assert.equal(BIP39.wordlists.EN.length, 2048)
})
})

@@ -122,2 +122,7 @@ {

"b15509eaa2d09d3efd3e006ef42151b30367dc6e3aa5e44caba3fe4d3e352e65101fbdb86a96776b91946ff06f8eac594dc6ee1d3e82a42dfe1b40fef6bcc3fd"
],
[
"00000000009a54180ac35938181b318ea3ee09c1cb35d552d5d0d2304808eb820bdb562a729283a2b0a35d46d10a39bec48d151f194c48ea2b257db81e82410943874cc1267ae2495122f1705dac461db0f0bc9a0bde6bc8a4e8e3a2b86aa1550c428e81ec7990a1c27c806bc9ed48b7bd7c7535b16cd2fdf3ee8f05d7b9da2fb61efb17f360de3253b69813ea3a5442e065e50a013372f9b628976bcdc8909600634520de93ed34ec8cefd2f9bd21e8922be4a6e1f609a00ace8aef88ab727f85988dae8c5f5a1a64f121f6baa6d117af31edca97a7743c0581753632faab42ff4b9c800024e390c7f8f72e566e333a2e69344f4f7c5d0ac63b2c0bf1aa48f12dc3ea395b2bb38841e14912fcb75192519c25a4913943ca435d73fcd3a74187884524194a4a025a1f3876582c67af84dc05b8fea262028ae049e53f724f9614fd01b66e501936b735c384fb462ea5d490eb0b189173e43a9d0a1c0b5ed06d7e989e5e888e9fa7377a96d55ba67b4d2bcabffb48c467133bd62c7ccdd3bd2a1eac39c2237b98591b598804b2701882fdd800c767a4189b4e92c981a7782df30b2f50beab4b17a0c95451533ff0175792f05fb09c393604453166b277aba0aefe611ebfb0eccf686469b5490933ee75c35555c9ef271993d869282217d62452ad9b078f0f9fdd6725983e4da5280fa9052b2c6648cbd4583ca05d69d1996704953452a3c66ceb9680ecbc3164ca2c8a7d4dbb1852ca22fa4bbda7b97d56b698da2e66e3c8af5fdde3f58dcc10a89570a70e63d0784a842112231e118a767765e140f91001cab2688a97fdfbd2ba620f743813adf8fade4ef625ed410b89d7239a28d78fa1c10fce957f69dd1e81af0d255658e016f5fc943b040f31c17876ea178e6a0758a8b8d389ed76320a41e631fa1deea3cb7bebb6df1593826c9ee8efb094e2397ff8fe73f73c4d1e710144152fe7ba208b3d79f2b221f335d04742a0c7cfad6a1f1deaeef4b6f5cea41b0283f42883fed4e259dccc4d05ffabac26a6d886cc1318aac98e56cedbcf1f047d8789f7e38295a4a7d8c17683c72cedd393eadd498e097f10947a2a38a131d16cc3489274482b47ec4f06eea019d1920cafd49350c767c5901da6ffafb73817d8cc70daf0e286bbbffacd84433fd4d15fb477397bb65e7b785b0a0ca4516540b2c920a4bcade486556f124d3bdac6c2c3bf32eaa5f2699f42194b7be6a1632f7f7b4c7d684dbd6193e3aabbb23be0dc47c10dd306f9bed063efc12e376d4d959e70811e44074bd972f8db8f2c58f9313db6d18b6d38f1318235fb2c864ae10cad3ceb55edc3e861a8aac755505d433362ee428d788e427bd6595abc8f4201a84d1f13d6443df4206871884b1aac83f0637bd6b9242d210297d32572c8a6d97fcf21530cfd5eddd36d6d0b333e3f056fa04ddba500ddd2",
"abandon abandon abandon abuse pipe army climb hen day school small bubble discover agent already grit stem note injury piece afraid afford puppy door swap rally original celery demand flame miracle potato speed fade hurry math spend moon gown math tuition float garage ice trial calm celery ill error ankle pact setup never multiply shift arm proof couch history thumb situate album keen jungle pilot either trim ignore present pride country fade limit glow goddess drum chief dizzy quality diet emerge sadness gallery tuna force reopen episode salmon update join invest inhale pepper swallow know glass vibrant alone milk polar hat antique pottery enhance drill add junk beef basket ride traffic shallow number fury impulse cancel gas coyote behind bridge negative have depth border wood lamp virus dial mutual game claim sentence gauge source clinic spend usage earn symptom yellow flower egg riot message foam spring detail dumb hill fat dust vote cradle hour planet exclude duck actress alarm plug cream stem spawn write right divorce above organ move divert differ frequent group book trim snake crowd kidney tenant ring property budget rabbit lawsuit prevent elegant enter march phone pulse put illegal draft apart dwarf west insect since edit lucky pig mean extend nest cupboard rigid viable insane dose detail bacon else net celery annual dumb debris ready arch soon weapon host black cabin pen avoid pencil scene oxygen panic since version belt trend horn syrup account opera system reveal lumber surface merry entry empower intact cluster banana initial canyon point before scheme quarter double quit obtain very peasant brush whip option tumble survey forum critic spy fiscal program world cart mind basket team mention wet tag teach position stereo degree baby ten cost museum proud cactus north hybrid series satoshi quote arrest record motor beach excess north gather exclude lizard wet coach tube salt fog shine dose next chunk erupt wrap blanket route rose satoshi antenna broken submit master cousin culture over firm april left love subject rail grid sure silver opera pig cave lava into boy fever need venue mimic exhaust artwork choice awful void emerge client snow bullet tiger panther twenty siren corn tooth spoon parent vivid ahead floor book muscle run clown verb arm hawk mimic flush ankle fashion citizen monitor snow twist reduce depth journey bind govern rate exile ethics sugar believe nephew cook chair walk warm later remember plate reform toy impose cargo typical target cabbage gloom oblige appear enjoy secret tide glow long bargain analyst bachelor bag joke course island robot joke limit much abstract client escape melody say leave pistol plate amateur special act pupil sick resource over girl wall aerobic illness strong broom mechanic pyramid wheel they dish sport legal exclude element addict valid naive floor bright black quiz celery invite domain ocean album attract tube round once attitude melody fragile evolve diet involve motion motor small cabbage auction ritual just know frozen result clinic deal curve knife bulb rack poem mixture zoo morning delay table meadow bunker marine extra clean wrist tackle lion guilt ketchup night mask toy fringe casual appear body soul hero march design puzzle kid swift right piano submit path tribe market youth fatal enroll system give door young river battle opinion awkward slot occur click narrow tornado guess hundred token afford umbrella tiny used deal enlist myth wild scrap reduce vault flush tag size problem powder mix episode service cigar pencil brisk luggage demand holiday bottom cause trigger live physical raise this upgrade absorb inner catch slab tumble essence body guitar clutch alter evil wife swear theory wild small man rotate shallow hill that twenty rack drip wrong crowd satoshi electric original uphold slim kiwi security secret bone eagle razor actress float camera chalk clock simple grab resource empty polar suspect current rail lazy concert fancy situate crop dragon ski ten snap bike nut worth hat latin draw hungry segment dilemma stem uphold electric this timber utility brick corn lamp win arrest used annual miss surround sun song search cat dune demise wagon tourist misery shy ramp busy couple unit refuse bitter squeeze joy ship effort will goddess naive search skull oyster pull sad sentence drink health few inspire popular insect grid glass improve person valve tomorrow digital floor clip route key lesson explain spin measure flip marble vintage addict broccoli awesome random film average arrest knock remind empower fog awake episode erode purity silly cycle garment oxygen benefit major voice sweet square hidden drift grid token live salon answer sweet chimney danger pizza magic deny clean forum garbage alter price seed hero visit where grain version oval clutch among welcome struggle first entire cheese trend issue",
"c8143da36c01b19ddba54c4d3127cc1769f1ae7d3e785126b4e4970bba4c30f1248ded216e6d45261e8e637bd2c76b71b14e602c8601c7b85e5648724449f8a7"
]

@@ -129,3 +134,3 @@ ],

"aband0n aband0n aband0n aband0n aband0n aband0n aband0n aband0n aband0n aband0n aband0n ab0ut",
"c55257c360c07c72029aebc1b53c05ed0362ada38ead3e3e9efa3708e53495531f09a6987599d18264c1e1c92f2cf141630c7a3c4ab7c81b2f001698e7463b04"
"a3f1b782bc3315cea2f93e8a6db3190a18b4870afe6fb40f6e3ac2fdc2216dfe33b7ef97e31845f710231d8a7a30a49fe82df5707f4a35917a92337a4da8184d"
],

@@ -135,12 +140,127 @@ [

"b3y0nd 5tag3 5l33p cl1p b3cau53 tw15t t0k3n l3af at0m b3auty g3n1u5 f00d bu51n355 51d3 gr1d unabl3 m1ddl3 arm3d 0b53rv3 pa1r cr0uch t0n1ght away c0c0nut",
"b15509eaa2d09d3efd3e006ef42151b30367dc6e3aa5e44caba3fe4d3e352e65101fbdb86a96776b91946ff06f8eac594dc6ee1d3e82a42dfe1b40fef6bcc3fd"
"2e9a0929ca67cd8c1a11cf71abee2c8b51c2555758f37a133ea9f491f55c352a4a831b2bf8dda61e9a4ed0ffeeae7324704f26d1304ab35ffebf8c997f73badd"
]
],
"japanese": [
[
"00000000000000000000000000000000",
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",
"ba553eedefe76e67e2602dc20184c564010859faada929a090dd2c57aacb204ceefd15404ab50ef3e8dbeae5195aeae64b0def4d2eead1cdc728a33ced520ffd"
]
]
"japanese": [
[
"00000000000000000000000000000000",
"あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あおぞら",
"a262d6fb6122ecf45be09c50492b31f92e9beb7d9a845987a02cefda57a15f9c467a17872029a9e92299b5cbdf306e3a0ee620245cbd508959b6cb7ca637bd55"
],
[
"7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f",
"そつう れきだい ほんやく わかす りくつ ばいか ろせん やちん そつう れきだい ほんやく わかめ",
"aee025cbe6ca256862f889e48110a6a382365142f7d16f2b9545285b3af64e542143a577e9c144e101a6bdca18f8d97ec3366ebf5b088b1c1af9bc31346e60d9"
],
[
"80808080808080808080808080808080",
"そとづら あまど おおう あこがれる いくぶん けいけん あたえる いよく そとづら あまど おおう あかちゃん",
"e51736736ebdf77eda23fa17e31475fa1d9509c78f1deb6b4aacfbd760a7e2ad769c714352c95143b5c1241985bcb407df36d64e75dd5a2b78ca5d2ba82a3544"
],
[
"ffffffffffffffffffffffffffffffff",
"われる われる われる われる われる われる われる われる われる われる われる ろんぶん",
"4cd2ef49b479af5e1efbbd1e0bdc117f6a29b1010211df4f78e2ed40082865793e57949236c43b9fe591ec70e5bb4298b8b71dc4b267bb96ed4ed282c8f7761c"
],
[
"000000000000000000000000000000000000000000000000",
"あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あらいぐま",
"d99e8f1ce2d4288d30b9c815ae981edd923c01aa4ffdc5dee1ab5fe0d4a3e13966023324d119105aff266dac32e5cd11431eeca23bbd7202ff423f30d6776d69"
],
[
"7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f",
"そつう れきだい ほんやく わかす りくつ ばいか ろせん やちん そつう れきだい ほんやく わかす りくつ ばいか ろせん やちん そつう れいぎ",
"eaaf171efa5de4838c758a93d6c86d2677d4ccda4a064a7136344e975f91fe61340ec8a615464b461d67baaf12b62ab5e742f944c7bd4ab6c341fbafba435716"
],
[
"808080808080808080808080808080808080808080808080",
"そとづら あまど おおう あこがれる いくぶん けいけん あたえる いよく そとづら あまど おおう あこがれる いくぶん けいけん あたえる いよく そとづら いきなり",
"aec0f8d3167a10683374c222e6e632f2940c0826587ea0a73ac5d0493b6a632590179a6538287641a9fc9df8e6f24e01bf1be548e1f74fd7407ccd72ecebe425"
],
[
"ffffffffffffffffffffffffffffffffffffffffffffffff",
"われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる りんご",
"f0f738128a65b8d1854d68de50ed97ac1831fc3a978c569e415bbcb431a6a671d4377e3b56abd518daa861676c4da75a19ccb41e00c37d086941e471a4374b95"
],
[
"0000000000000000000000000000000000000000000000000000000000000000",
"あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん いってい",
"23f500eec4a563bf90cfda87b3e590b211b959985c555d17e88f46f7183590cd5793458b094a4dccc8f05807ec7bd2d19ce269e20568936a751f6f1ec7c14ddd"
],
[
"7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f",
"そつう れきだい ほんやく わかす りくつ ばいか ろせん やちん そつう れきだい ほんやく わかす りくつ ばいか ろせん やちん そつう れきだい ほんやく わかす りくつ ばいか ろせん まんきつ",
"cd354a40aa2e241e8f306b3b752781b70dfd1c69190e510bc1297a9c5738e833bcdc179e81707d57263fb7564466f73d30bf979725ff783fb3eb4baa86560b05"
],
[
"8080808080808080808080808080808080808080808080808080808080808080",
"そとづら あまど おおう あこがれる いくぶん けいけん あたえる いよく そとづら あまど おおう あこがれる いくぶん けいけん あたえる いよく そとづら あまど おおう あこがれる いくぶん けいけん あたえる うめる",
"6b7cd1b2cdfeeef8615077cadd6a0625f417f287652991c80206dbd82db17bf317d5c50a80bd9edd836b39daa1b6973359944c46d3fcc0129198dc7dc5cd0e68"
],
[
"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる らいう",
"a44ba7054ac2f9226929d56505a51e13acdaa8a9097923ca07ea465c4c7e294c038f3f4e7e4b373726ba0057191aced6e48ac8d183f3a11569c426f0de414623"
],
[
"77c2b00716cec7213839159e404db50d",
"せまい うちがわ あずき かろう めずらしい だんち ますく おさめる ていぼう あたる すあな えしゃく",
"344cef9efc37d0cb36d89def03d09144dd51167923487eec42c487f7428908546fa31a3c26b7391a2b3afe7db81b9f8c5007336b58e269ea0bd10749a87e0193"
],
[
"b63a9c59a6e641f288ebc103017f1da9f8290b3da6bdef7b",
"ぬすむ ふっかつ うどん こうりつ しつじ りょうり おたがい せもたれ あつめる いちりゅう はんしゃ ごますり そんけい たいちょう らしんばん ぶんせき やすみ ほいく",
"b14e7d35904cb8569af0d6a016cee7066335a21c1c67891b01b83033cadb3e8a034a726e3909139ecd8b2eb9e9b05245684558f329b38480e262c1d6bc20ecc4"
],
[
"3e141609b97933b66a060dcddc71fad1d91677db872031e85f4c015c5e7e8982",
"くのう てぬぐい そんかい すろっと ちきゅう ほあん とさか はくしゅ ひびく みえる そざい てんすう たんぴん くしょう すいようび みけん きさらぎ げざん ふくざつ あつかう はやい くろう おやゆび こすう",
"32e78dce2aff5db25aa7a4a32b493b5d10b4089923f3320c8b287a77e512455443298351beb3f7eb2390c4662a2e566eec5217e1a37467af43b46668d515e41b"
],
[
"0460ef47585604c5660618db2e6a7e7f",
"あみもの いきおい ふいうち にげる ざんしょ じかん ついか はたん ほあん すんぽう てちがい わかめ",
"0acf902cd391e30f3f5cb0605d72a4c849342f62bd6a360298c7013d714d7e58ddf9c7fdf141d0949f17a2c9c37ced1d8cb2edabab97c4199b142c829850154b"
],
[
"72f60ebac5dd8add8d2a25a797102c3ce21bc029c200076f",
"すろっと にくしみ なやむ たとえる へいこう すくう きない けってい とくべつ ねっしん いたみ せんせい おくりがな まかい とくい けあな いきおい そそぐ",
"9869e220bec09b6f0c0011f46e1f9032b269f096344028f5006a6e69ea5b0b8afabbb6944a23e11ebd021f182dd056d96e4e3657df241ca40babda532d364f73"
],
[
"2c85efc7f24ee4573d2b81a6ec66cee209b2dcbd09d8eddc51e0215b0b68e416",
"かほご きうい ゆたか みすえる もらう がっこう よそう ずっと ときどき したうけ にんか はっこう つみき すうじつ よけい くげん もくてき まわり せめる げざい にげる にんたい たんそく ほそく",
"713b7e70c9fbc18c831bfd1f03302422822c3727a93a5efb9659bec6ad8d6f2c1b5c8ed8b0b77775feaf606e9d1cc0a84ac416a85514ad59f5541ff5e0382481"
],
[
"eaebabb2383351fd31d703840b32e9e2",
"めいえん さのう めだつ すてる きぬごし ろんぱ はんこ まける たいおう さかいし ねんいり はぶらし",
"06e1d5289a97bcc95cb4a6360719131a786aba057d8efd603a547bd254261c2a97fcd3e8a4e766d5416437e956b388336d36c7ad2dba4ee6796f0249b10ee961"
],
[
"7ac45cfe7722ee6c7ba84fbc2d5bd61b45cb2fe5eb65aa78",
"せんぱい おしえる ぐんかん もらう きあい きぼう やおや いせえび のいず じゅしん よゆう きみつ さといも ちんもく ちわわ しんせいじ とめる はちみつ",
"1fef28785d08cbf41d7a20a3a6891043395779ed74503a5652760ee8c24dfe60972105ee71d5168071a35ab7b5bd2f8831f75488078a90f0926c8e9171b2bc4a"
],
[
"4fa1a8bc3e6d80ee1316050e862c1812031493212b7ec3f3bb1b08f168cabeef",
"こころ いどう きあつ そうがんきょう へいあん せつりつ ごうせい はいち いびき きこく あんい おちつく きこえる けんとう たいこ すすめる はっけん ていど はんおん いんさつ うなぎ しねま れいぼう みつかる",
"43de99b502e152d4c198542624511db3007c8f8f126a30818e856b2d8a20400d29e7a7e3fdd21f909e23be5e3c8d9aee3a739b0b65041ff0b8637276703f65c2"
],
[
"18ab19a9f54a9274f03e5209a2ac8a91",
"うりきれ さいせい じゆう むろん とどける ぐうたら はいれつ ひけつ いずれ うちあわせ おさめる おたく",
"3d711f075ee44d8b535bb4561ad76d7d5350ea0b1f5d2eac054e869ff7963cdce9581097a477d697a2a9433a0c6884bea10a2193647677977c9820dd0921cbde"
],
[
"18a2e1d81b8ecfb2a333adcb0c17a5b9eb76cc5d05db91a4",
"うりきれ うねる せっさたくま きもち めんきょ へいたく たまご ぜっく びじゅつかん さんそ むせる せいじ ねくたい しはらい せおう ねんど たんまつ がいけん",
"753ec9e333e616e9471482b4b70a18d413241f1e335c65cd7996f32b66cf95546612c51dcf12ead6f805f9ee3d965846b894ae99b24204954be80810d292fcdd"
],
[
"15da872c95a13dd738fbf50e427583ad61f18fd99f628c417a61cf8343c90419",
"うちゅう ふそく ひしょ がちょう うけもつ めいそう みかん そざい いばる うけとる さんま さこつ おうさま ぱんつ しひょう めした たはつ いちぶ つうじょう てさぎょう きつね みすえる いりぐち かめれおん",
"346b7321d8c04f6f37b49fdf062a2fddc8e1bf8f1d33171b65074531ec546d1d3469974beccb1a09263440fc92e1042580a557fdce314e27ee4eabb25fa5e5fe"
]
]
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

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