border-bottom: 1px dashed #000;
text-decoration: none;
}
+ .version {
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ }
</style>
</head>
<body>
<div class="container">
<h1 class="text-center">Mnemonic Code Converter</h1>
+ <p class="version">v0.1.1</p>
<hr>
<div class="row">
<div class="col-md-12">
<div class="col-sm-7">
<textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards" data-translate-placeholder></textarea>
<div class="row">
- <label class="col-sm-3 control-label" data-translate>Strength</label>
- <div class="strength col-sm-3 form-control-static"></div>
+ <label class="col-sm-3 control-label" data-translate><span class="more-info" data-translate-title title="Based on estimates from zxcvbn using Filtered Entropy">Time To Crack</span></label>
+ <div class="crack-time col-sm-3 form-control-static"></div>
<label class="col-sm-3 control-label" data-translate>Event Count</label>
<div class="event-count col-sm-3 form-control-static"></div>
</div>
<div class="bits-per-event col-sm-3 form-control-static"></div>
</div>
<div class="row">
- <label class="col-sm-3 control-label" data-translate>Word Count</label>
+ <label class="col-sm-3 control-label" data-translate>Raw Entropy Words</label>
<div class="word-count col-sm-3 form-control-static"></div>
<label class="col-sm-3 control-label" data-translate><span class="more-info" data-translate-title title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
<div class="bits col-sm-3 form-control-static"></div>
wif: 0x85,
};
+bitcoin.networks.crown = {
+ bip32: {
+ public: 0x0488b21e,
+ private: 0x0488ade4
+ },
+ pubKeyHash: 0x00,
+ scriptHash: 0x05,
+ wif: 0x80,
+};
+
bitcoin.networks.dash = {
bip32: {
public: 0x0488b21e,
wif: 0xcc,
};
+bitcoin.networks.dashtn = {
+ bip32: {
+ public: 0x043587cf,
+ private: 0x04358394
+ },
+ pubKeyHash: 0x8c,
+ scriptHash: 0x13,
+ wif: 0xef,
+};
+
bitcoin.networks.game = {
bip32: {
public: 0x0488b21e,
wif: 0xb7,
};
+bitcoin.networks.slimcoin = {
+ bip32: {
+ public: 0xef6adf10,
+ private: 0xef69ea80
+ },
+ pubKeyHash: 0x3f,
+ scriptHash: 0x7d,
+ wif: 0x46,
+};
+
+bitcoin.networks.slimcointn = {
+ bip32: {
+ public: 0x043587CF,
+ private: 0x04358394
+ },
+ pubKeyHash: 0x6f,
+ scriptHash: 0xc4,
+ wif: 0x57,
+};
+
</script>
<script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ethUtil = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
(function (global){
}
function convertRipplePriv(priv) {
- return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2)
+ return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
}
</script>
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");
indexText = indexText + "'";
}
// Ethereum values are different
- if (networks[DOM.network.val()].name == "Ethereum") {
+ if (networks[DOM.network.val()].name == "ETH - Ethereum") {
var privKeyBuffer = key.privKey.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 == "Ripple") {
+ if (networks[DOM.network.val()].name == "XRP - Ripple") {
privkey = convertRipplePriv(privkey);
address = convertRippleAdrr(address);
}
}
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;
DOM.bip44coin.val(0);
},
},
{
- name: "Bitcoin Testnet",
+ name: "BTC - Bitcoin Testnet",
onSelect: function() {
network = bitcoin.networks.testnet;
DOM.bip44coin.val(1);
},
},
{
- name: "CLAM",
+ name: "CLAM - Clams",
onSelect: function() {
network = 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;
DOM.bip44coin.val(5);
},
},
{
- name: "Ethereum",
+ name: "DASH - Dash Testnet",
+ onSelect: function() {
+ network = 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 = bitcoin.networks.bitcoin;
DOM.bip44coin.val(60);
},
},
{
- name: "GAME",
+ name: "GAME - GameCredits",
onSelect: function() {
network = bitcoin.networks.game;
DOM.bip44coin.val(101);
},
},
{
- name: "Jumbucks",
+ name: "JBS - Jumbucks",
onSelect: function() {
network = bitcoin.networks.jumbucks;
DOM.bip44coin.val(26);
},
},
{
- name: "Litecoin",
+ name: "LTC - Litecoin",
onSelect: function() {
network = bitcoin.networks.litecoin;
DOM.bip44coin.val(2);
},
},
{
- name: "Namecoin",
+ name: "NMC - Namecoin",
onSelect: function() {
network = bitcoin.networks.namecoin;
DOM.bip44coin.val(7);
},
},
{
- name: "Peercoin",
+ name: "PPC - Peercoin",
onSelect: function() {
network = bitcoin.networks.peercoin;
DOM.bip44coin.val(6);
},
},
{
- name: "Ripple",
- onSelect: function() {
- network = bitcoin.networks.bitcoin;
- DOM.bip44coin.val(144);
- },
- },
- {
- name: "ShadowCash",
+ name: "SDC - ShadowCash",
onSelect: function() {
network = bitcoin.networks.shadow;
DOM.bip44coin.val(35);
},
},
{
- name: "ShadowCash Testnet",
+ name: "SDC - ShadowCash Testnet",
onSelect: function() {
network = bitcoin.networks.shadowtn;
DOM.bip44coin.val(1);
},
},
{
- name: "Viacoin",
+ name: "SLM - Slimcoin",
+ onSelect: function() {
+ network = bitcoin.networks.slimcoin;
+ DOM.bip44coin.val(63);
+ },
+ },
+ {
+ name: "SLM - Slimcoin Testnet",
+ onSelect: function() {
+ network = bitcoin.networks.slimcointn;
+ DOM.bip44coin.val(111);
+ },
+ },
+ {
+ name: "VIA - Viacoin",
onSelect: function() {
network = bitcoin.networks.viacoin;
DOM.bip44coin.val(14);
},
},
{
- name: "Viacoin Testnet",
+ name: "VIA - Viacoin Testnet",
onSelect: function() {
network = bitcoin.networks.viacointestnet;
DOM.bip44coin.val(1);
},
},
+ {
+ name: "XRP - Ripple",
+ onSelect: function() {
+ network = bitcoin.networks.bitcoin;
+ DOM.bip44coin.val(144);
+ },
+ }
]
var clients = [