diff options
-rw-r--r-- | src/index.html | 5 | ||||
-rw-r--r-- | src/js/index.js | 12 | ||||
-rw-r--r-- | tests/spec/tests.js | 32 |
3 files changed, 49 insertions, 0 deletions
diff --git a/src/index.html b/src/index.html index df5bf67..4056610 100644 --- a/src/index.html +++ b/src/index.html | |||
@@ -113,6 +113,11 @@ | |||
113 | <option value="21">21 <span>Words</span></option> | 113 | <option value="21">21 <span>Words</span></option> |
114 | <option value="24">24 <span>Words</span></option> | 114 | <option value="24">24 <span>Words</span></option> |
115 | </select> | 115 | </select> |
116 | <p class="weak-entropy-override-warning hidden"> | ||
117 | <span class="text-danger"> | ||
118 | The mnemonic will appear more secure than it really is. | ||
119 | </span> | ||
120 | </p> | ||
116 | </div> | 121 | </div> |
117 | </div> | 122 | </div> |
118 | <div class="col-sm-3"> | 123 | <div class="col-sm-3"> |
diff --git a/src/js/index.js b/src/js/index.js index 0a2d362..e96f4a9 100644 --- a/src/js/index.js +++ b/src/js/index.js | |||
@@ -40,6 +40,7 @@ | |||
40 | DOM.entropyWordIndexes = DOM.entropyContainer.find(".word-indexes"); | 40 | DOM.entropyWordIndexes = DOM.entropyContainer.find(".word-indexes"); |
41 | DOM.entropyChecksum = DOM.entropyContainer.find(".checksum"); | 41 | DOM.entropyChecksum = DOM.entropyContainer.find(".checksum"); |
42 | DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length"); | 42 | DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length"); |
43 | DOM.entropyWeakEntropyOverrideWarning = DOM.entropyContainer.find(".weak-entropy-override-warning"); | ||
43 | DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning"); | 44 | DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning"); |
44 | DOM.phrase = $(".phrase"); | 45 | DOM.phrase = $(".phrase"); |
45 | DOM.passphrase = $(".passphrase"); | 46 | DOM.passphrase = $(".passphrase"); |
@@ -1190,6 +1191,17 @@ | |||
1190 | mnemonicLength = parseInt(mnemonicLength); | 1191 | mnemonicLength = parseInt(mnemonicLength); |
1191 | var numberOfBits = 32 * mnemonicLength / 3; | 1192 | var numberOfBits = 32 * mnemonicLength / 3; |
1192 | bits = bits.substring(0, numberOfBits); | 1193 | bits = bits.substring(0, numberOfBits); |
1194 | // show warning for weak entropy override | ||
1195 | if (mnemonicLength / 3 * 32 > entropy.binaryStr.length) { | ||
1196 | DOM.entropyWeakEntropyOverrideWarning.removeClass("hidden"); | ||
1197 | } | ||
1198 | else { | ||
1199 | DOM.entropyWeakEntropyOverrideWarning.addClass("hidden"); | ||
1200 | } | ||
1201 | } | ||
1202 | else { | ||
1203 | // hide warning for weak entropy override | ||
1204 | DOM.entropyWeakEntropyOverrideWarning.addClass("hidden"); | ||
1193 | } | 1205 | } |
1194 | // Discard trailing entropy | 1206 | // Discard trailing entropy |
1195 | var bitsToUse = Math.floor(bits.length / 32) * 32; | 1207 | var bitsToUse = Math.floor(bits.length / 32) * 32; |
diff --git a/tests/spec/tests.js b/tests/spec/tests.js index 945a923..034b50f 100644 --- a/tests/spec/tests.js +++ b/tests/spec/tests.js | |||
@@ -3530,4 +3530,36 @@ it('Does not show a warning if generating strong mnemonics', function(done) { | |||
3530 | }); | 3530 | }); |
3531 | }); | 3531 | }); |
3532 | 3532 | ||
3533 | it('Shows a warning if overriding weak entropy with longer mnemonics', function(done) { | ||
3534 | driver.findElement(By.css('.use-entropy')) | ||
3535 | .click(); | ||
3536 | driver.findElement(By.css('.entropy')) | ||
3537 | .sendKeys("0123456789abcdef"); // 6 words | ||
3538 | driver.executeScript(function() { | ||
3539 | $(".mnemonic-length").val("12").trigger("change"); | ||
3540 | }); | ||
3541 | driver.findElement(By.css(".weak-entropy-override-warning")) | ||
3542 | .getAttribute("class") | ||
3543 | .then(function(classes) { | ||
3544 | expect(classes).not.toContain("hidden"); | ||
3545 | done(); | ||
3546 | }); | ||
3547 | }); | ||
3548 | |||
3549 | it('Does not show a warning if entropy is stronger than mnemonic length', function(done) { | ||
3550 | driver.findElement(By.css('.use-entropy')) | ||
3551 | .click(); | ||
3552 | driver.findElement(By.css('.entropy')) | ||
3553 | .sendKeys("0123456789abcdef0123456789abcdef0123456789abcdef"); // 18 words | ||
3554 | driver.executeScript(function() { | ||
3555 | $(".mnemonic-length").val("12").trigger("change"); | ||
3556 | }); | ||
3557 | driver.findElement(By.css(".weak-entropy-override-warning")) | ||
3558 | .getAttribute("class") | ||
3559 | .then(function(classes) { | ||
3560 | expect(classes).toContain("hidden"); | ||
3561 | done(); | ||
3562 | }); | ||
3563 | }); | ||
3564 | |||
3533 | }); | 3565 | }); |