Entropy feedback tests all fields

This commit is contained in:
Ian Coleman
2016-11-10 20:44:50 +11:00
parent 3599674db4
commit fb353f9d4d
+64 -26
View File
@@ -2537,103 +2537,142 @@ page.open(url, function(status) {
}); });
}, },
// The next strength above 0-word mnemonics is considered extremely weak // There is feedback provided about the supplied entropy
// The next strength above 3-word mnemonics is considered very weak
// The next strength above 6-word mnemonics is considered weak
// The next strength above 9-word mnemonics is considered strong
// The next strength above 12-word mnemonics is considered very strong
// The next strength above 15-word mnemonics is considered extremely strong
function() { function() {
page.open(url, function(status) { page.open(url, function(status) {
var tests = [ var tests = [
{ {
entropy: "A", entropy: "A",
filtered: "A",
type: "hexadecimal",
events: 1,
bits: 4,
words: 0, words: 0,
strength: "extremely weak", strength: "extremely weak",
}, },
{ {
entropy: "AAAAAAAA", entropy: "AAAAAAAA",
filtered: "AAAAAAAA",
type: "hexadecimal",
events: 8,
bits: 32,
words: 3, words: 3,
strength: "extremely weak", strength: "extremely weak",
}, },
{ {
entropy: "AAAAAAAA B", entropy: "AAAAAAAA B",
filtered: "AAAAAAAAB",
type: "hexadecimal",
events: 9,
bits: 36,
words: 3, words: 3,
strength: "extremely weak", strength: "extremely weak",
}, },
{ {
entropy: "AAAAAAAA BBBBBBBB", entropy: "AAAAAAAA BBBBBBBB",
filtered: "AAAAAAAABBBBBBBB",
type: "hexadecimal",
events: 16,
bits: 64,
words: 6, words: 6,
strength: "very weak", strength: "very weak",
}, },
{ {
entropy: "AAAAAAAA BBBBBBBB CCCCCCCC", entropy: "AAAAAAAA BBBBBBBB CCCCCCCC",
filtered: "AAAAAAAABBBBBBBBCCCCCCCC",
type: "hexadecimal",
events: 24,
bits: 96,
words: 9, words: 9,
strength: "weak", strength: "weak",
}, },
{ {
entropy: "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD", entropy: "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD",
filtered: "AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDD",
type: "hexadecimal",
events: 32,
bits: 128,
words: 12, words: 12,
strength: "strong", strength: "strong",
}, },
{ {
entropy: "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD EEEEEEEE", entropy: "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD EEEEEEEE",
filtered: "AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEE",
type: "hexadecimal",
events: 40,
bits: 160,
words: 15, words: 15,
strength: "very strong", strength: "very strong",
}, },
{ {
entropy: "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD EEEEEEEE FFFFFFFF", entropy: "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD EEEEEEEE FFFFFFFF",
filtered: "AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFF",
type: "hexadecimal",
events: 48,
bits: 192,
words: 18, words: 18,
strength: "extremely strong", strength: "extremely strong",
} },
]; ];
// use entropy // use entropy
page.evaluate(function() { page.evaluate(function() {
$(".use-entropy").prop("checked", true).trigger("change"); $(".use-entropy").prop("checked", true).trigger("change");
}); });
var nextTest = function runNextTest(i) { var nextTest = function runNextTest(i) {
function getFeedbackError(expected, actual) {
if (actual.indexOf(expected.filtered) == -1) {
return "Filtered value not in feedback";
}
if (actual.indexOf(expected.type) == -1) {
return "Entropy type not in feedback";
}
if (actual.indexOf(expected.events) == -1) {
return "Event count not in feedback";
}
if (actual.indexOf(expected.bits) == -1) {
return "Bit count not in feedback";
}
if (actual.indexOf(expected.strength) == -1) {
return "Strength not in feedback";
}
return false;
}
test = tests[i]; test = tests[i];
page.evaluate(function(e) { page.evaluate(function(e) {
$(".addresses").empty(); $(".addresses").empty();
$(".phrase").val(""); $(".phrase").val("");
$(".entropy").val(e).trigger("input"); $(".entropy").val(e).trigger("input");
}, test.entropy); }, test.entropy);
if (test.words == 0) { waitForEntropyFeedback(function() {
var mnemonic = page.evaluate(function() { var mnemonic = page.evaluate(function() {
return $(".phrase").val(); return $(".phrase").val();
}); });
// Check mnemonic length
if (test.words == 0) {
if (mnemonic.length > 0) { if (mnemonic.length > 0) {
console.log("Mnemonic length for " + test.strength + " strength is not " + test.words); console.log("Mnemonic length for " + test.strength + " strength is not " + test.words);
console.log("Mnemonic: " + mnemonic); console.log("Mnemonic: " + mnemonic);
fail(); fail();
} }
var isLastTest = i == tests.length - 1;
if (isLastTest) {
next();
} }
else { else {
runNextTest(i+1);
}
}
else {
waitForGenerate(function() {
// check the number of words in the current mnemonic
var mnemonic = page.evaluate(function() {
return $(".phrase").val();
});
if (mnemonic.split(" ").length != test.words) { if (mnemonic.split(" ").length != test.words) {
console.log("Mnemonic length for " + test.strength + " strength is not " + test.words); console.log("Mnemonic length for " + test.strength + " strength is not " + test.words);
console.log("Mnemonic: " + mnemonic); console.log("Mnemonic: " + mnemonic);
fail(); fail();
} }
// check the strength of the mnemonic is shown }
var entropyText = page.evaluate(function() { // check feedback
return $(".entropy-container").text(); var feedback = page.evaluate(function() {
return $(".entropy-feedback").text();
}); });
if (entropyText.indexOf(test.strength) == -1) { var feedbackError = getFeedbackError(test, feedback);
console.log("Strength indicator for " + test.strength + " mnemonic is incorrect"); if (feedbackError) {
console.log("Entropy feedback for " + test.entropy + " returned error");
console.log(feedbackError);
fail(); fail();
} }
// Run next test
var isLastTest = i == tests.length - 1; var isLastTest = i == tests.length - 1;
if (isLastTest) { if (isLastTest) {
next(); next();
@@ -2643,7 +2682,6 @@ page.open(url, function(status) {
} }
}); });
} }
}
nextTest(0); nextTest(0);
}); });
}, },