X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2Fjs%2Findex.js;h=5433bc3ece8ffb84ddf5043a36257426739e75f1;hb=0a5d28a7adb5f38421eb4b1ad9223c25ebdb4981;hp=b09a981933a2168c0507bf5c4d733ec91e57339c;hpb=ba678b11475fab61811c67e91e19828e16d989d5;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git diff --git a/src/js/index.js b/src/js/index.js index b09a981..5433bc3 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -38,7 +38,9 @@ DOM.entropyWordCount = DOM.entropyContainer.find(".word-count"); DOM.entropyBinary = DOM.entropyContainer.find(".binary"); DOM.entropyWordIndexes = DOM.entropyContainer.find(".word-indexes"); + DOM.entropyChecksum = DOM.entropyContainer.find(".checksum"); DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length"); + DOM.entropyWeakEntropyOverrideWarning = DOM.entropyContainer.find(".weak-entropy-override-warning"); DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning"); DOM.phrase = $(".phrase"); DOM.passphrase = $(".passphrase"); @@ -87,6 +89,7 @@ DOM.bip141path = $("#bip141-path"); DOM.bip141semantics = $(".bip141-semantics"); DOM.generatedStrength = $(".generate-container .strength"); + DOM.generatedStrengthWarning = $(".generate-container .warning"); DOM.hardenedAddresses = $(".hardened-addresses"); DOM.useBitpayAddressesContainer = $(".use-bitpay-addresses-container"); DOM.useBitpayAddresses = $(".use-bitpay-addresses"); @@ -113,6 +116,7 @@ function init() { // Events + DOM.generatedStrength.on("change", generatedStrengthChanged); DOM.network.on("change", networkChanged); DOM.bip32Client.on("change", bip32ClientChanged); DOM.useEntropy.on("change", setEntropyVisibility); @@ -154,6 +158,16 @@ // Event handlers + function generatedStrengthChanged() { + var strength = parseInt(DOM.generatedStrength.val()); + if (strength < 12) { + DOM.generatedStrengthWarning.removeClass("hidden"); + } + else { + DOM.generatedStrengthWarning.addClass("hidden"); + } + } + function networkChanged(e) { clearDerivedKeys(); clearAddressesList(); @@ -1141,7 +1155,7 @@ function wordArrayToPhrase(words) { var phrase = words.join(" "); var language = getLanguageFromPhrase(phrase); - if (language == "japanese") { + if (language == "japanese" || language == "korean") { phrase = words.join("\u3000"); } return phrase; @@ -1177,6 +1191,17 @@ mnemonicLength = parseInt(mnemonicLength); var numberOfBits = 32 * mnemonicLength / 3; bits = bits.substring(0, numberOfBits); + // show warning for weak entropy override + if (mnemonicLength / 3 * 32 > entropy.binaryStr.length) { + DOM.entropyWeakEntropyOverrideWarning.removeClass("hidden"); + } + else { + DOM.entropyWeakEntropyOverrideWarning.addClass("hidden"); + } + } + else { + // hide warning for weak entropy override + DOM.entropyWeakEntropyOverrideWarning.addClass("hidden"); } // Discard trailing entropy var bitsToUse = Math.floor(bits.length / 32) * 32; @@ -1195,6 +1220,8 @@ DOM.phrase.val(phrase); // Show the word indexes showWordIndexes(); + // Show the checksum + showChecksum(); } function clearEntropyFeedback() { @@ -1225,13 +1252,14 @@ var entropyTypeStr = getEntropyTypeStr(entropy); var wordCount = Math.floor(numberOfBits / 32) * 3; var bitsPerEvent = entropy.bitsPerEvent.toFixed(2); + var spacedBinaryStr = addSpacesEveryElevenBits(entropy.binaryStr); DOM.entropyFiltered.html(entropy.cleanHtml); DOM.entropyType.text(entropyTypeStr); DOM.entropyCrackTime.text(timeToCrack); DOM.entropyEventCount.text(entropy.base.ints.length); DOM.entropyBits.text(numberOfBits); DOM.entropyWordCount.text(wordCount); - DOM.entropyBinary.text(entropy.binaryStr); + DOM.entropyBinary.text(spacedBinaryStr); DOM.entropyBitsPerEvent.text(bitsPerEvent); // detect and warn of filtering var rawNoSpaces = DOM.entropy.val().replace(/\s/g, ""); @@ -1456,6 +1484,35 @@ DOM.entropyWordIndexes.text(wordIndexesStr); } + function showChecksum() { + var phrase = DOM.phrase.val(); + var words = phraseToWordArray(phrase); + var checksumBitlength = words.length / 3; + var checksum = ""; + var binaryStr = ""; + var language = getLanguage(); + for (var i=words.length-1; i>=0; i--) { + var word = words[i]; + var wordIndex = WORDLISTS[language].indexOf(word); + var wordBinary = wordIndex.toString(2); + while (wordBinary.length < 11) { + wordBinary = "0" + wordBinary; + } + var binaryStr = wordBinary + binaryStr; + if (binaryStr.length >= checksumBitlength) { + var start = binaryStr.length - checksumBitlength; + var end = binaryStr.length; + checksum = binaryStr.substring(start, end); + // add spaces so the last group is 11 bits, not the first + checksum = checksum.split("").reverse().join("") + checksum = addSpacesEveryElevenBits(checksum); + checksum = checksum.split("").reverse().join("") + break; + } + } + DOM.entropyChecksum.text(checksum); + } + function updateCsv() { var tableCsv = "path,address,public key,private key\n"; var rows = DOM.addresses.find("tr"); @@ -1476,7 +1533,35 @@ DOM.csv.val(tableCsv); } + function addSpacesEveryElevenBits(binaryStr) { + return binaryStr.match(/.{1,11}/g).join(" "); + } + var networks = [ + { + name: "AC - Asiacoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.asiacoin; + setHdCoin(51); + }, + }, + { + name: "ACC - Adcoin", + segwitAvailable: true, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.adcoin; + setHdCoin(161); + }, + }, + { + name: "AUR - Auroracoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.auroracoin; + setHdCoin(85); + }, + }, { name: "AXE - Axe", segwitAvailable: false, @@ -1485,6 +1570,14 @@ setHdCoin(0); }, }, + { + name: "BCA - Bitcoin Atom", + segwitAvailable: true, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.atom; + setHdCoin(185); + }, + }, { name: "BCH - Bitcoin Cash", segwitAvailable: false, @@ -1494,6 +1587,54 @@ setHdCoin(145); }, }, + { + name: "BEET - Beetlecoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.beetlecoin; + setHdCoin(800); + }, + }, + { + name: "BELA - Belacoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.belacoin; + setHdCoin(73); + }, + }, + { + name: "BLK - BlackCoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.blackcoin; + setHdCoin(10); + }, + }, + { + name: "BRIT - Britcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.britcoin; + setHdCoin(70); + }, + }, + { + name: "BSD - Bitsend", + segwitAvailable: true, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitsend; + setHdCoin(91); + }, + }, + { + name: "BTA - Bata", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bata; + setHdCoin(89); + }, + }, { name: "BTC - Bitcoin", segwitAvailable: true, @@ -1515,7 +1656,31 @@ segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.bgold; - setHdCoin(0); + setHdCoin(156); + }, + }, + { + name: "BTX - Bitcore", + segwitAvailable: true, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcore; + setHdCoin(160); + }, + }, + { + name: "CCN - Cannacoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.cannacoin; + setHdCoin(19); + }, + }, + { + name: "CDN - Canadaecoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.canadaecoin; + setHdCoin(34); }, }, { @@ -1526,6 +1691,30 @@ setHdCoin(23); }, }, + { + name: "CLUB - Clubcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.clubcoin; + setHdCoin(79); + }, + }, + { + name: "CMP - Compcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.compcoin; + setHdCoin(71); + }, + }, + { + name: "CRAVE - Crave", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.crave; + setHdCoin(186); + }, + }, { name: "CRW - Crown", segwitAvailable: false, @@ -1550,6 +1739,46 @@ setHdCoin(1); }, }, + { + name: "DFC - Defcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.defcoin; + setHdCoin(1337); + }, + }, + { + name: "DGB - Digibyte", + segwitAvailable: true, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.digibyte; + setHdCoin(20); + }, + }, + { + name: "DGC - Digitalcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.digitalcoin; + setHdCoin(18); + }, + }, + { + name: "DMD - Diamond", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.diamond; + setHdCoin(152); + }, + }, + { + name: "DNR - Denarius", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.denarius; + setHdCoin(116); + }, + }, { name: "DOGE - Dogecoin", segwitAvailable: false, @@ -1558,6 +1787,46 @@ setHdCoin(3); }, }, + { + name: "ECN - Ecoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.ecoin; + setHdCoin(115); + }, + }, + { + name: "EDRC - Edrcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.edrcoin; + setHdCoin(56); + }, + }, + { + name: "EFL - Egulden", + segwitAvailable: true, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.egulden; + setHdCoin(78); + }, + }, + { + name: "EMC2 - Einsteinium", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.einsteinium; + setHdCoin(41); + }, + }, + { + name: "ERC - Europecoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.europecoin; + setHdCoin(151); + }, + }, { name: "ETH - Ethereum", segwitAvailable: false, @@ -1567,13 +1836,45 @@ }, }, { - name: "FJC - Fujicoin", + name: "EXCL - Exclusivecoin", segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.exclusivecoin; + setHdCoin(190); + }, + }, + { + name: "FJC - Fujicoin", + segwitAvailable: true, onSelect: function() { network = bitcoinjs.bitcoin.networks.fujicoin; setHdCoin(75); }, }, + { + name: "FLASH - Flashcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.flashcoin; + setHdCoin(120); + }, + }, + { + name: "FRST - Firstcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.firstcoin; + setHdCoin(167); + }, + }, + { + name: "FTC - Feathercoin", + segwitAvailable: true, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.feathercoin; + setHdCoin(8); + }, + }, { name: "GAME - GameCredits", segwitAvailable: false, @@ -1582,6 +1883,62 @@ setHdCoin(101); }, }, + { + name: "GBX - Gobyte", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.gobyte; + setHdCoin(176); + }, + }, + { + name: "GCR - GCRCoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.gcr; + setHdCoin(79); + }, + }, + { + name: "GRC - Gridcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.gridcoin; + setHdCoin(84); + }, + }, + { + name: "HNC - Helleniccoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.helleniccoin; + setHdCoin(168); + }, + }, + { + name: "INSN - Insane", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.insane; + setHdCoin(68); + }, + }, + { + name: "IOP - Iop", + segwitAvailable: true, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.iop; + setHdCoin(66); + }, + }, + { + name: "IXC - Ixcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.ixcoin; + setHdCoin(86); + }, + }, { name: "JBS - Jumbucks", segwitAvailable: false, @@ -1598,6 +1955,46 @@ setHdCoin(141); }, }, + { + name: "KOBO - Kobocoin", + bip49available: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.kobocoin; + setHdCoin(196); + }, + }, + { + name: "LBC - Library Credits", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.lbry; + setHdCoin(140); + }, + }, + { + name: "LCC - Litecoincash", + segwitAvailable: true, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.litecoincash; + setHdCoin(192); + }, + }, + { + name: "LDCN - Landcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.landcoin; + setHdCoin(63); + }, + }, + { + name: "LINX - Linx", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.linx; + setHdCoin(114); + }, + }, { name: "LTC - Litecoin", segwitAvailable: true, @@ -1607,6 +2004,14 @@ DOM.litecoinLtubContainer.removeClass("hidden"); }, }, + { + name: "LYNX - Lynx", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.lynx; + setHdCoin(191); + }, + }, { name: "MAZA - Maza", segwitAvailable: false, @@ -1615,6 +2020,14 @@ setHdCoin(13); }, }, + { + name: "MNX - Minexcoin", + segwitAvailable: true, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.minexcoin; + setHdCoin(182); + }, + }, { name: "MONA - Monacoin", segwitAvailable: true, @@ -1623,6 +2036,38 @@ setHdCoin(22); }, }, + { + name: "NAV - Navcoin", + segwitAvailable: true, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.navcoin; + setHdCoin(130); + }, + }, + { + name: "NEBL - Neblio", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.neblio; + setHdCoin(146); + }, + }, + { + name: "NEOS - Neoscoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.neoscoin; + setHdCoin(25); + }, + }, + { + name: "NLG - Gulden", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.gulden; + setHdCoin(87); + }, + }, { name: "NMC - Namecoin", segwitAvailable: false, @@ -1631,6 +2076,54 @@ setHdCoin(7); }, }, + { + name: "NRO - Neurocoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.neurocoin; + setHdCoin(110); + }, + }, + { + name: "NSR - Nushares", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.nushares; + setHdCoin(11); + }, + }, + { + name: "NYC - Newyorkc", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.newyorkc; + setHdCoin(179); + }, + }, + { + name: "NVC - Novacoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.novacoin; + setHdCoin(50); + }, + }, + { + name: "OK - Okcash", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.okcash; + setHdCoin(69); + }, + }, + { + name: "OMNI - Omnicore", + segwitAvailable: true, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.omnicore; + setHdCoin(200); + }, + }, { name: "ONX - Onixcoin", segwitAvailable: false, @@ -1639,6 +2132,14 @@ setHdCoin(174); }, }, + { + name: "PINK - Pinkcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.pinkcoin; + setHdCoin(117); + }, + }, { name: "PIVX - PIVX", segwitAvailable: false, @@ -1655,6 +2156,22 @@ setHdCoin(1); }, }, + { + name: "POSW - POSWcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.poswcoin; + setHdCoin(47); + }, + }, + { + name: "POT - Potcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.potcoin; + setHdCoin(81); + }, + }, { name: "PPC - Peercoin", segwitAvailable: false, @@ -1663,6 +2180,46 @@ setHdCoin(6); }, }, + { + name: "PSB - Pesobit", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.pesobit; + setHdCoin(62); + }, + }, + { + name: "PUT - Putincoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.putincoin; + setHdCoin(122); + }, + }, + { + name: "RBY - Rubycoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.rubycoin; + setHdCoin(16); + }, + }, + { + name: "RDD - Reddcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.reddoin; + setHdCoin(4); + }, + }, + { + name: "RVR - RevolutionVR", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.revolutionvr; + setHdCoin(129); + }, + }, { name: "SDC - ShadowCash", segwitAvailable: false, @@ -1695,6 +2252,62 @@ setHdCoin(111); }, }, + { + name: "SLR - Solarcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.solarcoin; + setHdCoin(58); + }, + }, + { + name: "SMLY - Smileycoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.smileycoin; + setHdCoin(59); + }, + }, + { + name: "STRAT - Stratis", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.stratis; + setHdCoin(105); + }, + }, + { + name: "SYS - Syscoin", + segwitAvailable: true, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.syscoin; + setHdCoin(57); + }, + }, + { + name: "THC - Hempcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.hempcoin; + setHdCoin(113); + }, + }, + { + name: "TOA - Toa", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.toa; + setHdCoin(159); + }, + }, + { + name: "USC - Ultimatesecurecash", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.ultimatesecurecash; + setHdCoin(112); + }, + }, { name: "USNBT - NuBits", segwitAvailable: false, @@ -1703,6 +2316,22 @@ setHdCoin(12); }, }, + { + name: "UNO - Unobtanium", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.unobtanium; + setHdCoin(92); + }, + }, + { + name: "VASH - Vpncoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.vpncoin; + setHdCoin(33); + }, + }, { name: "VIA - Viacoin", segwitAvailable: false, @@ -1719,6 +2348,38 @@ setHdCoin(1); }, }, + { + name: "VIVO - Vivo", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.vivo; + setHdCoin(166); + }, + }, + { + name: "VTC - Vertcoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.vertcoin; + setHdCoin(28); + }, + }, + { + name: "WC - Wincoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.wincoin; + setHdCoin(181); + }, + }, + { + name: "XBC - Bitcoinplus", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.bitcoinplus; + setHdCoin(65); + }, + }, { name: "XMY - Myriadcoin", segwitAvailable: false, @@ -1734,7 +2395,39 @@ network = bitcoinjs.bitcoin.networks.bitcoin; setHdCoin(144); }, - } + }, + { + name: "XVC - Vcash", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.vcash; + setHdCoin(127); + }, + }, + { + name: "XVG - Verge", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.verge; + setHdCoin(77); + }, + }, + { + name: "XWC - Whitecoin", + segwitAvailable: false, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.whitecoin; + setHdCoin(155); + }, + }, + { + name: "XZC - Zcoin", + segwitAvailable: true, + onSelect: function() { + network = bitcoinjs.bitcoin.networks.zcoin; + setHdCoin(136); + }, + }, ] var clients = [