var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
result.push(wordlist[idx]);
}
- return result.join(' ');
+ return self.joinWords(result);
}
self.check = function(mnemonic) {
- var mnemonic = mnemonic.split(' ')
- if (mnemonic.length % 3 > 0) {
+ var mnemonic = self.splitWords(mnemonic);
+ if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
return false
}
// idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
self.toSeed = function(mnemonic, passphrase) {
passphrase = passphrase || '';
- mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
+ mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
passphrase = self.normalizeString(passphrase)
passphrase = "mnemonic" + passphrase;
var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
return hashHex;
}
+ self.splitWords = function(mnemonic) {
+ return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
+ }
+
+ self.joinWords = function(words) {
+ // Set space correctly depending on the language
+ // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
+ var space = " ";
+ if (language == "japanese") {
+ space = "\u3000"; // ideographic space
+ }
+ return words.join(space);
+ }
+
self.normalizeString = function(str) {
if (typeof str.normalize == "function") {
return str.normalize("NFKD");