bip39.
This commit is contained in:
parent
b58ca398fb
commit
91fd1dc60d
@ -202,6 +202,7 @@ Mnemonic.fromOptions = function fromOptions(options) {
|
|||||||
* Inject properties from entropy.
|
* Inject properties from entropy.
|
||||||
* @private
|
* @private
|
||||||
* @param {Buffer} entropy
|
* @param {Buffer} entropy
|
||||||
|
* @param {String?} lang
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Mnemonic.prototype.fromEntropy = function fromEntropy(entropy, lang) {
|
Mnemonic.prototype.fromEntropy = function fromEntropy(entropy, lang) {
|
||||||
@ -222,6 +223,7 @@ Mnemonic.prototype.fromEntropy = function fromEntropy(entropy, lang) {
|
|||||||
/**
|
/**
|
||||||
* Instantiate mnemonic from entropy.
|
* Instantiate mnemonic from entropy.
|
||||||
* @param {Buffer} entropy
|
* @param {Buffer} entropy
|
||||||
|
* @param {String?} lang
|
||||||
* @returns {Mnemonic}
|
* @returns {Mnemonic}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -241,17 +243,14 @@ Mnemonic.prototype.fromPhrase = function fromPhrase(phrase) {
|
|||||||
|
|
||||||
assert(typeof phrase === 'string');
|
assert(typeof phrase === 'string');
|
||||||
|
|
||||||
words = phrase.split(/[ \u3000]/);
|
words = phrase.split(/[ \u3000]+/);
|
||||||
|
|
||||||
bits = words.length * 11;
|
bits = words.length * 11;
|
||||||
|
|
||||||
lang = Mnemonic.getLanguage(words[0]);
|
lang = Mnemonic.getLanguage(words[0]);
|
||||||
|
|
||||||
ent = new Buffer(Math.ceil(bits / 8));
|
ent = new Buffer(Math.ceil(bits / 8));
|
||||||
ent.fill(0);
|
|
||||||
|
|
||||||
wordlist = Mnemonic.getWordlist(lang);
|
wordlist = Mnemonic.getWordlist(lang);
|
||||||
|
|
||||||
|
ent.fill(0);
|
||||||
|
|
||||||
for (i = 0; i < words.length; i++) {
|
for (i = 0; i < words.length; i++) {
|
||||||
word = words[i];
|
word = words[i];
|
||||||
index = wordlist.indexOf(word);
|
index = wordlist.indexOf(word);
|
||||||
@ -270,11 +269,8 @@ Mnemonic.prototype.fromPhrase = function fromPhrase(phrase) {
|
|||||||
|
|
||||||
// Checksum bits:
|
// Checksum bits:
|
||||||
cbits = bits % 32;
|
cbits = bits % 32;
|
||||||
|
|
||||||
// Checksum bytes:
|
|
||||||
cbytes = Math.ceil(cbits / 8);
|
cbytes = Math.ceil(cbits / 8);
|
||||||
|
|
||||||
bits -= bits % 32;
|
|
||||||
entropy = ent.slice(0, ent.length - cbytes);
|
entropy = ent.slice(0, ent.length - cbytes);
|
||||||
|
|
||||||
ent = ent.slice(ent.length - cbytes);
|
ent = ent.slice(ent.length - cbytes);
|
||||||
@ -289,6 +285,8 @@ Mnemonic.prototype.fromPhrase = function fromPhrase(phrase) {
|
|||||||
throw new Error('Invalid checksum.');
|
throw new Error('Invalid checksum.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bits -= cbits;
|
||||||
|
|
||||||
assert(bits / 8 === entropy.length);
|
assert(bits / 8 === entropy.length);
|
||||||
assert(bits >= 128);
|
assert(bits >= 128);
|
||||||
assert(bits % 32 === 0);
|
assert(bits % 32 === 0);
|
||||||
@ -302,9 +300,10 @@ Mnemonic.prototype.fromPhrase = function fromPhrase(phrase) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiate mnemonic from a phrase.
|
* Instantiate mnemonic from a phrase (validates checksum).
|
||||||
* @param {String} phrase
|
* @param {String} phrase
|
||||||
* @returns {Mnemonic}
|
* @returns {Mnemonic}
|
||||||
|
* @throws on bad checksum
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Mnemonic.fromPhrase = function fromPhrase(phrase) {
|
Mnemonic.fromPhrase = function fromPhrase(phrase) {
|
||||||
@ -487,6 +486,8 @@ Mnemonic.prototype.fromJSON = function fromJSON(json) {
|
|||||||
this.phrase = json.phrase;
|
this.phrase = json.phrase;
|
||||||
this.passphrase = json.passphrase;
|
this.passphrase = json.passphrase;
|
||||||
|
|
||||||
|
assert(this.bits >= 128);
|
||||||
|
assert(this.bits % 32 === 0);
|
||||||
assert(this.bits / 8 === this.entropy.length);
|
assert(this.bits / 8 === this.entropy.length);
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
@ -537,6 +538,9 @@ Mnemonic.prototype.fromRaw = function fromRaw(data) {
|
|||||||
this.phrase = p.readVarString('utf8');
|
this.phrase = p.readVarString('utf8');
|
||||||
this.passphrase = p.readVarString('utf8');
|
this.passphrase = p.readVarString('utf8');
|
||||||
|
|
||||||
|
assert(this.bits >= 128);
|
||||||
|
assert(this.bits % 32 === 0);
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user