X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=tests.js;h=d5a73f6cee83cf1939b08ddfea962184b6952e2d;hb=c554e6ff5c2c543997841c0fb0a506262843e8df;hp=1b1d44577a91b01e8addb301c54b707c594610c8;hpb=9bc39377aa0317ffbfed3b6e29814bb26681cfd5;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git diff --git a/tests.js b/tests.js index 1b1d445..d5a73f6 100644 --- a/tests.js +++ b/tests.js @@ -4,7 +4,12 @@ var page = require('webpage').create(); var url = 'src/index.html'; -var testMaxTime = 5000; +var testMaxTime = 10000; + +page.viewportSize = { + width: 1024, + height: 720 +}; page.onResourceError = function(e) { console.log("Error loading " + e.url); @@ -2149,10 +2154,11 @@ page.open(url, function(status) { catch (e) { return e.message; } - // Leading zeros for card entropy as binary string + // Leading zeros for card entropy as binary string. + // Card entropy is hashed so 2c does not produce leading zeros. try { - e = Entropy.fromString("2c"); - if (e.binaryStr != "00001") { + e = Entropy.fromString("4c"); + if (e.binaryStr != "0001") { return "Card entropy as binary has leading zeros"; } } @@ -2184,25 +2190,24 @@ page.open(url, function(status) { // [ cards, binary ] try { var cards = [ - [ "ac", "00000" ], - [ "acac", "00000000000" ], - [ "acac2c", "00000000000000001" ], - [ "acks", "00000110011" ], - [ "acacks", "00000000000110011" ], - [ "2c", "00001" ], - [ "3d", "01111" ], - [ "4h", "11101" ], - [ "5s", "101011" ], - [ "6c", "00101" ], - [ "7d", "10011" ], - [ "8h", "100001" ], - [ "9s", "101111" ], - [ "tc", "01001" ], - [ "jd", "10111" ], - [ "qh", "100101" ], - [ "ks", "110011" ], - [ "ks2c", "101001011101" ], - [ "KS2C", "101001011101" ], + [ "ac", "0100" ], + [ "acqs", "10111101" ], + [ "acks", "11110000" ], + [ "2cac", "11000010" ], + [ "2c", "1000" ], + [ "3d", "1111" ], + [ "4h", "0011" ], + [ "5s", "1001" ], + [ "6c", "1011" ], + [ "7d", "1101" ], + [ "8h", "1011" ], + [ "9s", "1010" ], + [ "tc", "1101" ], + [ "jd", "1101" ], + [ "qh", "1100" ], + [ "ks", "1111" ], + [ "ks2c", "10000001" ], + [ "KS2C", "10000001" ], ]; for (var i=0; i 0) { console.log("Mnemonic length for " + test.strength + " strength is not " + test.words); + console.log("Entropy: " + test.entropy); console.log("Mnemonic: " + mnemonic); fail(); } } - else { + else if ("words" in test) { if (mnemonic.split(" ").length != test.words) { console.log("Mnemonic length for " + test.strength + " strength is not " + test.words); + console.log("Entropy: " + test.entropy); console.log("Mnemonic: " + mnemonic); fail(); } @@ -2753,6 +2861,7 @@ page.open(url, function(status) { // use entropy page.evaluate(function() { $(".use-entropy").prop("checked", true).trigger("change"); + $(".mnemonic-length").val("raw"); var entropy = "00000000 00000000 00000000 00000000"; entropy += "11111111 11111111 11111111 1111"; // Missing last byte $(".entropy").val(entropy).trigger("input"); @@ -2779,6 +2888,7 @@ page.open(url, function(status) { // use entropy page.evaluate(function() { $(".use-entropy").prop("checked", true).trigger("change"); + $(".mnemonic-length").val("raw"); var entropy = ""; // Generate a very long entropy string for (var i=0; i<33; i++) { @@ -2812,6 +2922,7 @@ page.open(url, function(status) { // use entropy page.evaluate(function() { $(".use-entropy").prop("checked", true).trigger("change"); + $(".mnemonic-length").val("raw"); var entropy = "543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543"; $(".entropy").val(entropy).trigger("input"); }); @@ -2895,6 +3006,139 @@ page.open(url, function(status) { }); }, +// Github issue 33 +// https://github.com/iancoleman/bip39/issues/33 +// Final cards should contribute entropy +function() { +page.open(url, function(status) { + // use entropy + page.evaluate(function() { + $(".use-entropy").prop("checked", true).trigger("change"); + $(".mnemonic-length").val("raw"); + $(".entropy").val("7S 9H 9S QH 8C KS AS 7D 7C QD 4S 4D TC 2D 5S JS 3D 8S 8H 4C 3C AC 3S QC 9C JC 7H AD TD JD 6D KH 5C QS 2S 6S 6H JH KD 9D-6C TS TH 4H KC 5H 2H AH 2C 8D 3H 5D").trigger("input"); + }); + // get the mnemonic + waitForGenerate(function() { + var originalPhrase = page.evaluate(function() { + return $(".phrase").val(); + }); + // Set the last 12 cards to be AS + page.evaluate(function() { + $(".addresses").empty(); + $(".entropy").val("7S 9H 9S QH 8C KS AS 7D 7C QD 4S 4D TC 2D 5S JS 3D 8S 8H 4C 3C AC 3S QC 9C JC 7H AD TD JD 6D KH 5C QS 2S 6S 6H JH KD 9D-AS AS AS AS AS AS AS AS AS AS AS AS").trigger("input"); + }); + // get the new mnemonic + waitForGenerate(function() { + var newPhrase = page.evaluate(function() { + return $(".phrase").val(); + }); + // check the phrase has changed + if (newPhrase == originalPhrase) { + console.log("Changing last 12 cards does not change mnemonic"); + console.log("Original:"); + console.log(originalPhrase); + console.log("New:"); + console.log(newPhrase); + fail(); + } + next(); + }); + }); +}); +}, + +// Github issue 35 +// https://github.com/iancoleman/bip39/issues/35 +// QR Code support +function() { +page.open(url, function(status) { + // use entropy + page.evaluate(function() { + $(".generate").click(); + }); + waitForGenerate(function() { + var p = page.evaluate(function() { + // get position of mnemonic element + return $(".phrase").offset(); + }); + p.top = Math.ceil(p.top); + p.left = Math.ceil(p.left); + // check the qr code shows + page.sendEvent("mousemove", p.left+4, p.top+4); + var qrShowing = page.evaluate(function() { + return $(".qr-container").find("canvas").length > 0; + }); + if (!qrShowing) { + console.log("QR Code does not show"); + fail(); + } + // check the qr code hides + page.sendEvent("mousemove", p.left-4, p.top-4); + var qrHidden = page.evaluate(function() { + return $(".qr-container").find("canvas").length == 0; + }); + if (!qrHidden) { + console.log("QR Code does not hide"); + fail(); + } + next(); + }); +}); +}, + +// BIP44 account extendend private key is shown +// github issue 37 - compatibility with electrum +function() { +page.open(url, function(status) { + // set the phrase + var expected = "xprv9yzrnt4zWVJUr1k2VxSPy9ettKz5PpeDMgaVG7UKedhqnw1tDkxP2UyYNhuNSumk2sLE5ctwKZs9vwjsq3e1vo9egCK6CzP87H2cVYXpfwQ"; + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + }); + // check the BIP44 account extended private key + waitForGenerate(function() { + var actual = page.evaluate(function() { + return $(".account-xprv").val(); + }); + if (actual != expected) { + console.log("BIP44 account extended private key is incorrect"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + +// BIP44 account extendend public key is shown +// github issue 37 - compatibility with electrum +function() { +page.open(url, function(status) { + // set the phrase + var expected = "xpub6CzDCPbtLrrn4VpVbyyQLHbdSMpZoHN4iuW64VswCyEpfjM2mJGdaHJ2DyuZwtst96E16VvcERb8BBeJdHSCVmAq9RhtRQg6eAZFrTKCNqf"; + page.evaluate(function() { + $(".phrase").val("abandon abandon ability"); + $(".phrase").trigger("input"); + }); + // check the BIP44 account extended public key + waitForGenerate(function() { + var actual = page.evaluate(function() { + return $(".account-xpub").val(); + }); + if (actual != expected) { + console.log("BIP44 account extended public key is incorrect"); + console.log("Expected: " + expected); + console.log("Actual: " + actual); + fail(); + } + next(); + }); +}); +}, + + // If you wish to add more tests, do so here... // Here is a blank test template