]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blobdiff - src/js/index.js
Refactor clearKey to better named clearKeys
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / src / js / index.js
index 8d756379560456c82f063a4605b5f3eb1a9d5fad..763967ca45bfb73a47eb7942d87bda6890091eda 100644 (file)
@@ -6,7 +6,7 @@
     var seed = null;
     var bip32RootKey = null;
     var bip32ExtendedKey = null;
-    var network = bitcoin.networks.bitcoin;
+    var network = bitcoinjs.bitcoin.networks.bitcoin;
     var addressRowTemplate = $("#address-row-template");
 
     var showIndex = true;
@@ -30,7 +30,7 @@
     DOM.entropy = $(".entropy");
     DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
     DOM.entropyType = DOM.entropyContainer.find(".type");
-    DOM.entropyStrength = DOM.entropyContainer.find(".strength");
+    DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
     DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
     DOM.entropyBits = DOM.entropyContainer.find(".bits");
     DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
@@ -88,8 +88,6 @@
         DOM.more.on("click", showMore);
         DOM.rootKey.on("input", delayedRootKeyChanged);
         DOM.bip32path.on("input", calcForDerivationPath);
-        DOM.bip44purpose.on("input", calcForDerivationPath);
-        DOM.bip44coin.on("input", calcForDerivationPath);
         DOM.bip44account.on("input", calcForDerivationPath);
         DOM.bip44change.on("input", calcForDerivationPath);
         DOM.tab.on("shown.bs.tab", calcForDerivationPath);
 
     function calcBip32RootKeyFromSeed(phrase, passphrase) {
         seed = mnemonic.toSeed(phrase, passphrase);
-        bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
+        bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
     }
 
     function calcBip32RootKeyFromBase58(rootKeyBase58) {
-        bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
+        bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
     }
 
     function calcBip32ExtendedKey(path) {
                 continue;
             }
             var hardened = bit[bit.length-1] == "'";
-            var isPriv = "privKey" in extendedKey;
+            var isPriv = !(extendedKey.isNeutered());
             var invalidDerivationPath = hardened && !isPriv;
             if (invalidDerivationPath) {
                 extendedKey = null;
 
     function validateRootKey(rootKeyBase58) {
         try {
-            bitcoin.HDNode.fromBase58(rootKeyBase58);
+            bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58);
         }
         catch (e) {
             return "Invalid root key";
         }
         // Check no hardened derivation path when using xpub keys
         var hardened = path.indexOf("'") > -1;
-        var isXpubkey = !("privKey" in bip32RootKey);
+        var isXpubkey = bip32RootKey.isNeutered();
         if (hardened && isXpubkey) {
             return "Hardened derivation path is invalid with xpub key";
         }
         // Calculate the account extended keys
         var accountExtendedKey = calcBip32ExtendedKey(path);
         var accountXprv = accountExtendedKey.toBase58();
-        var accountXpub = accountExtendedKey.toBase58(false);
+        var accountXpub = accountExtendedKey.neutered().toBase58();
         // Display the extended keys
         DOM.bip44accountXprv.val(accountXprv);
         DOM.bip44accountXpub.val(accountXpub);
         var rootKey = bip32RootKey.toBase58();
         DOM.rootKey.val(rootKey);
         var xprvkeyB58 = "NA";
-        if (bip32ExtendedKey.privKey) {
+        if (!bip32ExtendedKey.isNeutered()) {
             xprvkeyB58 = bip32ExtendedKey.toBase58();
         }
         var extendedPrivKey = xprvkeyB58;
         DOM.extendedPrivKey.val(extendedPrivKey);
-        var extendedPubKey = bip32ExtendedKey.toBase58(false);
+        var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
         DOM.extendedPubKey.val(extendedPubKey);
         // Display the addresses and privkeys
         clearAddressesList();
                 if (!self.shouldGenerate) {
                     return;
                 }
-                var key = "";
+                var key = "NA";
                 if (useHardenedAddresses) {
                     key = bip32ExtendedKey.deriveHardened(index);
                 }
                 }
                 var address = key.getAddress().toString();
                 var privkey = "NA";
-                if (key.privKey) {
-                    privkey = key.privKey.toWIF(network);
+                if (!key.isNeutered()) {
+                    privkey = key.keyPair.toWIF(network);
                 }
-                var pubkey = key.pubKey.toHex();
+                var pubkey = key.getPublicKeyBuffer().toString('hex');
                 var indexText = getDerivationPath() + "/" + index;
                 if (useHardenedAddresses) {
                     indexText = indexText + "'";
                 }
                 // Ethereum values are different
-                if (networks[DOM.network.val()].name == "Ethereum") {
-                    var privKeyBuffer = key.privKey.d.toBuffer();
+                if (networks[DOM.network.val()].name == "ETH - Ethereum") {
+                    var privKeyBuffer = key.keyPair.d.toBuffer();
                     privkey = privKeyBuffer.toString('hex');
                     var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
                     var hexAddress = addressBuffer.toString('hex');
                     var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
                     address = ethUtil.addHexPrefix(checksumAddress);
+                    privkey = ethUtil.addHexPrefix(privkey);
+                    pubkey = ethUtil.addHexPrefix(pubkey);
+                }
+                // Ripple values are different
+                if (networks[DOM.network.val()].name == "XRP - Ripple") {
+                    privkey = convertRipplePriv(privkey);
+                    address = convertRippleAdrr(address);
                 }
                 addAddressToList(indexText, address, pubkey, privkey);
             }, 50)
 
     function clearDisplay() {
         clearAddressesList();
-        clearKey();
+        clearKeys();
         hideValidationError();
     }
 
         }
     }
 
-    function clearKey() {
+    function clearKeys() {
+        clearRootKey();
+        clearDerivedKeys();
+    }
+
+    function clearRootKey() {
         DOM.rootKey.val("");
+    }
+
+    function clearDerivedKeys() {
         DOM.extendedPrivKey.val("");
         DOM.extendedPubKey.val("");
+        DOM.bip44accountXprv.val("");
+        DOM.bip44accountXpub.val("");
     }
 
     function addAddressToList(indexText, address, pubkey, privkey) {
     }
 
     function clearEntropyFeedback() {
-        DOM.entropyStrength.text("...");
+        DOM.entropyCrackTime.text("...");
         DOM.entropyType.text("");
         DOM.entropyWordCount.text("0");
         DOM.entropyEventCount.text("0");
 
     function showEntropyFeedback(entropy) {
         var numberOfBits = entropy.binaryStr.length;
-        var strength = "extremely weak";
-        if (numberOfBits >= 64) {
-            strength = "very weak";
-        }
-        if (numberOfBits >= 96) {
-            strength = "weak";
-        }
-        if (numberOfBits >= 128) {
-            strength = "strong";
-        }
-        if (numberOfBits >= 160) {
-            strength = "very strong";
-        }
-        if (numberOfBits >= 192) {
-            strength = "extremely strong";
-        }
-        // If time to crack is less than one day, and password is considered
-        // strong or better based on the number of bits, rename strength to
-        // 'easily cracked'.
+        var timeToCrack = "unknown";
         try {
             var z = zxcvbn(entropy.base.parts.join(""));
-            var timeToCrack = z.crack_times_seconds.offline_fast_hashing_1e10_per_second;
-            if (timeToCrack < 86400 && entropy.binaryStr.length >= 128) {
-                strength = "easily cracked";
-                if (z.feedback.warning != "") {
-                    strength = strength + " - " + z.feedback.warning;
-                };
-            }
+            timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
+            if (z.feedback.warning != "") {
+                timeToCrack = timeToCrack + " - " + z.feedback.warning;
+            };
         }
         catch (e) {
-            strength = "unknown";
             console.log("Error detecting entropy strength with zxcvbn:");
             console.log(e);
         }
         var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
         DOM.entropyFiltered.html(entropy.cleanHtml);
         DOM.entropyType.text(entropyTypeStr);
-        DOM.entropyStrength.text(strength);
+        DOM.entropyCrackTime.text(timeToCrack);
         DOM.entropyEventCount.text(entropy.base.ints.length);
         DOM.entropyBits.text(numberOfBits);
         DOM.entropyWordCount.text(wordCount);
 
     var networks = [
         {
-            name: "Bitcoin",
+            name: "BTC - Bitcoin",
             onSelect: function() {
-                network = bitcoin.networks.bitcoin;
+                network = bitcoinjs.bitcoin.networks.bitcoin;
                 DOM.bip44coin.val(0);
             },
         },
         {
-            name: "Bitcoin Testnet",
+            name: "BTC - Bitcoin Testnet",
             onSelect: function() {
-                network = bitcoin.networks.testnet;
+                network = bitcoinjs.bitcoin.networks.testnet;
                 DOM.bip44coin.val(1);
             },
         },
         {
-            name: "CLAM",
+            name: "CLAM - Clams",
             onSelect: function() {
-                network = bitcoin.networks.clam;
+                network = bitcoinjs.bitcoin.networks.clam;
                 DOM.bip44coin.val(23);
             },
         },
         {
-            name: "Dogecoin",
+            name: "CRW - Crown",
             onSelect: function() {
-                network = bitcoin.networks.dogecoin;
-                DOM.bip44coin.val(3);
+                network = bitcoin.networks.crown;
+                DOM.bip44coin.val(72);
             },
         },
         {
-            name: "DASH",
+            name: "DASH - Dash",
             onSelect: function() {
-                network = bitcoin.networks.dash;
+                network = bitcoinjs.bitcoin.networks.dash;
                 DOM.bip44coin.val(5);
             },
         },
         {
-            name: "Ethereum",
+            name: "DASH - Dash Testnet",
             onSelect: function() {
-                network = bitcoin.networks.bitcoin;
+                network = bitcoinjs.bitcoin.networks.dashtn;
+                DOM.bip44coin.val(1);
+            },
+        },
+        {
+            name: "DOGE - Dogecoin",
+            onSelect: function() {
+                network = bitcoin.networks.dogecoin;
+                DOM.bip44coin.val(3);
+            },
+        },
+        {
+            name: "ETH - Ethereum",
+            onSelect: function() {
+                network = bitcoinjs.bitcoin.networks.bitcoin;
                 DOM.bip44coin.val(60);
             },
         },
         {
-            name: "GAME",
+            name: "GAME - GameCredits",
             onSelect: function() {
-                network = bitcoin.networks.game;
+                network = bitcoinjs.bitcoin.networks.game;
                 DOM.bip44coin.val(101);
             },
         },
         {
-            name: "Jumbucks",
+            name: "JBS - Jumbucks",
             onSelect: function() {
-                network = bitcoin.networks.jumbucks;
+                network = bitcoinjs.bitcoin.networks.jumbucks;
                 DOM.bip44coin.val(26);
             },
         },
         {
-            name: "Litecoin",
+            name: "LTC - Litecoin",
             onSelect: function() {
-                network = bitcoin.networks.litecoin;
+                network = bitcoinjs.bitcoin.networks.litecoin;
                 DOM.bip44coin.val(2);
             },
         },
         {
-            name: "Namecoin",
+            name: "NMC - Namecoin",
             onSelect: function() {
-                network = bitcoin.networks.namecoin;
+                network = bitcoinjs.bitcoin.networks.namecoin;
                 DOM.bip44coin.val(7);
             },
         },
         {
-            name: "Peercoin",
+            name: "PPC - Peercoin",
             onSelect: function() {
-                network = bitcoin.networks.peercoin;
+                network = bitcoinjs.bitcoin.networks.peercoin;
                 DOM.bip44coin.val(6);
             },
         },
         {
-            name: "ShadowCash",
+            name: "SDC - ShadowCash",
             onSelect: function() {
-                network = bitcoin.networks.shadow;
+                network = bitcoinjs.bitcoin.networks.shadow;
                 DOM.bip44coin.val(35);
             },
         },
         {
-            name: "ShadowCash Testnet",
+            name: "SDC - ShadowCash Testnet",
             onSelect: function() {
-                network = bitcoin.networks.shadowtn;
+                network = bitcoinjs.bitcoin.networks.shadowtn;
                 DOM.bip44coin.val(1);
             },
         },
         {
-            name: "Slimcoin",
+            name: "SLM - Slimcoin",
             onSelect: function() {
-                network = bitcoin.networks.slimcoin;
+                network = bitcoinjs.bitcoin.networks.slimcoin;
                 DOM.bip44coin.val(63);
             },
         },
         {
-            name: "Slimcoin Testnet",
+            name: "SLM - Slimcoin Testnet",
             onSelect: function() {
-                network = bitcoin.networks.slimcointn;
+                network = bitcoinjs.bitcoin.networks.slimcointn;
                 DOM.bip44coin.val(111);
             },
         },
         {
-            name: "Viacoin",
+            name: "VIA - Viacoin",
             onSelect: function() {
-                network = bitcoin.networks.viacoin;
+                network = bitcoinjs.bitcoin.networks.viacoin;
                 DOM.bip44coin.val(14);
             },
         },
         {
-            name: "Viacoin Testnet",
+            name: "VIA - Viacoin Testnet",
             onSelect: function() {
-                network = bitcoin.networks.viacointestnet;
+                network = bitcoinjs.bitcoin.networks.viacointestnet;
                 DOM.bip44coin.val(1);
             },
         },
+        {
+            name: "XRP - Ripple",
+            onSelect: function() {
+                network = bitcoin.networks.bitcoin;
+                DOM.bip44coin.val(144);
+            },
+        }
     ]
 
     var clients = [