Detect and warn of filtered entropy

This commit is contained in:
Ian Coleman
2017-09-20 10:31:28 +10:00
parent 6024e655a8
commit ee0981f1ec
3 changed files with 56 additions and 0 deletions
+7
View File
@@ -164,6 +164,13 @@
<label for="entropy" class="col-sm-2 control-label" data-translate>Entropy</label>
<div class="col-sm-7">
<textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards" data-translate-placeholder></textarea>
<div class="row filter-warning text-danger hidden">
<p class="col-sm-12">
<strong>
Some characters have been discarded
</strong>
</p>
</div>
<div class="row">
<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>
+11
View File
@@ -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) {
+38
View File
@@ -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