]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blobdiff - bip39-standalone.html
jsbip39 updated - fixes Japanese language
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
index de74d8001dce3fddd4df181ea8e5b334b7287b5f..6be341509bd4e52fbb394080591560a35671b389 100644 (file)
@@ -12,6 +12,7 @@
         <meta content="width=device-width, initial-scale=1.0" name="viewport" />
         <meta content="bitcoin mnemonic converter" name="description" />
         <meta content="Ian Coleman" name="author" />
+        <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
 
         <style>
             body {
                                         <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
                                     </p>
                                 </div>
+                                <div class="form-group">
+                                    <label for="bip32-client" class="col-sm-2 control-label" data-translate>Client</label>
+                                    <div class="col-sm-10">
+                                        <select id="bip32-client" class="client form-control">
+                                            <option value="custom">Custom derivation path</option>
+                                            <!-- populated by javascript -->
+                                        </select>
+                                    </div>
+                                </div>
                                 <div class="form-group">
                                     <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
                                     <div class="col-sm-10">
                                         </p>
                                     </div>
                                 </div>
+                                <div class="form-group">
+                                    <label for="core-path" class="col-sm-2 control-label" data-translate>Multibit</label>
+                                    <div class="col-sm-10">
+                                        <p class="form-control no-border">
+                                            <span data-translate-html>Use path <code>m/0'/0</code>.</span>
+                                        </p>
+                                        <p class="form-control no-border">
+                                            <span data-translate>For more info see</span>
+                                            <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
+                                        </p>
+                                    </div>
+                                </div>
                                 <div class="form-group">
                                     <label class="col-sm-2 control-label" data-translate>Block Explorers</label>
                                     <div class="col-sm-10">
@@ -39111,10 +39133,11 @@ var Mnemonic = function(language) {
 
     self.toSeed = function(mnemonic, passphrase) {
         passphrase = passphrase || '';
-        mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
+        mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
+        var mnemonicNormalized = self.normalizeString(mnemonic);
         passphrase = self.normalizeString(passphrase)
         passphrase = "mnemonic" + passphrase;
-        var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
+        var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
         var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
         var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
         var hashHex = sjcl.codec.hex.fromBits(result);
@@ -41224,6 +41247,7 @@ window.Entropy = new (function() {
 
     var DOM = {};
     DOM.network = $(".network");
+    DOM.bip32Client = $("#bip32-client");
     DOM.phraseNetwork = $("#network-phrase");
     DOM.useEntropy = $(".use-entropy");
     DOM.entropyContainer = $(".entropy-container");
@@ -41278,6 +41302,7 @@ window.Entropy = new (function() {
     function init() {
         // Events
         DOM.network.on("change", networkChanged);
+        DOM.bip32Client.on("change", bip32ClientChanged);
         DOM.useEntropy.on("change", setEntropyVisibility);
         DOM.entropy.on("input", delayedEntropyChanged);
         DOM.entropyMnemonicLength.on("change", entropyChanged);
@@ -41303,6 +41328,7 @@ window.Entropy = new (function() {
         hidePending();
         hideValidationError();
         populateNetworkSelect();
+        populateClientSelect();
     }
 
     // Event handlers
@@ -41318,6 +41344,23 @@ window.Entropy = new (function() {
         }
     }
 
+    function bip32ClientChanged(e) {
+        var clientIndex = DOM.bip32Client.val();
+        if (clientIndex == "custom") {
+            DOM.bip32path.prop("readonly", false);
+        }
+        else {
+            DOM.bip32path.prop("readonly", true);
+            clients[clientIndex].onSelect();
+            if (seed != null) {
+                phraseChanged();
+            }
+            else {
+                rootKeyChanged();
+            }
+        }
+    }
+
     function setEntropyVisibility() {
         if (isUsingOwnEntropy()) {
             DOM.entropyContainer.removeClass("hidden");
@@ -41912,6 +41955,16 @@ window.Entropy = new (function() {
         }
     }
 
+    function populateClientSelect() {
+        for (var i=0; i<clients.length; i++) {
+            var client = clients[i];
+            var option = $("<option>");
+            option.attr("value", i);
+            option.text(client.name);
+            DOM.bip32Client.append(option);
+        }
+    }
+
     function getLanguage() {
         var defaultLanguage = "english";
         // Try to get from existing phrase
@@ -42257,10 +42310,10 @@ window.Entropy = new (function() {
             },
         },
         {
-            name: "Litecoin",
+            name: "CLAM",
             onSelect: function() {
-                network = bitcoin.networks.litecoin;
-                DOM.bip44coin.val(2);
+                network = bitcoin.networks.clam;
+                DOM.bip44coin.val(23);
             },
         },
         {
@@ -42271,75 +42324,99 @@ window.Entropy = new (function() {
             },
         },
         {
-            name: "ShadowCash",
+            name: "DASH",
             onSelect: function() {
-                network = bitcoin.networks.shadow;
-                DOM.bip44coin.val(35);
+                network = bitcoin.networks.dash;
+                DOM.bip44coin.val(5);
             },
         },
         {
-            name: "ShadowCash Testnet",
+            name: "Ethereum",
             onSelect: function() {
-                network = bitcoin.networks.shadowtn;
-                DOM.bip44coin.val(1);
+                network = bitcoin.networks.bitcoin;
+                DOM.bip44coin.val(60);
             },
         },
         {
-            name: "Viacoin",
+            name: "Jumbucks",
             onSelect: function() {
-                network = bitcoin.networks.viacoin;
-                DOM.bip44coin.val(14);
+                network = bitcoin.networks.jumbucks;
+                DOM.bip44coin.val(26);
             },
         },
         {
-            name: "Viacoin Testnet",
+            name: "Litecoin",
             onSelect: function() {
-                network = bitcoin.networks.viacointestnet;
-                DOM.bip44coin.val(1);
+                network = bitcoin.networks.litecoin;
+                DOM.bip44coin.val(2);
             },
         },
         {
-            name: "Jumbucks",
+            name: "Namecoin",
             onSelect: function() {
-                network = bitcoin.networks.jumbucks;
-                DOM.bip44coin.val(26);
+                network = bitcoin.networks.namecoin;
+                DOM.bip44coin.val(7);
             },
         },
         {
-            name: "CLAM",
+            name: "Peercoin",
             onSelect: function() {
-                network = bitcoin.networks.clam;
-                DOM.bip44coin.val(23);
+                network = bitcoin.networks.peercoin;
+                DOM.bip44coin.val(6);
             },
         },
         {
-            name: "DASH",
+            name: "ShadowCash",
             onSelect: function() {
-                network = bitcoin.networks.dash;
-                DOM.bip44coin.val(5);
+                network = bitcoin.networks.shadow;
+                DOM.bip44coin.val(35);
             },
         },
         {
-            name: "Namecoin",
+            name: "ShadowCash Testnet",
             onSelect: function() {
-                network = bitcoin.networks.namecoin;
-                DOM.bip44coin.val(7);
+                network = bitcoin.networks.shadowtn;
+                DOM.bip44coin.val(1);
             },
         },
         {
-            name: "Peercoin",
+            name: "Viacoin",
             onSelect: function() {
-                network = bitcoin.networks.peercoin;
-                DOM.bip44coin.val(6);
+                network = bitcoin.networks.viacoin;
+                DOM.bip44coin.val(14);
             },
         },
         {
-            name: "Ethereum",
+            name: "Viacoin Testnet",
             onSelect: function() {
-                network = bitcoin.networks.bitcoin;
-                DOM.bip44coin.val(60);
+                network = bitcoin.networks.viacointestnet;
+                DOM.bip44coin.val(1);
+            },
+        },
+    ]
+
+    var clients = [
+        {
+            name: "Bitcoin Core",
+            onSelect: function() {
+                DOM.bip32path.val("m/0'/0'");
+                DOM.hardenedAddresses.prop('checked', true);
             },
         },
+        {
+            name: "blockchain.info",
+            onSelect: function() {
+                DOM.bip32path.val("m/44'/0'/0'");
+                DOM.hardenedAddresses.prop('checked', false);
+            },
+        },
+        {
+            name: "MultiBit HD",
+            onSelect: function() {
+                DOM.bip32path.val("m/0'/0");
+                DOM.hardenedAddresses.prop('checked', false);
+            },
+        }
     ]
 
     init();