aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Coleman <coleman.ian@gmail.com>2016-11-14 13:40:04 +1100
committerIan Coleman <coleman.ian@gmail.com>2016-11-14 13:40:04 +1100
commit2a6dd137d91007a14fb841f24d1eabccd3f4f4b5 (patch)
tree383c18e0931ee900b693a2279fccde73ba671703
parentb2d61f5602476d2d01748e2b123f8ece6c7aeb5f (diff)
downloadBIP39-2a6dd137d91007a14fb841f24d1eabccd3f4f4b5.tar.gz
BIP39-2a6dd137d91007a14fb841f24d1eabccd3f4f4b5.tar.zst
BIP39-2a6dd137d91007a14fb841f24d1eabccd3f4f4b5.zip
Entropy changes compiled into standalone
-rw-r--r--bip39-standalone.html170
1 files changed, 96 insertions, 74 deletions
diff --git a/bip39-standalone.html b/bip39-standalone.html
index b7471d0..8094f7c 100644
--- a/bip39-standalone.html
+++ b/bip39-standalone.html
@@ -47,7 +47,7 @@
47 .phrase { 47 .phrase {
48 word-break: keep-all; 48 word-break: keep-all;
49 } 49 }
50 .strength { 50 .generate-container .strength {
51 /* override mobile width from bootstrap */ 51 /* override mobile width from bootstrap */
52 width: auto!important; 52 width: auto!important;
53 display: inline-block; 53 display: inline-block;
@@ -58,6 +58,29 @@
58 .monospace { 58 .monospace {
59 font-family: monospace; 59 font-family: monospace;
60 } 60 }
61 .entropy-container .filtered,
62 .entropy-container .binary {
63 word-wrap: break-word;
64 }
65 .entropy-container li {
66 padding-bottom: 5px;
67 }
68 .card-suit {
69 font-size: 19px;
70 line-height: 0;
71 }
72 .card-suit.club {
73 color: #009F00;
74 }
75 .card-suit.diamond {
76 color: #3D5DC4;
77 }
78 .card-suit.heart {
79 color: #F00;
80 }
81 .card-suit.spade {
82 color: #000;
83 }
61 </style> 84 </style>
62 </head> 85 </head>
63 <body> 86 <body>
@@ -99,58 +122,36 @@
99 </div> 122 </div>
100 </div> 123 </div>
101 <div class="entropy-container hidden"> 124 <div class="entropy-container hidden">
102 <div class="form-group"> 125 <div class="form-group text-danger">
103 <label for="entropy" class="col-sm-2 control-label">Entropy</label> 126 <label class="col-sm-2 control-label">Warning</label>
104 <div class="col-sm-6"> 127 <div class="col-sm-10 form-control-static">
105 <textarea id="entropy" rows="6" class="entropy form-control" placeholder="Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards"></textarea> 128 Entropy is an advanced feature.
106 <span class="help-block"> 129 Your mnemonic may be insecure if this feature is used incorrectly.
107 <div class="text-danger"> 130 <a href="#entropy-notes">Read more</a>
108 This is an advanced feature.
109 Your mnemonic may be insecure if this feature is used incorrectly.
110 <a href="#entropy-notes">Read more</a>
111 </div>
112 </span>
113 </div>
114 <div class="pull-right col-sm-4">
115 <p>Valid entropy values include:</p>
116 <ul>
117 <li>Binary: [0-1] eg 101010011</li>
118 <li>Base 6: [0-5] eg 123434014</li>
119 <li>Dice: [1-6] eg 62535634</li>
120 <li>Base 10: [0-9] eg 90834528</li>
121 <li>Hex: [0-9A-F] eg 4187a8bfd9</li>
122 <li>Card: [A2-9TJQK][CDHS] eg AHQS9DTC</li>
123 </ul>
124 </div> 131 </div>
125 </div> 132 </div>
126 <div class="entropy-feedback"> 133 <div class="form-group">
127 <div class="form-group"> 134 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
128 <label class="col-sm-2 control-label">Filtered</label> 135 <div class="col-sm-7">
129 <div class="filtered col-sm-10 form-control-static"></div> 136 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards"></textarea>
130 </div> 137 <label class="col-sm-3 control-label">Strength</label>
131 <div class="form-group"> 138 <div class="strength col-sm-3 form-control-static"></div>
132 <label class="col-sm-2 control-label">Type</label> 139 <label class="col-sm-3 control-label">Event Count</label>
133 <div class="type col-sm-10 form-control-static"></div> 140 <div class="event-count col-sm-3 form-control-static"></div>
134 </div> 141 <label class="col-sm-3 control-label">Entropy Type</label>
135 <div class="form-group"> 142 <div class="type col-sm-3 form-control-static"></div>
136 <label class="col-sm-2 control-label">Strength</label> 143 <label class="col-sm-3 control-label">Bits Per Event</label>
137 <div class="strength col-sm-10 form-control-static"></div> 144 <div class="bits-per-event col-sm-3 form-control-static"></div>
138 </div> 145 <label class="col-sm-3 control-label">Word Count</label>
139 <div class="form-group"> 146 <div class="word-count col-sm-3 form-control-static"></div>
140 <label class="col-sm-2 control-label">Event Count</label> 147 <label class="col-sm-3 control-label">Total Bits</label>
141 <div class="event-count col-sm-10 form-control-static"></div> 148 <div class="bits col-sm-3 form-control-static"></div>
142 </div> 149 <label class="col-sm-3 control-label">Filtered Entropy</label>
143 <div class="form-group"> 150 <div class="filtered col-sm-9 form-control-static"></div>
144 <label class="col-sm-2 control-label">Bits Per Event</label> 151 <label class="col-sm-3 control-label">Raw Binary</label>
145 <div class="bits-per-event col-sm-10 form-control-static"></div> 152 <div class="binary col-sm-9 form-control-static"></div>
146 </div> 153 <label class="col-sm-3 control-label">Mnemonic Length</label>
147 <div class="form-group"> 154 <div class="col-sm-9">
148 <label class="col-sm-2 control-label">Bits</label>
149 <div class="bits col-sm-10 form-control-static"></div>
150 </div>
151 <div class="form-group">
152 <label class="col-sm-2 control-label">Mnemonic Length</label>
153 <div class="col-sm-10">
154 <select class="mnemonic-length form-control"> 155 <select class="mnemonic-length form-control">
155 <option value="raw">From entropy length (3 words per 32 bits)</option> 156 <option value="raw">From entropy length (3 words per 32 bits)</option>
156 <option value="12">12 Words</option> 157 <option value="12">12 Words</option>
@@ -161,6 +162,17 @@
161 </select> 162 </select>
162 </div> 163 </div>
163 </div> 164 </div>
165 <div class="col-sm-3">
166 <p>Valid entropy values include:</p>
167 <ul>
168 <li><strong>Binary</strong> [0-1]<br>101010011</li>
169 <li><strong>Base 6</strong> [0-5]<br>123434014</li>
170 <li><strong>Dice</strong> [1-6]<br>62535634</li>
171 <li><strong>Base 10</strong> [0-9]<br>90834528</li>
172 <li><strong>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
173 <li><strong>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
174 </ul>
175 </div>
164 </div> 176 </div>
165 </div> 177 </div>
166 <div class="form-group"> 178 <div class="form-group">
@@ -16387,6 +16399,7 @@ window.Entropy = new (function() {
16387 return { 16399 return {
16388 binaryStr: "", 16400 binaryStr: "",
16389 cleanStr: "", 16401 cleanStr: "",
16402 cleanHtml: "",
16390 base: base, 16403 base: base,
16391 }; 16404 };
16392 } 16405 }
@@ -16412,16 +16425,23 @@ window.Entropy = new (function() {
16412 } 16425 }
16413 // Supply a 'filtered' entropy string for display purposes 16426 // Supply a 'filtered' entropy string for display purposes
16414 var entropyClean = base.parts.join(""); 16427 var entropyClean = base.parts.join("");
16428 var entropyHtml = base.parts.join("");
16415 if (base.asInt == 52) { 16429 if (base.asInt == 52) {
16416 entropyClean = base.parts.join(" ").toUpperCase(); 16430 entropyClean = base.parts.join(" ").toUpperCase();
16417 entropyClean = entropyClean.replace(/C/g, "\u2663"); 16431 entropyClean = entropyClean.replace(/C/g, "\u2663");
16418 entropyClean = entropyClean.replace(/D/g, "\u2666"); 16432 entropyClean = entropyClean.replace(/D/g, "\u2666");
16419 entropyClean = entropyClean.replace(/H/g, "\u2665"); 16433 entropyClean = entropyClean.replace(/H/g, "\u2665");
16420 entropyClean = entropyClean.replace(/S/g, "\u2660"); 16434 entropyClean = entropyClean.replace(/S/g, "\u2660");
16435 entropyHtml = base.parts.join(" ").toUpperCase();
16436 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
16437 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
16438 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
16439 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
16421 } 16440 }
16422 var e = { 16441 var e = {
16423 binaryStr: entropyBin, 16442 binaryStr: entropyBin,
16424 cleanStr: entropyClean, 16443 cleanStr: entropyClean,
16444 cleanHtml: entropyHtml,
16425 base: base, 16445 base: base,
16426 } 16446 }
16427 return e; 16447 return e;
@@ -18162,14 +18182,15 @@ exports.BigInteger = BigInteger;
18162 DOM.useEntropy = $(".use-entropy"); 18182 DOM.useEntropy = $(".use-entropy");
18163 DOM.entropyContainer = $(".entropy-container"); 18183 DOM.entropyContainer = $(".entropy-container");
18164 DOM.entropy = $(".entropy"); 18184 DOM.entropy = $(".entropy");
18165 DOM.entropyFeedback = $(".entropy-feedback"); 18185 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
18166 DOM.entropyFiltered = DOM.entropyFeedback.find(".filtered"); 18186 DOM.entropyType = DOM.entropyContainer.find(".type");
18167 DOM.entropyType = DOM.entropyFeedback.find(".type"); 18187 DOM.entropyStrength = DOM.entropyContainer.find(".strength");
18168 DOM.entropyStrength = DOM.entropyFeedback.find(".strength"); 18188 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
18169 DOM.entropyEventCount = DOM.entropyFeedback.find(".event-count"); 18189 DOM.entropyBits = DOM.entropyContainer.find(".bits");
18170 DOM.entropyBits = DOM.entropyFeedback.find(".bits"); 18190 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
18171 DOM.entropyBitsPerEvent = DOM.entropyFeedback.find(".bits-per-event"); 18191 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
18172 DOM.entropyMnemonicLength = DOM.entropyFeedback.find(".mnemonic-length"); 18192 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
18193 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
18173 DOM.phrase = $(".phrase"); 18194 DOM.phrase = $(".phrase");
18174 DOM.passphrase = $(".passphrase"); 18195 DOM.passphrase = $(".passphrase");
18175 DOM.generateContainer = $(".generate-container"); 18196 DOM.generateContainer = $(".generate-container");
@@ -18299,7 +18320,7 @@ exports.BigInteger = BigInteger;
18299 // If blank entropy, clear mnemonic, addresses, errors 18320 // If blank entropy, clear mnemonic, addresses, errors
18300 if (DOM.entropy.val().trim().length == 0) { 18321 if (DOM.entropy.val().trim().length == 0) {
18301 clearDisplay(); 18322 clearDisplay();
18302 hideEntropyFeedback(); 18323 clearEntropyFeedback();
18303 DOM.phrase.val(""); 18324 DOM.phrase.val("");
18304 showValidationError("Blank entropy"); 18325 showValidationError("Blank entropy");
18305 return; 18326 return;
@@ -18873,7 +18894,7 @@ exports.BigInteger = BigInteger;
18873 } 18894 }
18874 18895
18875 function setMnemonicFromEntropy() { 18896 function setMnemonicFromEntropy() {
18876 hideEntropyFeedback(); 18897 clearEntropyFeedback();
18877 // Get entropy value 18898 // Get entropy value
18878 var entropyStr = DOM.entropy.val(); 18899 var entropyStr = DOM.entropy.val();
18879 // Work out minimum base for entropy 18900 // Work out minimum base for entropy
@@ -18901,7 +18922,8 @@ exports.BigInteger = BigInteger;
18901 } 18922 }
18902 // Discard trailing entropy 18923 // Discard trailing entropy
18903 var bitsToUse = Math.floor(bits.length / 32) * 32; 18924 var bitsToUse = Math.floor(bits.length / 32) * 32;
18904 var binaryStr = bits.substring(0, bitsToUse); 18925 var start = bits.length - bitsToUse;
18926 var binaryStr = bits.substring(start);
18905 // Convert entropy string to numeric array 18927 // Convert entropy string to numeric array
18906 var entropyArr = []; 18928 var entropyArr = [];
18907 for (var i=0; i<binaryStr.length / 8; i++) { 18929 for (var i=0; i<binaryStr.length / 8; i++) {
@@ -18915,14 +18937,15 @@ exports.BigInteger = BigInteger;
18915 DOM.phrase.val(phrase); 18937 DOM.phrase.val(phrase);
18916 } 18938 }
18917 18939
18918 function hideEntropyFeedback() { 18940 function clearEntropyFeedback() {
18919 DOM.entropyFeedback.addClass("hidden"); 18941 DOM.entropyStrength.text("...");
18920 DOM.entropyFiltered.text("");
18921 DOM.entropyType.text(""); 18942 DOM.entropyType.text("");
18922 DOM.entropyStrength.text(""); 18943 DOM.entropyWordCount.text("0");
18923 DOM.entropyEventCount.text(""); 18944 DOM.entropyEventCount.text("0");
18924 DOM.entropyBits.text(""); 18945 DOM.entropyBitsPerEvent.text("0");
18925 DOM.entropyBitsPerEvent.text(""); 18946 DOM.entropyBits.text("0");
18947 DOM.entropyFiltered.html("&nbsp;");
18948 DOM.entropyBinary.html("&nbsp;");
18926 } 18949 }
18927 18950
18928 function showEntropyFeedback(entropy) { 18951 function showEntropyFeedback(entropy) {
@@ -18954,16 +18977,15 @@ exports.BigInteger = BigInteger;
18954 }; 18977 };
18955 } 18978 }
18956 var bitsStr = entropy.binaryStr.length; 18979 var bitsStr = entropy.binaryStr.length;
18957 if (entropy.base.asInt != 2) { 18980 var wordCount = Math.floor(entropy.binaryStr.length / 32) * 3;
18958 bitsStr += " (" + entropy.binaryStr + ")"; 18981 DOM.entropyFiltered.html(entropy.cleanHtml);
18959 }
18960 DOM.entropyFiltered.text(entropy.cleanStr);
18961 DOM.entropyType.text(entropy.base.str); 18982 DOM.entropyType.text(entropy.base.str);
18962 DOM.entropyStrength.text(strength); 18983 DOM.entropyStrength.text(strength);
18963 DOM.entropyEventCount.text(entropy.base.ints.length); 18984 DOM.entropyEventCount.text(entropy.base.ints.length);
18964 DOM.entropyBits.text(bitsStr); 18985 DOM.entropyBits.text(bitsStr);
18986 DOM.entropyWordCount.text(wordCount);
18987 DOM.entropyBinary.text(entropy.binaryStr);
18965 DOM.entropyBitsPerEvent.text(Math.log2(entropy.base.asInt).toFixed(2)); 18988 DOM.entropyBitsPerEvent.text(Math.log2(entropy.base.asInt).toFixed(2));
18966 DOM.entropyFeedback.removeClass("hidden");
18967 } 18989 }
18968 18990
18969 var networks = [ 18991 var networks = [