mirror of
https://github.com/OneKeyHQ/bip39.git
synced 2026-04-27 21:00:41 +00:00
Entropy feedback tests all fields
This commit is contained in:
@@ -2537,76 +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();
|
||||||
});
|
});
|
||||||
if (mnemonic.length > 0) {
|
// Check mnemonic length
|
||||||
console.log("Mnemonic length for " + test.strength + " strength is not " + test.words);
|
if (test.words == 0) {
|
||||||
console.log("Mnemonic: " + mnemonic);
|
if (mnemonic.length > 0) {
|
||||||
|
console.log("Mnemonic length for " + test.strength + " strength is not " + test.words);
|
||||||
|
console.log("Mnemonic: " + mnemonic);
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (mnemonic.split(" ").length != test.words) {
|
||||||
|
console.log("Mnemonic length for " + test.strength + " strength is not " + test.words);
|
||||||
|
console.log("Mnemonic: " + mnemonic);
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// check feedback
|
||||||
|
var feedback = page.evaluate(function() {
|
||||||
|
return $(".entropy-feedback").text();
|
||||||
|
});
|
||||||
|
var feedbackError = getFeedbackError(test, feedback);
|
||||||
|
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();
|
||||||
@@ -2614,35 +2680,7 @@ page.open(url, function(status) {
|
|||||||
else {
|
else {
|
||||||
runNextTest(i+1);
|
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) {
|
|
||||||
console.log("Mnemonic length for " + test.strength + " strength is not " + test.words);
|
|
||||||
console.log("Mnemonic: " + mnemonic);
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
// check the strength of the mnemonic is shown
|
|
||||||
var entropyText = page.evaluate(function() {
|
|
||||||
return $(".entropy-container").text();
|
|
||||||
});
|
|
||||||
if (entropyText.indexOf(test.strength) == -1) {
|
|
||||||
console.log("Strength indicator for " + test.strength + " mnemonic is incorrect");
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
var isLastTest = i == tests.length - 1;
|
|
||||||
if (isLastTest) {
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
runNextTest(i+1);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
nextTest(0);
|
nextTest(0);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user