From ee0981f1ecc4c6e78831f538ef77396c1e4fbe91 Mon Sep 17 00:00:00 2001 From: Ian Coleman Date: Wed, 20 Sep 2017 10:31:28 +1000 Subject: [PATCH] Detect and warn of filtered entropy --- src/index.html | 7 +++++++ src/js/index.js | 11 +++++++++++ tests.js | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/src/index.html b/src/index.html index cc38ed0..7507a35 100644 --- a/src/index.html +++ b/src/index.html @@ -164,6 +164,13 @@
+
diff --git a/src/js/index.js b/src/js/index.js index 9bd77b9..6a2fea6 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -38,6 +38,7 @@ DOM.entropyWordCount = DOM.entropyContainer.find(".word-count"); DOM.entropyBinary = DOM.entropyContainer.find(".binary"); DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length"); + DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning"); DOM.phrase = $(".phrase"); DOM.passphrase = $(".passphrase"); DOM.generateContainer = $(".generate-container"); @@ -1061,6 +1062,16 @@ DOM.entropyWordCount.text(wordCount); DOM.entropyBinary.text(entropy.binaryStr); DOM.entropyBitsPerEvent.text(bitsPerEvent); + // detect and warn of filtering + var rawNoSpaces = DOM.entropy.val().replace(/\s/g, ""); + var cleanNoSpaces = entropy.cleanStr.replace(/\s/g, ""); + var isFiltered = rawNoSpaces.length != cleanNoSpaces.length; + if (isFiltered) { + DOM.entropyFilterWarning.removeClass('hidden'); + } + else { + DOM.entropyFilterWarning.addClass('hidden'); + } } function getEntropyTypeStr(entropy) { diff --git a/tests.js b/tests.js index 8965f80..34eff96 100644 --- a/tests.js +++ b/tests.js @@ -4306,6 +4306,44 @@ page.open(url, function(status) { }); }, +// github issue 99 +// https://github.com/iancoleman/bip39/issues/99#issuecomment-327094159 +// "warn me emphatically when they have detected invalid input" to the entropy field +// A warning is shown when entropy is filtered and discarded +function() { +page.open(url, function(status) { + // use entropy + page.evaluate(function() { + $(".use-entropy").prop("checked", true).trigger("change"); + $(".entropy").val("00000000 00000000 00000000 00000000").trigger("input"); + }); + // check the filter warning does not show + waitForGenerate(function() { + var warningIsHidden = page.evaluate(function() { + return $(".entropy-container .filter-warning").hasClass("hidden"); + }); + if (!warningIsHidden) { + console.log("Entropy filter warning is showing when it should not"); + fail(); + } + page.evaluate(function() { + $(".entropy").val("10000000 zxcvbn 00000000 00000000 00000000").trigger("input"); + }); + // check the filter warning shows + waitForEntropyFeedback(function() { + var warningIsHidden = page.evaluate(function() { + return $(".entropy-container .filter-warning").hasClass("hidden"); + }); + if (warningIsHidden) { + console.log("Entropy filter warning is not showing when it should"); + fail(); + } + next(); + }); + }); +}); +}, + // If you wish to add more tests, do so here... // Here is a blank test template -- 2.41.0