X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2Fjs%2Findex.js;h=b0700063c3383157604e91909420308439b967f0;hb=bf96267f89d18f278e78cf02c97ab1e7513fb871;hp=d169ed28dc2ebcd808c2d1ec9edbb0b1455d3280;hpb=f12242014d1ed5c7606c3350a9780c3883abc565;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git diff --git a/src/js/index.js b/src/js/index.js index d169ed2..b070006 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -6,7 +6,7 @@ var seed = null; var bip32RootKey = null; var bip32ExtendedKey = null; - var network = bitcoinjs.bitcoin.networks.bitcoin; + var network = libs.bitcoin.networks.bitcoin; var addressRowTemplate = $("#address-row-template"); var showIndex = true; @@ -19,6 +19,7 @@ var entropyTypeAutoDetect = true; var entropyChangeTimeoutEvent = null; var phraseChangeTimeoutEvent = null; + var seedChangedTimeoutEvent = null; var rootKeyChangedTimeoutEvent = null; var generationProcesses = []; @@ -135,6 +136,7 @@ DOM.passphrase.on("input", delayedPhraseChanged); DOM.generate.on("click", generateClicked); DOM.more.on("click", showMore); + DOM.seed.on("input", delayedSeedChanged); DOM.rootKey.on("input", delayedRootKeyChanged); DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged); DOM.bip32path.on("input", calcForDerivationPath); @@ -340,6 +342,30 @@ entropyChanged(); } + function delayedSeedChanged() { + // Warn if there is an existing mnemonic or passphrase. + if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) { + if (!confirm("This will clear existing mnemonic and passphrase")) { + DOM.seed.val(seed); + return + } + } + hideValidationError(); + showPending(); + // Clear existing mnemonic and passphrase + DOM.phrase.val(""); + DOM.phraseSplit.val(""); + DOM.passphrase.val(""); + DOM.rootKey.val(""); + clearAddressesList(); + clearDerivedKeys(); + seed = null; + if (seedChangedTimeoutEvent != null) { + clearTimeout(seedChangedTimeoutEvent); + } + seedChangedTimeoutEvent = setTimeout(seedChanged, 400); + } + function delayedRootKeyChanged() { // Warn if there is an existing mnemonic or passphrase. if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) { @@ -361,6 +387,22 @@ rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400); } + function seedChanged() { + showPending(); + hideValidationError(); + seed = DOM.seed.val(); + bip32RootKey = libs.bitcoin.HDNode.fromSeedHex(seed, network); + var rootKeyBase58 = bip32RootKey.toBase58(); + DOM.rootKey.val(rootKeyBase58); + var errorText = validateRootKey(rootKeyBase58); + if (errorText) { + showValidationError(errorText); + return; + } + // Calculate and display + calcForDerivationPath(); + } + function rootKeyChanged() { showPending(); hideValidationError(); @@ -378,10 +420,10 @@ function litecoinUseLtubChanged() { litecoinUseLtub = DOM.litecoinUseLtub.prop("checked"); if (litecoinUseLtub) { - network = bitcoinjs.bitcoin.networks.litecoin; + network = libs.bitcoin.networks.litecoin; } else { - network = bitcoinjs.bitcoin.networks.litecoinXprv; + network = libs.bitcoin.networks.litecoinXprv; } phraseChanged(); } @@ -509,9 +551,9 @@ function calcBip32RootKeyFromSeed(phrase, passphrase) { seed = mnemonic.toSeed(phrase, passphrase); - bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network); + bip32RootKey = libs.bitcoin.HDNode.fromSeedHex(seed, network); if(isGRS()) - bip32RootKey = groestlcoinjs.HDNode.fromSeedHex(seed, network); + bip32RootKey = libs.groestlcoinjs.HDNode.fromSeedHex(seed, network); } @@ -525,18 +567,18 @@ if (networkHasSegwit()) { var n = network; if ("baseNetwork" in n) { - n = bitcoinjs.bitcoin.networks[n.baseNetwork]; + n = libs.bitcoin.networks[n.baseNetwork]; } // try parsing using base network params try { - bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n); + bip32RootKey = libs.bitcoin.HDNode.fromBase58(rootKeyBase58, n); return; } catch (e) {} // try parsing using p2wpkh params if ("p2wpkh" in n) { try { - bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkh); + bip32RootKey = libs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkh); return; } catch (e) {} @@ -544,7 +586,7 @@ // try parsing using p2wpkh-in-p2sh network params if ("p2wpkhInP2sh" in n) { try { - bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh); + bip32RootKey = libs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh); return; } catch (e) {} @@ -552,7 +594,7 @@ // try parsing using p2wsh network params if ("p2wsh" in n) { try { - bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wsh); + bip32RootKey = libs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wsh); return; } catch (e) {} @@ -560,14 +602,14 @@ // try parsing using p2wsh-in-p2sh network params if ("p2wshInP2sh" in n) { try { - bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wshInP2sh); + bip32RootKey = libs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wshInP2sh); return; } catch (e) {} } } // try the network params as currently specified - bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network); + bip32RootKey = libs.bitcoin.HDNode.fromBase58(rootKeyBase58, network); } function calcBip32RootKeyFromBase58GRS(rootKeyBase58) { @@ -576,18 +618,18 @@ if (networkHasSegwit()) { var n = network; if ("baseNetwork" in n) { - n = bitcoinjs.bitcoin.networks[n.baseNetwork]; + n = libs.bitcoin.networks[n.baseNetwork]; } // try parsing using base network params try { - bip32RootKey = groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n); + bip32RootKey = libs.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); + bip32RootKey = libs.groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkh); return; } catch (e) {} @@ -595,14 +637,14 @@ // try parsing using p2wpkh-in-p2sh network params if ("p2wpkhInP2sh" in n) { try { - bip32RootKey = groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh); + bip32RootKey = libs.groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh); return; } catch (e) {} } } // try the network params as currently specified - bip32RootKey = groestlcoinjs.HDNode.fromBase58(rootKeyBase58, network); + bip32RootKey = libs.groestlcoinjs.HDNode.fromBase58(rootKeyBase58, network); } function calcBip32ExtendedKey(path) { @@ -683,18 +725,18 @@ if (networkHasSegwit()) { var n = network; if ("baseNetwork" in n) { - n = bitcoinjs.bitcoin.networks[n.baseNetwork]; + n = libs.bitcoin.networks[n.baseNetwork]; } // try parsing using base network params try { - bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n); + libs.bitcoin.HDNode.fromBase58(rootKeyBase58, n); return ""; } catch (e) {} // try parsing using p2wpkh params if ("p2wpkh" in n) { try { - bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkh); + libs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkh); return ""; } catch (e) {} @@ -702,7 +744,7 @@ // try parsing using p2wpkh-in-p2sh network params if ("p2wpkhInP2sh" in n) { try { - bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh); + libs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh); return ""; } catch (e) {} @@ -710,7 +752,7 @@ // try parsing using p2wsh network params if ("p2wsh" in n) { try { - bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wsh); + libs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wsh); return ""; } catch (e) {} @@ -718,7 +760,7 @@ // try parsing using p2wsh-in-p2sh network params if ("p2wshInP2sh" in n) { try { - bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wshInP2sh); + libs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wshInP2sh); return ""; } catch (e) {} @@ -726,7 +768,7 @@ } // try the network params as currently specified try { - bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network); + libs.bitcoin.HDNode.fromBase58(rootKeyBase58, network); } catch (e) { return "Invalid root key"; @@ -740,18 +782,18 @@ if (networkHasSegwit()) { var n = network; if ("baseNetwork" in n) { - n = bitcoinjs.bitcoin.networks[n.baseNetwork]; + n = libs.bitcoin.networks[n.baseNetwork]; } // try parsing using base network params try { - groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n); + libs.groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n); return ""; } catch (e) {} // try parsing using p2wpkh params if ("p2wpkh" in n) { try { - groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkh); + libs.groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkh); return ""; } catch (e) {} @@ -759,7 +801,7 @@ // try parsing using p2wpkh-in-p2sh network params if ("p2wpkhInP2sh" in n) { try { - groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh); + libs.groestlcoinjs.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh); return ""; } catch (e) {} @@ -767,7 +809,7 @@ } // try the network params as currently specified try { - groestlcoinjs.HDNode.fromBase58(rootKeyBase58, network); + libs.groestlcoinjs.HDNode.fromBase58(rootKeyBase58, network); } catch (e) { return "Invalid root key"; @@ -1054,9 +1096,9 @@ var keyPair = key.keyPair; var useUncompressed = useBip38; if (useUncompressed) { - keyPair = new bitcoinjs.bitcoin.ECPair(keyPair.d, null, { network: network, compressed: false }); + keyPair = new libs.bitcoin.ECPair(keyPair.d, null, { network: network, compressed: false }); if(isGRS()) - keyPair = new groestlcoinjs.ECPair(keyPair.d, null, { network: network, compressed: false }); + keyPair = new libs.groestlcoinjs.ECPair(keyPair.d, null, { network: network, compressed: false }); } // get address @@ -1069,11 +1111,11 @@ // BIP38 encode private key if required if (useBip38) { if(isGRS()) - privkey = groestlcoinjsBip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) { + privkey = libs.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) { + privkey = libs.bip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) { console.log("Progressed " + p.percent.toFixed(1) + "% for index " + index); }); } @@ -1086,14 +1128,50 @@ } // Ethereum values are different if (networkIsEthereum()) { - var privKeyBuffer = keyPair.d.toBuffer(32); - privkey = privKeyBuffer.toString('hex'); - var addressBuffer = ethUtil.privateToAddress(privKeyBuffer); + var pubkeyBuffer = keyPair.getPublicKeyBuffer(); + var ethPubkey = libs.ethUtil.importPublic(pubkeyBuffer); + var addressBuffer = libs.ethUtil.publicToAddress(ethPubkey); + var hexAddress = addressBuffer.toString('hex'); + var checksumAddress = libs.ethUtil.toChecksumAddress(hexAddress); + address = libs.ethUtil.addHexPrefix(checksumAddress); + pubkey = libs.ethUtil.addHexPrefix(pubkey); + if (hasPrivkey) { + privkey = libs.ethUtil.bufferToHex(keyPair.d.toBuffer()); + } + } + + // RSK values are different + if (networkIsRsk()) { + var pubkeyBuffer = keyPair.getPublicKeyBuffer(); + var ethPubkey = libs.ethUtil.importPublic(pubkeyBuffer); + var addressBuffer = libs.ethUtil.publicToAddress(ethPubkey); var hexAddress = addressBuffer.toString('hex'); - var checksumAddress = ethUtil.toChecksumAddress(hexAddress); - address = ethUtil.addHexPrefix(checksumAddress); - privkey = ethUtil.addHexPrefix(privkey); - pubkey = ethUtil.addHexPrefix(pubkey); + // Use chainId based on selected network + // Ref: https://developers.rsk.co/rsk/architecture/account-based/#chainid + var chainId; + var rskNetworkName = networks[DOM.network.val()].name; + switch (rskNetworkName) { + case "R-BTC - RSK": + chainId = 30; + break; + case "tR-BTC - RSK Testnet": + chainId = 31; + break; + default: + chainId = null; + } + var checksumAddress = toChecksumAddressForRsk(hexAddress, chainId); + address = libs.ethUtil.addHexPrefix(checksumAddress); + pubkey = libs.ethUtil.addHexPrefix(pubkey); + if (hasPrivkey) { + privkey = libs.ethUtil.bufferToHex(keyPair.d.toBuffer()); + } + } + + // Handshake values are different + if (networks[DOM.network.val()].name == "HNS - Handshake") { + var ring = libs.handshake.KeyRing.fromPublic(keyPair.getPublicKeyBuffer()) + address = ring.getAddress().toString(); } // Stellar is different @@ -1103,15 +1181,14 @@ var path = "m/"; path += purpose + "'/"; path += coin + "'/" + index + "'"; - var keypair = stellarUtil.getKeypair(path, seed); + var keypair = libs.stellarUtil.getKeypair(path, seed); indexText = path; privkey = keypair.secret(); pubkey = address = keypair.publicKey(); } if ((networks[DOM.network.val()].name == "NAS - Nebulas")) { - var NasAccount = require("nebulas-account"); var privKeyBuffer = keyPair.d.toBuffer(32); - var nebulasAccount = new NasAccount(); + var nebulasAccount = libs.nebulas.Account.NewAccount(); nebulasAccount.setPrivateKey(privKeyBuffer); address = nebulasAccount.getAddressString(); privkey = nebulasAccount.getPrivateKeyString(); @@ -1122,6 +1199,11 @@ privkey = convertRipplePriv(privkey); address = convertRippleAdrr(address); } + // Jingtum values are different + if (networks[DOM.network.val()].name == "SWTC - Jingtum") { + privkey = convertJingtumPriv(privkey); + address = convertJingtumAdrr(address); + } // CasinoCoin values are different if (networks[DOM.network.val()].name == "CSC - CasinoCoin") { privkey = convertCasinoCoinPriv(privkey); @@ -1131,17 +1213,17 @@ if (networks[DOM.network.val()].name == "BCH - Bitcoin Cash") { var bchAddrType = DOM.bitcoinCashAddressType.filter(":checked").val(); if (bchAddrType == "cashaddr") { - address = bchaddr.toCashAddress(address); + address = libs.bchaddr.toCashAddress(address); } else if (bchAddrType == "bitpay") { - address = bchaddr.toBitpayAddress(address); + address = libs.bchaddr.toBitpayAddress(address); } } // Bitcoin Cash address format may vary if (networks[DOM.network.val()].name == "SLP - Simple Ledger Protocol") { var bchAddrType = DOM.bitcoinCashAddressType.filter(":checked").val(); if (bchAddrType == "cashaddr") { - address = bchaddr.toSlpAddress(address); + address = libs.bchaddrSlp.toSlpAddress(address); } } // Segwit addresses are different @@ -1150,42 +1232,48 @@ return; } if (isP2wpkh) { - var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer()); - var scriptpubkey = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash); - address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network) + var keyhash = libs.bitcoin.crypto.hash160(key.getPublicKeyBuffer()); + var scriptpubkey = libs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash); + address = libs.bitcoin.address.fromOutputScript(scriptpubkey, network) } else if (isP2wpkhInP2sh) { - var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer()); - var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash); - var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig); - var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes); - address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network) + var keyhash = libs.bitcoin.crypto.hash160(key.getPublicKeyBuffer()); + var scriptsig = libs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash); + var addressbytes = libs.bitcoin.crypto.hash160(scriptsig); + var scriptpubkey = libs.bitcoin.script.scriptHash.output.encode(addressbytes); + address = libs.bitcoin.address.fromOutputScript(scriptpubkey, network) } else if (isP2wsh) { - // https://github.com/bitcoinjs/bitcoinjs-lib/blob/v3.3.2/test/integration/addresses.js#L71 + // https://github.com/libs.bitcoinjs-lib/blob/v3.3.2/test/integration/addresses.js#L71 // This is a 1-of-1 - var witnessScript = bitcoinjs.bitcoin.script.multisig.output.encode(1, [key.getPublicKeyBuffer()]); - var scriptPubKey = bitcoinjs.bitcoin.script.witnessScriptHash.output.encode(bitcoinjs.bitcoin.crypto.sha256(witnessScript)); - address = bitcoinjs.bitcoin.address.fromOutputScript(scriptPubKey, network); + var witnessScript = libs.bitcoin.script.multisig.output.encode(1, [key.getPublicKeyBuffer()]); + var scriptPubKey = libs.bitcoin.script.witnessScriptHash.output.encode(libs.bitcoin.crypto.sha256(witnessScript)); + address = libs.bitcoin.address.fromOutputScript(scriptPubKey, network); } else if (isP2wshInP2sh) { - // https://github.com/bitcoinjs/bitcoinjs-lib/blob/v3.3.2/test/integration/transactions.js#L183 + // https://github.com/libs.bitcoinjs-lib/blob/v3.3.2/test/integration/transactions.js#L183 // This is a 1-of-1 - var witnessScript = bitcoinjs.bitcoin.script.multisig.output.encode(1, [key.getPublicKeyBuffer()]); - var redeemScript = bitcoinjs.bitcoin.script.witnessScriptHash.output.encode(bitcoinjs.bitcoin.crypto.sha256(witnessScript)); - var scriptPubKey = bitcoinjs.bitcoin.script.scriptHash.output.encode(bitcoinjs.bitcoin.crypto.hash160(redeemScript)); - address = bitcoinjs.bitcoin.address.fromOutputScript(scriptPubKey, network) + var witnessScript = libs.bitcoin.script.multisig.output.encode(1, [key.getPublicKeyBuffer()]); + var redeemScript = libs.bitcoin.script.witnessScriptHash.output.encode(libs.bitcoin.crypto.sha256(witnessScript)); + var scriptPubKey = libs.bitcoin.script.scriptHash.output.encode(libs.bitcoin.crypto.hash160(redeemScript)); + address = libs.bitcoin.address.fromOutputScript(scriptPubKey, network) } } if ((networks[DOM.network.val()].name == "CRW - Crown")) { - address = bitcoinjs.bitcoin.networks.crown.toNewAddress(address); + address = libs.bitcoin.networks.crown.toNewAddress(address); } if (networks[DOM.network.val()].name == "EOS - EOSIO") { address = "" - pubkey = eosUtil.bufferToPublic(keyPair.getPublicKeyBuffer()); - privkey = eosUtil.bufferToPrivate(keyPair.d.toBuffer(32)); + pubkey = EOSbufferToPublic(keyPair.getPublicKeyBuffer()); + privkey = EOSbufferToPrivate(keyPair.d.toBuffer(32)); + } + + if (networks[DOM.network.val()].name == "FIO - Foundation for Interwallet Operability") { + address = "" + pubkey = FIObufferToPublic(keyPair.getPublicKeyBuffer()); + privkey = FIObufferToPrivate(keyPair.d.toBuffer(32)); } //Groestlcoin Addresses are different @@ -1196,10 +1284,10 @@ return; } if (isP2wpkh) { - address = groestlcoinjs.address.fromOutputScript(scriptpubkey, network) + address = libs.groestlcoinjs.address.fromOutputScript(scriptpubkey, network) } else if (isP2wpkhInP2sh) { - address = groestlcoinjs.address.fromOutputScript(scriptpubkey, network) + address = libs.groestlcoinjs.address.fromOutputScript(scriptpubkey, network) } } //non-segwit addresses are handled by using groestlcoinjs for bip32RootKey @@ -1353,7 +1441,7 @@ if (comparedTo.indexOf(word) == 0) { return comparedTo; } - var distance = Levenshtein.get(word, comparedTo); + var distance = libs.levenshtein.get(word, comparedTo); if (distance < minDistance) { closestWord = comparedTo; minDistance = distance; @@ -1581,7 +1669,7 @@ // Get bits by hashing entropy with SHA256 var hash = sjcl.hash.sha256.hash(entropy.cleanStr); var hex = sjcl.codec.hex.fromBits(hash); - bits = BigInteger.parse(hex, 16).toString(2); + bits = libs.BigInteger.BigInteger.parse(hex, 16).toString(2); while (bits.length % 256 != 0) { bits = "0" + bits; } @@ -1638,7 +1726,7 @@ var numberOfBits = entropy.binaryStr.length; var timeToCrack = "unknown"; try { - var z = zxcvbn(entropy.base.parts.join("")); + var z = libs.zxcvbn(entropy.base.events.join("")); timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second; if (z.feedback.warning != "") { timeToCrack = timeToCrack + " - " + z.feedback.warning; @@ -1657,7 +1745,7 @@ DOM.entropyFiltered.html(entropy.cleanHtml); DOM.entropyType.text(entropyTypeStr); DOM.entropyCrackTime.text(timeToCrack); - DOM.entropyEventCount.text(entropy.base.ints.length); + DOM.entropyEventCount.text(entropy.base.events.length); DOM.entropyBits.text(numberOfBits); DOM.entropyWordCount.text(wordCount); DOM.entropyBinary.text(spacedBinaryStr); @@ -1682,8 +1770,8 @@ // Detect duplicates var dupes = []; var dupeTracker = {}; - for (var i=0; i= 8 ? + stripAddress[i].toUpperCase() : + stripAddress[i]; + } + + return checksumAddress; + } + + // RSK - RSK functions - end + // ELA - Elastos functions - begin function displayBip44InfoForELA() { if (!isELA()) { @@ -3272,8 +3494,8 @@ var account = parseIntNoNaN(DOM.bip44account.val(), 0); // Calculate the account extended keys - var accountXprv = elastosjs.getAccountExtendedPrivateKey(seed, coin, account); - var accountXpub = elastosjs.getAccountExtendedPublicKey(seed, coin, account); + var accountXprv = libs.elastosjs.getAccountExtendedPrivateKey(seed, coin, account); + var accountXpub = libs.elastosjs.getAccountExtendedPublicKey(seed, coin, account); // Display the extended keys DOM.bip44accountXprv.val(accountXprv); @@ -3289,8 +3511,8 @@ var account = parseIntNoNaN(DOM.bip44account.val(), 0); var change = parseIntNoNaN(DOM.bip44change.val(), 0); - DOM.extendedPrivKey.val(elastosjs.getBip32ExtendedPrivateKey(seed, coin, account, change)); - DOM.extendedPubKey.val(elastosjs.getBip32ExtendedPublicKey(seed, coin, account, change)); + DOM.extendedPrivKey.val(libs.elastosjs.getBip32ExtendedPrivateKey(seed, coin, account, change)); + DOM.extendedPubKey.val(libs.elastosjs.getBip32ExtendedPublicKey(seed, coin, account, change)); // Display the addresses and privkeys clearAddressesList(); @@ -3303,11 +3525,11 @@ return; } - var publicKey = elastosjs.getDerivedPublicKey(elastosjs.getMasterPublicKey(seed), change, index); + var publicKey = libs.elastosjs.getDerivedPublicKey(libs.elastosjs.getMasterPublicKey(seed), change, index); return { - privateKey: elastosjs.getDerivedPrivateKey(seed, coin, account, change, index), + privateKey: libs.elastosjs.getDerivedPrivateKey(seed, coin, account, change, index), publicKey: publicKey, - address: elastosjs.getAddress(publicKey.toString('hex')) + address: libs.elastosjs.getAddress(publicKey.toString('hex')) }; } // ELA - Elastos functions - end