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;
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");
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 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: "Jumbucks",
+ name: "GAME - GameCredits",
+ onSelect: function() {
+ network = bitcoinjs.bitcoin.networks.game;
+ DOM.bip44coin.val(101);
+ },
+ },
+ {
+ 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: "Viacoin",
+ name: "SLM - Slimcoin",
+ onSelect: function() {
+ network = bitcoinjs.bitcoin.networks.slimcoin;
+ DOM.bip44coin.val(63);
+ },
+ },
+ {
+ name: "SLM - Slimcoin Testnet",
onSelect: function() {
- network = bitcoin.networks.viacoin;
+ network = bitcoinjs.bitcoin.networks.slimcointn;
+ DOM.bip44coin.val(111);
+ },
+ },
+ {
+ name: "VIA - Viacoin",
+ onSelect: function() {
+ 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 = [