]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blobdiff - tests.js
BIP44 Account xprv and xpub keys are shown
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / tests.js
index 4f8f60fc47d5a373d4bf779ffc2badcbc350dbf1..d5a73f6cee83cf1939b08ddfea962184b6952e2d 100644 (file)
--- a/tests.js
+++ b/tests.js
@@ -6,6 +6,11 @@ var page = require('webpage').create();
 var url = 'src/index.html';
 var testMaxTime = 10000;
 
+page.viewportSize = {
+    width: 1024,
+    height: 720
+};
+
 page.onResourceError = function(e) {
     console.log("Error loading " + e.url);
     phantom.exit();
@@ -2726,6 +2731,50 @@ page.open(url, function(status) {
             words: 18,
             strength: "extremely strong",
         },
+        // Multiple decks of cards increases bits per event
+        {
+            entropy: "3d",
+            events: 1,
+            bits: 4,
+            bitsPerEvent: 4.34,
+        },
+        {
+            entropy: "3d3d",
+            events: 2,
+            bits: 9,
+            bitsPerEvent: 4.80,
+        },
+        {
+            entropy: "3d3d3d",
+            events: 3,
+            bits: 15,
+            bitsPerEvent: 5.01,
+        },
+        {
+            entropy: "3d3d3d3d",
+            events: 4,
+            bits: 20,
+            bitsPerEvent: 5.14,
+        },
+        {
+            entropy: "3d3d3d3d3d",
+            events: 5,
+            bits: 26,
+            bitsPerEvent: 5.22,
+        },
+        {
+            entropy: "3d3d3d3d3d3d",
+            events: 6,
+            bits: 31,
+            bitsPerEvent: 5.28,
+        },
+        {
+            entropy: "3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d",
+            events: 33,
+            bits: 184,
+            bitsPerEvent: 5.59,
+            strength: 'easily cracked - Repeats like "abcabcabc" are only slightly harder to guess than "abc"',
+        },
     ];
     // use entropy
     page.evaluate(function() {
@@ -2737,18 +2786,21 @@ page.open(url, function(status) {
             if ("filtered" in expected && actual.indexOf(expected.filtered) == -1) {
                 return "Filtered value not in feedback";
             }
-            if (actual.indexOf(expected.type) == -1) {
+            if ("type" in expected && actual.indexOf(expected.type) == -1) {
                 return "Entropy type not in feedback";
             }
-            if (actual.indexOf(expected.events) == -1) {
+            if ("events" in expected && actual.indexOf(expected.events) == -1) {
                 return "Event count not in feedback";
             }
-            if (actual.indexOf(expected.bits) == -1) {
+            if ("bits" in expected && actual.indexOf(expected.bits) == -1) {
                 return "Bit count not in feedback";
             }
-            if (actual.indexOf(expected.strength) == -1) {
+            if ("strength" in expected && actual.indexOf(expected.strength) == -1) {
                 return "Strength not in feedback";
             }
+            if ("bitsPerEvent" in expected && actual.indexOf(expected.bitsPerEvent) == -1) {
+                return "bitsPerEvent not in feedback";
+            }
             return false;
         }
         test = tests[i];
@@ -2762,7 +2814,7 @@ page.open(url, function(status) {
                 return $(".phrase").val();
             });
             // Check mnemonic length
-            if (test.words == 0) {
+            if ("words" in test && test.words == 0) {
                 if (mnemonic.length > 0) {
                     console.log("Mnemonic length for " + test.strength + " strength is not " + test.words);
                     console.log("Entropy: " + test.entropy);
@@ -2770,7 +2822,7 @@ page.open(url, function(status) {
                     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);
@@ -2995,6 +3047,97 @@ page.open(url, function(status) {
 });
 },
 
+// 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...