X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2Fjs%2Findex.js;h=1f4cc1fe12ab203ff39474804ac1e63c44c1463b;hb=6d2e202083c4166aa4be8557789a8a461df6bd5c;hp=114f74ae0e0094d566443fa20b21d81ab1a14e8f;hpb=4669c88c672b0ec2ac636cae96a3fe2db94e2791;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git diff --git a/src/js/index.js b/src/js/index.js index 114f74a..1f4cc1f 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -47,6 +47,8 @@ DOM.entropyWeakEntropyOverrideWarning = DOM.entropyContainer.find(".weak-entropy-override-warning"); DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning"); DOM.phrase = $(".phrase"); + DOM.splitMnemonic = $(".splitMnemonic"); + DOM.showSplitMnemonic = $(".showSplitMnemonic"); DOM.phraseSplit = $(".phraseSplit"); DOM.phraseSplitWarn = $(".phraseSplitWarn"); DOM.passphrase = $(".passphrase"); @@ -92,6 +94,18 @@ DOM.bip84accountXprv = $("#bip84 .account-xprv"); DOM.bip84accountXpub = $("#bip84 .account-xpub"); DOM.bip84change = $("#bip84 .change"); + DOM.bip85 = $('.bip85'); + DOM.showBip85 = $('.showBip85'); + DOM.bip85Field = $('.bip85Field'); + DOM.bip85application = $('#bip85-application'); + DOM.bip85mnemonicLanguage = $('#bip85-mnemonic-language'); + DOM.bip85mnemonicLanguageInput = $('.bip85-mnemonic-language-input'); + DOM.bip85mnemonicLength = $('#bip85-mnemonic-length'); + DOM.bip85mnemonicLengthInput = $('.bip85-mnemonic-length-input'); + DOM.bip85index = $('#bip85-index'); + DOM.bip85indexInput = $('.bip85-index-input'); + DOM.bip85bytes = $('#bip85-bytes'); + DOM.bip85bytesInput = $('.bip85-bytes-input'); DOM.bip141unavailable = $("#bip141 .unavailable"); DOM.bip141available = $("#bip141 .available"); DOM.bip141path = $("#bip141-path"); @@ -133,11 +147,13 @@ DOM.entropyMnemonicLength.on("change", entropyChanged); DOM.entropyTypeInputs.on("change", entropyTypeChanged); DOM.phrase.on("input", delayedPhraseChanged); + DOM.showSplitMnemonic.on("change", toggleSplitMnemonic); DOM.passphrase.on("input", delayedPhraseChanged); DOM.generate.on("click", generateClicked); DOM.more.on("click", showMore); DOM.seed.on("input", delayedSeedChanged); DOM.rootKey.on("input", delayedRootKeyChanged); + DOM.showBip85.on('change', toggleBip85); DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged); DOM.bip32path.on("input", calcForDerivationPath); DOM.bip44account.on("input", calcForDerivationPath); @@ -146,6 +162,11 @@ DOM.bip49change.on("input", calcForDerivationPath); DOM.bip84account.on("input", calcForDerivationPath); DOM.bip84change.on("input", calcForDerivationPath); + DOM.bip85application.on('input', calcBip85); + DOM.bip85mnemonicLanguage.on('change', calcBip85); + DOM.bip85mnemonicLength.on('change', calcBip85); + DOM.bip85index.on('input', calcBip85); + DOM.bip85bytes.on('input', calcBip85); DOM.bip141path.on("input", calcForDerivationPath); DOM.bip141semantics.on("change", tabChanged); DOM.tab.on("shown.bs.tab", tabChanged); @@ -265,6 +286,7 @@ var passphrase = DOM.passphrase.val(); calcBip32RootKeyFromSeed(phrase, passphrase); calcForDerivationPath(); + calcBip85(); // Show the word indexes showWordIndexes(); writeSplitPhrase(phrase); @@ -401,6 +423,7 @@ } // Calculate and display calcForDerivationPath(); + calcBip85(); } function rootKeyChanged() { @@ -415,6 +438,7 @@ // Calculate and display calcBip32RootKeyFromBase58(rootKeyBase58); calcForDerivationPath(); + calcBip85(); } function litecoinUseLtubChanged() { @@ -428,6 +452,84 @@ phraseChanged(); } + function toggleSplitMnemonic() { + if (DOM.showSplitMnemonic.prop("checked")) { + DOM.splitMnemonic.removeClass("hidden"); + } + else { + DOM.splitMnemonic.addClass("hidden"); + } + } + + function toggleBip85() { + if (DOM.showBip85.prop('checked')) { + DOM.bip85.removeClass('hidden'); + calcBip85(); + } else { + DOM.bip85.addClass('hidden'); + } + } + + function toggleBip85Fields() { + if (DOM.showBip85.prop('checked')) { + DOM.bip85mnemonicLanguageInput.addClass('hidden'); + DOM.bip85mnemonicLengthInput.addClass('hidden'); + DOM.bip85bytesInput.addClass('hidden'); + + var app = DOM.bip85application.val(); + if (app === 'bip39') { + DOM.bip85mnemonicLanguageInput.removeClass('hidden'); + DOM.bip85mnemonicLengthInput.removeClass('hidden'); + } else if (app === 'hex') { + DOM.bip85bytesInput.removeClass('hidden'); + } + } + } + + function calcBip85() { + if (!DOM.showBip85.prop('checked')) { + return + } + + toggleBip85Fields(); + + var app = DOM.bip85application.val(); + + var phrase = DOM.phrase.val(); + var passphrase = DOM.passphrase.val(); + if (!phrase) { + return; + } + try { + var master = libs.bip85.BIP85.fromMnemonic(phrase, passphrase); + + var result; + + const index = parseInt(DOM.bip85index.val(), 10); + + if (app === 'bip39') { + const language = parseInt(DOM.bip85mnemonicLanguage.val(), 10); + const length = parseInt(DOM.bip85mnemonicLength.val(), 10); + + result = master.deriveBIP39(language, length, index).toMnemonic(); + } else if (app === 'wif') { + result = master.deriveWIF(index).toWIF(); + } else if (app === 'xprv') { + result = master.deriveXPRV(index).toXPRV(); + } else if (app === 'hex') { + const bytes = parseInt(DOM.bip85bytes.val(), 10); + + result = master.deriveHex(bytes, index).toEntropy(); + } + + hideValidationError(); + DOM.bip85Field.val(result); + } catch (e) { + showValidationError('BIP85: ' + e.message); + DOM.bip85Field.val(''); + } + } + function calcForDerivationPath() { clearDerivedKeys(); clearAddressesList(); @@ -1197,6 +1299,15 @@ privkey = keypair.secret(); pubkey = address = keypair.publicKey(); } + + // Nano currency + if (networks[DOM.network.val()].name == "NANO - Nano") { + var nanoKeypair = libs.nanoUtil.getKeypair(index, seed); + privkey = nanoKeypair.privKey; + pubkey = nanoKeypair.pubKey; + address = nanoKeypair.address; + } + if ((networks[DOM.network.val()].name == "NAS - Nebulas")) { var privKeyBuffer = keyPair.d.toBuffer(32); var nebulasAccount = libs.nebulas.Account.NewAccount(); @@ -1237,6 +1348,27 @@ address = libs.bchaddrSlp.toSlpAddress(address); } } + + // ZooBC address format may vary + if (networks[DOM.network.val()].name == "ZBC - ZooBlockchain") { + + var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44); + var coin = parseIntNoNaN(DOM.bip44coin.val(), 0); + var path = "m/"; + path += purpose + "'/"; + path += coin + "'/" + index + "'"; + var result = libs.zoobcUtil.getKeypair(path, seed); + + let publicKey = result.pubKey.slice(1, 33); + let privateKey = result.key; + + privkey = privateKey.toString('hex'); + pubkey = publicKey.toString('hex'); + + indexText = path; + address = libs.zoobcUtil.getZBCAddress(publicKey, 'ZBC'); + } + // Segwit addresses are different if (isSegwit) { if (!segwitAvailable) { @@ -2572,7 +2704,14 @@ network = libs.bitcoin.networks.bitcoin; setHdCoin(235); }, - }, + }, + { + name: "FIRO - Firo (Zcoin rebrand)", + onSelect: function() { + network = libs.bitcoin.networks.firo; + setHdCoin(136); + }, + }, { name: "FIX - FIX", onSelect: function() { @@ -2853,6 +2992,13 @@ setHdCoin(184); }, }, + { + name: "NANO - Nano", + onSelect: function() { + network = network = libs.nanoUtil.dummyNetwork; + setHdCoin(165); + }, + }, { name: "NAV - Navcoin", onSelect: function() { @@ -3409,12 +3555,19 @@ }, }, { - name: "XZC - Zcoin", + name: "XZC - Zcoin (rebranded to Firo)", onSelect: function() { network = libs.bitcoin.networks.zcoin; setHdCoin(136); }, }, + { + name: "ZBC - ZooBlockchain", + onSelect: function () { + network = libs.bitcoin.networks.zoobc; + setHdCoin(883); + }, + }, { name: "ZCL - Zclassic", onSelect: function() {