Skip to content

Commit 1f9b012

Browse files
committed
limit max entropy to 1024 bytes, at which point we've reached the max size of the checksum
1 parent 17024d4 commit 1f9b012

File tree

2 files changed

+8
-9
lines changed

2 files changed

+8
-9
lines changed

index.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ function mnemonicToEntropy (mnemonic, wordlist) {
4242
return lpad(index.toString(2), '0', 11)
4343
}).join('')
4444

45+
// max entropy is 1024; (1024×8)+((1024×8)÷32) = 8448
46+
assert(bits.length <= 8448, 'Invalid mnemonic')
47+
4548
// split the binary string into ENT/CS
4649
var dividerIndex = Math.floor(bits.length / 33) * 32
4750
var entropy = bits.slice(0, dividerIndex)
@@ -64,7 +67,7 @@ function entropyToMnemonic (entropy, wordlist) {
6467

6568
var entropyBuffer = new Buffer(entropy, 'hex')
6669

67-
assert(entropyBuffer.length && entropyBuffer.length % 4 === 0, 'Invalid entropy')
70+
assert(entropyBuffer.length > 0 && entropyBuffer.length <= 1024 && entropyBuffer.length % 4 === 0, 'Invalid entropy')
6871

6972
var entropyBits = bytesToBinary([].slice.call(entropyBuffer))
7073
var checksum = checksumBits(entropyBuffer)

test/index.js

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,19 +71,14 @@ describe('BIP39', function () {
7171
assert.throws(function () {
7272
BIP39.entropyToMnemonic(new Buffer('', 'hex'));
7373
}, 'Invalid entropy')
74-
74+
7575
assert.throws(function () {
7676
BIP39.entropyToMnemonic(new Buffer('000000', 'hex'));
7777
}, 'Invalid entropy')
7878

79-
var e;
80-
try {
79+
assert.throws(function () {
8180
BIP39.entropyToMnemonic(new Buffer(new Array(1028 + 1).join('00'), 'hex'));
82-
e = null;
83-
} catch (_e) {
84-
e = _e;
85-
}
86-
assert(e && e.message === 'Invalid entropy');
81+
}, 'Invalid entropy')
8782
})
8883
})
8984

@@ -148,6 +143,7 @@ describe('BIP39', function () {
148143
it('fails for mnemonics of wrong length', function () {
149144
assert(!BIP39.validateMnemonic('sleep kitten'))
150145
assert(!BIP39.validateMnemonic('sleep kitten sleep kitten sleep kitten'))
146+
assert(!BIP39.validateMnemonic('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about end grace oxygen maze bright face loan ticket trial leg cruel lizard bread worry reject journey perfect chef section caught neither install industry'))
151147
})
152148

153149
it('fails for mnemonics that contains words not from the word list', function () {

0 commit comments

Comments
 (0)