]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blobdiff - src/js/index.js
Add a button to remove the "change" in the derivation path for ethereum
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / src / js / index.js
index 80b78bca7f42065f53f9bbf1c8c2069f74e41c58..68c74f6912f0ac7d97940d5d611ffd30384ced55 100644 (file)
@@ -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');
     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");
         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);
         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);
     function toggleBip85() {
       if (DOM.showBip85.prop('checked')) {
         DOM.bip85.removeClass('hidden');
-        toggleBip85Fields();
+        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');
         }
       }
     }
-  
+
     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) {
       }
       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();
           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) {
             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);
                     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
                          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) {
                     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()) {
 
         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() {
                 setHdCoin(357);
             },
         },
+        {
+            name: "ATOM - Cosmos Hub",
+            onSelect: function() {
+                network = libs.bitcoin.networks.bitcoin;
+                setHdCoin(118);
+            },
+        },
         {
             name: "AUR - Auroracoin",
             onSelect: function() {
                 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() {
                 setHdCoin(4);
             },
         },
+        {
+            name: "RITO - Ritocoin",
+            onSelect: function() {
+                network = libs.bitcoin.networks.ritocoin;
+                setHdCoin(19169);
+            },
+        },
         {
             name: "RVR - RevolutionVR",
             onSelect: function() {
             },
         },
         {
-            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() {