X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2Fjs%2Findex.js;h=f3582b0f17461de4de8ce9d8c37038be0ea2bcc0;hb=563e401a4f3880da88bfc69cf51be5a1becd4c66;hp=d72e70b4ad71b180d2c5968feda6c9074b820aeb;hpb=47a56d9d973fc0847d0beba41a059558a96b6ee6;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git diff --git a/src/js/index.js b/src/js/index.js index d72e70b..f3582b0 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -43,8 +43,6 @@ DOM.addressToggle = $(".address-toggle"); DOM.privateKeyToggle = $(".private-key-toggle"); - var derivationPath = $(".tab-pane.active .path").val(); - function init() { // Events DOM.network.on("change", networkChanged); @@ -52,12 +50,12 @@ DOM.passphrase.on("input", delayedPhraseChanged); DOM.generate.on("click", generateClicked); DOM.more.on("click", showMore); - DOM.bip32path.on("input", bip32Changed); - DOM.bip44purpose.on("input", bip44Changed); - DOM.bip44coin.on("input", bip44Changed); - DOM.bip44account.on("input", bip44Changed); - DOM.bip44change.on("input", bip44Changed); - DOM.tab.on("click", tabClicked); + DOM.bip32path.on("input", delayedPhraseChanged); + DOM.bip44purpose.on("input", delayedPhraseChanged); + DOM.bip44coin.on("input", delayedPhraseChanged); + DOM.bip44account.on("input", delayedPhraseChanged); + DOM.bip44change.on("input", delayedPhraseChanged); + DOM.tab.on("click", delayedPhraseChanged); DOM.indexToggle.on("click", toggleIndexes); DOM.addressToggle.on("click", toggleAddresses); DOM.privateKeyToggle.on("click", togglePrivateKeys); @@ -96,7 +94,8 @@ return; } // Get the derivation path - var errorText = findDerivationPathErrors(); + var derivationPath = getDerivationPath(); + var errorText = findDerivationPathErrors(derivationPath); if (errorText) { showValidationError(errorText); return; @@ -119,26 +118,6 @@ }, 50); } - function tabClicked(e) { - var activePath = $(e.target.getAttribute("href") + " .path"); - derivationPath = activePath.val(); - derivationChanged(); - } - - function derivationChanged() { - delayedPhraseChanged(); - } - - function bip32Changed() { - derivationPath = DOM.bip32path.val(); - derivationChanged(); - } - - function bip44Changed() { - setBip44DerivationPath(); - derivationChanged(); - } - function toggleIndexes() { showIndex = !showIndex; $("td.index span").toggleClass("invisible"); @@ -216,8 +195,16 @@ proper.push(part.toLowerCase()); } } - // TODO some levenstein on the words var properPhrase = proper.join(' '); + // Check each word + for (var i=0; i 1) { + if (path[1] != "/") { + return "Separator must be '/'"; + } + var indexes = path.split("/"); + if (indexes.length > maxDepth) { + return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth; + } + for (var depth = 1; depth 0) { + return "Invalid characters " + invalidChars + " found at depth " + depth; + } + var indexValue = parseInt(index.replace("'", "")); + if (isNaN(depth)) { + return "Invalid number at depth " + depth; + } + if (indexValue > maxIndexValue) { + return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue; + } + } + } return false; } @@ -263,7 +308,8 @@ var key = bip32ExtendedKey.derive(index); var address = key.getAddress().toString(); var privkey = key.privKey.toWIF(network); - addAddressToList(index, address, privkey); + var indexText = getDerivationPath() + "/" + index; + addAddressToList(indexText, address, privkey); }, 50) } @@ -304,14 +350,13 @@ DOM.extendedPubKey.val(""); } - function addAddressToList(index, address, privkey) { + function addAddressToList(indexText, address, privkey) { var row = $(addressRowTemplate.html()); // Elements var indexCell = row.find(".index span"); var addressCell = row.find(".address span"); var privkeyCell = row.find(".privkey span"); // Content - var indexText = derivationPath + "/" + index; indexCell.text(indexText); addressCell.text(address); privkeyCell.text(privkey); @@ -338,20 +383,6 @@ }); } - function setBip44DerivationPath() { - var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44); - var coin = parseIntNoNaN(DOM.bip44coin.val(), 0); - var account = parseIntNoNaN(DOM.bip44account.val(), 0); - var change = parseIntNoNaN(DOM.bip44change.val(), 0); - var path = "m/"; - path += purpose + "'/"; - path += coin + "'/"; - path += account + "'/"; - path += change; - DOM.bip44path.val(path); - derivationPath = DOM.bip44path.val(); - } - function parseIntNoNaN(val, defaultVal) { var v = parseInt(val); if (isNaN(v)) { @@ -366,6 +397,21 @@ .show(); } + function findNearestWord(word) { + var words = WORDLISTS["english"]; + var minDistance = 99; + var closestWord = words[0]; + for (var i=0; i