Last active
May 16, 2018 16:00
-
-
Save liamsi/18f175155aebc14f34d556530119daa3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var test = require('tape') | |
const randomBytes = require('randombytes') | |
const bip39 = require('bip39') | |
test('generate wallet mnemonic', function (t) { | |
t.test('some bip39 experiments: can we "revert" "BytesToWords" with "WordsToBytes" like in TestCheckTypoDetection', function (t) { | |
// see https://github.com/tendermint/go-crypto/blob/906331a8d1661a504dc0eb2618a8767363fddb7c/keys/words/wordcodec_test.go#L146-L178 | |
var strength = 128 | |
for (var i = 0; i < 3400; i++) { | |
// new entropy: | |
var data = randomBytes(strength / 8).toString('hex') | |
// corresponds to: | |
// words, err := codec.BytesToWords(data) | |
// default word list is english: | |
var words = bip39.entropyToMnemonic(data) | |
// coresponds to: | |
// good, err := codec.WordsToBytes(words) | |
// default word list is english: | |
var good = bip39.mnemonicToEntropy(words) | |
t.equal(data, good) | |
// now try some tweaks... | |
try { | |
var cut = words.split(' ').slice(1).join(' ') | |
bip39.mnemonicToEntropy(cut) | |
t.fail('should have thrown') | |
} catch (err) { | |
t.ok(err, 'error was thrown') | |
t.equal(err.message, 'Invalid mnemonic', 'correct error message') | |
} | |
var diffWords = words.split(' ') | |
diffWords[3] = getDiffWord(diffWords[3]) | |
var df = diffWords.join(' ') | |
try { | |
bip39.mnemonicToEntropy(df) | |
t.fail('should have thrown') | |
} catch (err) { | |
t.ok(err, 'error was thrown') | |
t.equal(err.message, 'Invalid mnemonic checksum', 'correct error message') | |
} | |
} | |
t.end() | |
}) | |
t.end() | |
}) | |
function getDiffWord(not) { | |
var banksize = bip39.wordlists.EN.length | |
var idx = Math.floor(Math.random() * banksize) % banksize | |
var w = bip39.wordlists.EN[idx] | |
if (w === not) { | |
w = getDiffWord(not) | |
} | |
return w | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment