X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git;a=blobdiff_plain;f=src%2Fjs%2Findex.js;h=f131e01c84d1832d0238ca6d9d28ac8a41e57381;hp=9dabe9534677e37c56985a6bfc43366f2c289695;hb=38523d36dcce2c11baaf8dd742d02b94c41c7b23;hpb=18531979e830c8c094e8de0b3ee593eebd250807 diff --git a/src/js/index.js b/src/js/index.js index 9dabe95..f131e01 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -1,6 +1,7 @@ (function() { var mnemonic = new Mnemonic("english"); + var seed = null var bip32RootKey = null; var bip32ExtendedKey = null; var network = bitcoin.networks.bitcoin; @@ -18,6 +19,7 @@ DOM.phrase = $(".phrase"); DOM.passphrase = $(".passphrase"); DOM.generate = $(".generate"); + DOM.seed = $(".seed"); DOM.rootKey = $(".root-key"); DOM.extendedPrivKey = $(".extended-priv-key"); DOM.extendedPubKey = $(".extended-pub-key"); @@ -41,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); @@ -50,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); @@ -70,7 +70,6 @@ function networkChanged(e) { var network = e.target.value; networks[network].onSelect(); - setBip44DerivationPath(); delayedPhraseChanged(); } @@ -95,7 +94,8 @@ return; } // Get the derivation path - var errorText = findDerivationPathErrors(); + var derivationPath = getDerivationPath(); + var errorText = findDerivationPathErrors(derivationPath); if (errorText) { showValidationError(errorText); return; @@ -118,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"); @@ -169,7 +149,7 @@ } function calcBip32Seed(phrase, passphrase, path) { - var seed = mnemonic.toSeed(phrase, passphrase); + seed = mnemonic.toSeed(phrase, passphrase); bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network); bip32ExtendedKey = bip32RootKey; // Derive the key from the path @@ -225,6 +205,32 @@ return false; } + function getDerivationPath() { + if (DOM.bip44tab.hasClass("active")) { + 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); + var derivationPath = DOM.bip44path.val(); + console.log("Using derivation path from BIP44 tab: " + derivationPath); + return derivationPath; + } + else if (DOM.bip32tab.hasClass("active")) { + var derivationPath = DOM.bip32path.val(); + console.log("Using derivation path from BIP32 tab: " + derivationPath); + return derivationPath; + } + else { + console.log("Unknown derivation path"); + } + } + function findDerivationPathErrors(path) { // TODO return false; @@ -232,6 +238,7 @@ function displayBip32Info() { // Display the key + DOM.seed.val(seed); var rootKey = bip32RootKey.toBase58(); DOM.rootKey.val(rootKey); var extendedPrivKey = bip32ExtendedKey.toBase58(); @@ -261,7 +268,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) } @@ -302,14 +310,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); @@ -336,20 +343,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)) {