X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git;a=blobdiff_plain;f=src%2Fjs%2Findex.js;h=68c74f6912f0ac7d97940d5d611ffd30384ced55;hp=7aa021704f633ea44448aaeece1870b23a22d6fd;hb=83b2f0f10e950c7a05717bbe20ecc4367557abb6;hpb=d75ddf4ea80cd8385f8d946bd4f50cacbdf6c0cb diff --git a/src/js/index.js b/src/js/index.js index 7aa0217..68c74f6 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -15,6 +15,7 @@ var showPrivKey = true; var showQr = false; var litecoinUseLtub = true; + var isDefaultBip44ChangeValue = true; var entropyTypeAutoDetect = true; var entropyChangeTimeoutEvent = null; @@ -76,6 +77,7 @@ DOM.bip44accountXprv = $("#bip44 .account-xprv"); DOM.bip44accountXpub = $("#bip44 .account-xpub"); DOM.bip44change = $("#bip44 .change"); + DOM.defaultBip44ChangeValue = $("#bip44 .default-bip44-change-value"); DOM.bip49unavailable = $("#bip49 .unavailable"); DOM.bip49available = $("#bip49 .available"); DOM.bip49path = $("#bip49-path"); @@ -96,7 +98,7 @@ DOM.bip84change = $("#bip84 .change"); DOM.bip85 = $('.bip85'); DOM.showBip85 = $('.showBip85'); - DOM.bip85Field = $('.bip85Field'); + DOM.bip85Field = $('.bip85Field'); DOM.bip85application = $('#bip85-application'); DOM.bip85mnemonicLanguage = $('#bip85-mnemonic-language'); DOM.bip85mnemonicLanguageInput = $('.bip85-mnemonic-language-input'); @@ -105,7 +107,7 @@ DOM.bip85index = $('#bip85-index'); DOM.bip85indexInput = $('.bip85-index-input'); DOM.bip85bytes = $('#bip85-bytes'); - DOM.bip85bytesInput = $('.bip85-bytes-input'); + DOM.bip85bytesInput = $('.bip85-bytes-input'); DOM.bip141unavailable = $("#bip141 .unavailable"); DOM.bip141available = $("#bip141 .available"); DOM.bip141path = $("#bip141-path"); @@ -157,7 +159,9 @@ DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged); DOM.bip32path.on("input", calcForDerivationPath); DOM.bip44account.on("input", calcForDerivationPath); + DOM.bip44change.on("input", modifiedDefaultBip44ChangeValue); DOM.bip44change.on("input", calcForDerivationPath); + DOM.defaultBip44ChangeValue.on("click", resetDefaultBip44ChangeValue); DOM.bip49account.on("input", calcForDerivationPath); DOM.bip49change.on("input", calcForDerivationPath); DOM.bip84account.on("input", calcForDerivationPath); @@ -166,7 +170,7 @@ DOM.bip85mnemonicLanguage.on('change', calcBip85); DOM.bip85mnemonicLength.on('change', calcBip85); DOM.bip85index.on('input', calcBip85); - DOM.bip85bytes.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); @@ -469,13 +473,13 @@ 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'); @@ -485,16 +489,16 @@ } } } - + 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) { @@ -502,15 +506,15 @@ } 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(); @@ -518,10 +522,10 @@ 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) { @@ -924,12 +928,14 @@ 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; + var change = parseIntNoNaN(DOM.bip44change.val(), ""); + var path = "m"; + path += "/" + purpose + "'"; + path += "/" + coin + "'"; + path += "/" + account + "'"; + if (change !== "") { + path += "/" + change; + } DOM.bip44path.val(path); var derivationPath = DOM.bip44path.val(); console.log("Using derivation path from BIP44 tab: " + derivationPath); @@ -1238,7 +1244,7 @@ address = libs.ethUtil.addHexPrefix(checksumAddress); pubkey = libs.ethUtil.addHexPrefix(pubkey); if (hasPrivkey) { - privkey = libs.ethUtil.bufferToHex(keyPair.d.toBuffer()); + privkey = libs.ethUtil.bufferToHex(keyPair.d.toBuffer(32)); } } //TRX is different @@ -1348,6 +1354,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) { @@ -1398,6 +1425,12 @@ privkey = FIObufferToPrivate(keyPair.d.toBuffer(32)); } + if (networks[DOM.network.val()].name == "ATOM - Cosmos Hub") { + address = CosmosBufferToAddress(keyPair.getPublicKeyBuffer()); + pubkey = CosmosBufferToPublic(keyPair.getPublicKeyBuffer()); + privkey = keyPair.d.toBuffer().toString("base64"); + } + //Groestlcoin Addresses are different if(isGRS()) { @@ -2047,10 +2080,30 @@ return DOM.bip141tab.hasClass("active"); } + function setBip44ChangeValue() { + if (isDefaultBip44ChangeValue) { + if (networkIsEthereum()) { + DOM.bip44change.val(""); + } else { + DOM.bip44change.val(0); + } + } + } + + function modifiedDefaultBip44ChangeValue() { + isDefaultBip44ChangeValue = false; + } + + function resetDefaultBip44ChangeValue() { + isDefaultBip44ChangeValue = true; + setBip44ChangeValue(); + } + function setHdCoin(coinValue) { DOM.bip44coin.val(coinValue); DOM.bip49coin.val(coinValue); DOM.bip84coin.val(coinValue); + setBip44ChangeValue(); } function showSegwitAvailable() { @@ -2213,6 +2266,13 @@ setHdCoin(357); }, }, + { + name: "ATOM - Cosmos Hub", + onSelect: function() { + network = libs.bitcoin.networks.bitcoin; + setHdCoin(118); + }, + }, { name: "AUR - Auroracoin", onSelect: function() { @@ -2683,7 +2743,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() { @@ -3211,6 +3278,13 @@ setHdCoin(4); }, }, + { + name: "RITO - Ritocoin", + onSelect: function() { + network = libs.bitcoin.networks.ritocoin; + setHdCoin(19169); + }, + }, { name: "RVR - RevolutionVR", onSelect: function() { @@ -3527,12 +3601,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() {