X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=tests.js;h=1b1d44577a91b01e8addb301c54b707c594610c8;hb=9bc39377aa0317ffbfed3b6e29814bb26681cfd5;hp=8de6391fd7bb0aafe6b9317d9c2b46285998bb2c;hpb=adc8ce127d4f8ea0d7e5ede6a82c2791d60ff4d2;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git diff --git a/tests.js b/tests.js index 8de6391..1b1d445 100644 --- a/tests.js +++ b/tests.js @@ -80,7 +80,7 @@ function waitForEntropyFeedback(fn, maxTime) { maxTime = testMaxTime; } var origFeedback = page.evaluate(function() { - return $(".entropy-error").text(); + return $(".entropy-container").text(); }); var start = new Date().getTime(); var wait = function keepWaiting() { @@ -92,11 +92,7 @@ function waitForEntropyFeedback(fn, maxTime) { return; } var feedback = page.evaluate(function() { - var feedback = $(".entropy-error"); - if (feedback.css("display") == "none") { - return ""; - } - return feedback.text(); + return $(".entropy-container").text(); }); var hasFinished = feedback != origFeedback; if (hasFinished) { @@ -2072,7 +2068,7 @@ page.open(url, function(status) { // dice entropy is converted to base6 try { e = Entropy.fromString("123456"); - if (e.cleanStr != "012345") { + if (e.cleanStr != "123450") { return "Dice entropy is not automatically converted to base6"; } } @@ -2130,11 +2126,34 @@ page.open(url, function(status) { catch (e) { return e.message; } - // Leading zeros are correctly preserved for base 6 in binary string + // Leading zeros for base 6 as binary string + // 20 = 2 events at 2.58 bits per event = 5 bits + // 20 in base 6 = 12 in base 10 = 1100 in base 2 + // so it needs 1 bit of padding to be the right bit length + try { + e = Entropy.fromString("20"); + if (e.binaryStr != "01100") { + return "Base 6 as binary has leading zeros"; + } + } + catch (e) { + return e.message; + } + // Leading zeros for base 10 as binary string try { - e = Entropy.fromString("2"); - if (e.binaryStr != "010") { - return "Base 6 leading zeros are not correct in binary"; + e = Entropy.fromString("17"); + if (e.binaryStr != "010001") { + return "Base 10 as binary has leading zeros"; + } + } + catch (e) { + return e.message; + } + // Leading zeros for card entropy as binary string + try { + e = Entropy.fromString("2c"); + if (e.binaryStr != "00001") { + return "Card entropy as binary has leading zeros"; } } catch (e) { @@ -2170,16 +2189,16 @@ page.open(url, function(status) { [ "acac2c", "00000000000000001" ], [ "acks", "00000110011" ], [ "acacks", "00000000000110011" ], - [ "2c", "000001" ], - [ "3d", "001111" ], - [ "4h", "011101" ], + [ "2c", "00001" ], + [ "3d", "01111" ], + [ "4h", "11101" ], [ "5s", "101011" ], - [ "6c", "000101" ], - [ "7d", "010011" ], + [ "6c", "00101" ], + [ "7d", "10011" ], [ "8h", "100001" ], [ "9s", "101111" ], - [ "tc", "001001" ], - [ "jd", "010111" ], + [ "tc", "01001" ], + [ "jd", "10111" ], [ "qh", "100101" ], [ "ks", "110011" ], [ "ks2c", "101001011101" ], @@ -2285,6 +2304,7 @@ page.open(url, function(status) { "dice", "base 10", "hexadecimal", + "cards", ]; for (var i=0; i 0) { - console.log("Mnemonic length for " + test.nextStrength + " strength is not " + test.words); - console.log("Mnemonic: " + mnemonic); + // Check mnemonic length + if (test.words == 0) { + 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-container").text(); + }); + var feedbackError = getFeedbackError(test, feedback); + if (feedbackError) { + console.log("Entropy feedback for " + test.entropy + " returned error"); + console.log(feedbackError); fail(); } + // Run next test var isLastTest = i == tests.length - 1; if (isLastTest) { next(); @@ -2612,49 +2740,21 @@ page.open(url, function(status) { else { runNextTest(i+1); } - } - else { - waitForGenerate(function() { - // check the strength of the current mnemonic - var mnemonic = page.evaluate(function() { - return $(".phrase").val(); - }); - if (mnemonic.split(" ").length != test.words) { - console.log("Mnemonic length for " + test.nextStrength + " strength is not " + test.words); - console.log("Mnemonic: " + mnemonic); - fail(); - } - // check the strength of the next mnemonic is shown - var entropyText = page.evaluate(function() { - return $(".entropy-container").text(); - }); - if (entropyText.indexOf("required to generate " + test.nextStrength + " mnemonic") == -1) { - console.log("Strength indicator for " + test.nextStrength + " mnemonic is incorrect"); - fail(); - } - var isLastTest = i == tests.length - 1; - if (isLastTest) { - next(); - } - else { - runNextTest(i+1); - } - }); - } + }); } nextTest(0); }); }, -// Entropy is truncated from the right +// Entropy is truncated from the left function() { page.open(url, function(status) { - var expected = "abandon abandon ability"; + var expected = "avocado zoo zone"; // use entropy page.evaluate(function() { $(".use-entropy").prop("checked", true).trigger("change"); var entropy = "00000000 00000000 00000000 00000000"; - entropy += "11111111 11111111 11111111 1111"; // Missing last byte, only first 8 bytes are used + entropy += "11111111 11111111 11111111 1111"; // Missing last byte $(".entropy").val(entropy).trigger("input"); }); // check the entropy is truncated from the right @@ -2705,16 +2805,14 @@ page.open(url, function(status) { // https://bip32jp.github.io/english/index.html // NOTES: // Is incompatible with: -// base 6 with leading zeros -// base 6 wth 12 words / 53 chars // base 20 function() { page.open(url, function(status) { - var expected = "defy trip fatal jaguar mean rack rifle survey satisfy drift twist champion steel wife state furnace night consider glove olympic oblige donor novel left"; + var expected = "train then jungle barely whip fiber purpose puppy eagle cloud clump hospital robot brave balcony utility detect estate old green desk skill multiply virus"; // use entropy page.evaluate(function() { $(".use-entropy").prop("checked", true).trigger("change"); - var entropy = "123450123450123450123450123450123450123450123450123450123450123450123450123450123450123450123450123"; + var entropy = "543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543"; $(".entropy").val(entropy).trigger("input"); }); // check the mnemonic matches the expected value from bip32jp @@ -2772,6 +2870,31 @@ page.open(url, function(status) { }); }, +// Mnemonic length can be selected even for weak entropy +function() { +page.open(url, function(status) { + // use entropy + page.evaluate(function() { + $(".use-entropy").prop("checked", true).trigger("change"); + $(".entropy").val("012345"); + $(".mnemonic-length").val("18").trigger("change"); + }); + // check the mnemonic is the correct length + waitForGenerate(function() { + var phrase = page.evaluate(function() { + return $(".phrase").val(); + }); + var numberOfWords = phrase.split(/\s/g).length; + if (numberOfWords != 18) { + console.log("Weak entropy cannot be overridden to give 18 word mnemonic"); + console.log(phrase); + fail(); + } + next(); + }); +}); +}, + // If you wish to add more tests, do so here... // Here is a blank test template