]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blobdiff - src/js/index.js
Add Groestlcoin
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / src / js / index.js
index fff1e40ebb6b5204e401e533de2119359eda1a97..f3302a64bfee229566ff574b82f474ad6db82773 100644 (file)
     function calcBip32RootKeyFromSeed(phrase, passphrase) {
         seed = mnemonic.toSeed(phrase, passphrase);
         bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
+        if(isGRS())
+            bip32RootKey = groestlcoinjs.HDNode.fromSeedHex(seed, network);
+
     }
 
     function calcBip32RootKeyFromBase58(rootKeyBase58) {
+        if(isGRS()) {
+            calcBip32RootKeyFromBase58GRS(rootKeyBase58);
+            return;
+        }
         // try parsing with various segwit network params since this extended
         // key may be from any one of them.
         if (networkHasSegwit()) {
         bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
     }
 
+    function calcBip32RootKeyFromBase58GRS(rootKeyBase58) {
+        // try parsing with various segwit network params since this extended
+        // key may be from any one of them.
+        if (networkHasSegwit()) {
+            var n = network;
+            if ("baseNetwork" in n) {
+                n = bitcoinjs.bitcoin.networks[n.baseNetwork];
+            }
+            // try parsing using base network params
+            try {
+                bip32RootKey = groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n);
+                return;
+            }
+            catch (e) {}
+            // try parsing using p2wpkh params
+            if ("p2wpkh" in n) {
+                try {
+                    bip32RootKey = groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkh);
+                    return;
+                }
+                catch (e) {}
+            }
+            // try parsing using p2wpkh-in-p2sh network params
+            if ("p2wpkhInP2sh" in n) {
+                try {
+                    bip32RootKey = groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh);
+                    return;
+                }
+                catch (e) {}
+            }
+        }
+        // try the network params as currently specified
+        bip32RootKey = groestlcoinjs.HDNode.fromBase58(rootKeyBase58, network);
+    }
+
     function calcBip32ExtendedKey(path) {
         // Check there's a root key to derive from
         if (!bip32RootKey) {
     }
 
     function validateRootKey(rootKeyBase58) {
+        if(isGRS()) 
+            return validateRootKeyGRS(rootKeyBase58);
+            
         // try various segwit network params since this extended key may be from
         // any one of them.
         if (networkHasSegwit()) {
         return "";
     }
 
+    function validateRootKeyGRS(rootKeyBase58) {
+        // try various segwit network params since this extended key may be from
+        // any one of them.
+        if (networkHasSegwit()) {
+            var n = network;
+            if ("baseNetwork" in n) {
+                n = bitcoinjs.bitcoin.networks[n.baseNetwork];
+            }
+            // try parsing using base network params
+            try {
+                groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n);
+                return "";
+            }
+            catch (e) {}
+            // try parsing using p2wpkh params
+            if ("p2wpkh" in n) {
+                try {
+                    groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkh);
+                    return "";
+                }
+                catch (e) {}
+            }
+            // try parsing using p2wpkh-in-p2sh network params
+            if ("p2wpkhInP2sh" in n) {
+                try {
+                    groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh);
+                    return "";
+                }
+                catch (e) {}
+            }
+        }
+        // try the network params as currently specified
+        try {
+            groestlcoinjs.HDNode.fromBase58(rootKeyBase58, network);
+        }
+        catch (e) {
+            return "Invalid root key";
+        }
+        return "";
+    }
+
     function getDerivationPath() {
         if (bip44TabSelected()) {
             var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
         return false;
     }
 
+    function isGRS() {
+        return networks[DOM.network.val()].name == "GRS - Groestlcoin" || networks[DOM.network.val()].name == "GRS - Groestlcoin Testnet";
+    }
+
     function displayBip44Info() {
         // Get the derivation path for the account
         var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
                 var useUncompressed = useBip38;
                 if (useUncompressed) {
                     keyPair = new bitcoinjs.bitcoin.ECPair(keyPair.d, null, { network: network, compressed: false });
+                    if(isGRS())
+                        keyPair = new groestlcoinjs.ECPair(keyPair.d, null, { network: network, compressed: false });
+
                 }
                 // get address
                 var address = keyPair.getAddress().toString();
                     privkey = keyPair.toWIF();
                     // BIP38 encode private key if required
                     if (useBip38) {
-                        privkey = bitcoinjsBip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) {
-                            console.log("Progressed " + p.percent.toFixed(1) + "% for index " + index);
-                        });
+                        if(isGRS())  
+                            privkey = groestlcoinjsBip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) {
+                                console.log("Progressed " + p.percent.toFixed(1) + "% for index " + index);
+                            }, null, networks[DOM.network.val()].name.includes("Testnet"));
+                        else
+                            privkey = bitcoinjsBip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) {
+                                console.log("Progressed " + p.percent.toFixed(1) + "% for index " + index);
+                            });
                     }
                 }
                 // get pubkey
                     privkey = eosUtil.bufferToPrivate(keyPair.d.toBuffer(32));
                 }
 
+                //Groestlcoin Addresses are different
+                if(isGRS()) {
+
+                    if (isSegwit) {
+                        if (!segwitAvailable) {
+                            return;
+                        }
+                        if (isP2wpkh) {
+                            address = groestlcoinjs.address.fromOutputScript(scriptpubkey, network)
+                        }
+                        else if (isP2wpkhInP2sh) {
+                            address = groestlcoinjs.address.fromOutputScript(scriptpubkey, network)
+                        }
+                    } 
+                    //non-segwit addresses are handled by using groestlcoinjs for bip32RootKey
+                }
+
                 addAddressToList(indexText, address, pubkey, privkey);
                 if (isLast) {
                     hidePending();
                 setHdCoin(84);
             },
         },
+        {
+            name: "GRS - Groestlcoin",
+            onSelect: function() {
+                network = bitcoinjs.bitcoin.networks.groestlcoin;
+                setHdCoin(17);
+            },
+        },
+        {
+            name: "GRS - Groestlcoin Testnet",
+            onSelect: function() {
+                network = bitcoinjs.bitcoin.networks.groestlcointestnet;
+                setHdCoin(1);
+            },
+        },
         {
             name: "HNC - Helleniccoin",
             onSelect: function() {