]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blobdiff - tests/spec/tests.js
Updated Zcoin (XZC) Due to its rebrand fo Firo (FIRO)
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / tests / spec / tests.js
index 15a52b30c9824ee2cd62dee62fe79e11bb741340..1e1f12e20b386542381930770b191b4f79f7c106 100644 (file)
@@ -1205,6 +1205,25 @@ it('Allows selection of Feathercoin', function(done) {
     };
     testNetwork(done, params);
 });
+it('Allows selection of FIO', function(done) {
+    var params = {
+        selectText: "FIO - Foundation for Interwallet Operability",
+        phrase: "valley alien library bread worry brother bundle hammer loyal barely dune brave",
+        firstPubKey: "FIO5kJKNHwctcfUM5XZyiWSqSTM5HTzznJP9F3ZdbhaQAHEVq575o",
+        firstPrivKey: "5Kbb37EAqQgZ9vWUHoPiC2uXYhyGSFNbL6oiDp24Ea1ADxV1qnu",
+    };
+    testNetwork(done, params);
+});
+it('Allows selection of Firo', function(done) {
+    var params = {
+        selectText: "FIRO - Firo",
+        phrase: "abandon abandon ability",
+        firstAddress: "a6VcMdP4XgAA9Tr7xNszmPG5FZpfRf17Cq",
+        firstPubKey: "0236f2348c32dc62d69488b01988ed1154df261723ec60461cb6e62189984c62db",
+        firstPrivKey: "Y8k3XQRQrJoABEao4Sw45s744g6xth7yviNqFcN7zqPqKUJrrKTQ",
+    };
+    testNetwork(done, params);
+});
 it('Allows selection of Firstcoin', function(done) {
     var params = {
         selectText: "FRST - Firstcoin",
@@ -1835,16 +1854,6 @@ it('Allows selection of Wincoin', function(done) {
     };
     testNetwork(done, params);
 });
-it('Allows selection of Zcoin', function(done) {
-    var params = {
-        selectText: "XZC - Zcoin",
-        phrase: "abandon abandon ability",
-        firstAddress: "a6VcMdP4XgAA9Tr7xNszmPG5FZpfRf17Cq",
-        firstPubKey: "0236f2348c32dc62d69488b01988ed1154df261723ec60461cb6e62189984c62db",
-        firstPrivKey: "Y8k3XQRQrJoABEao4Sw45s744g6xth7yviNqFcN7zqPqKUJrrKTQ",
-    };
-    testNetwork(done, params);
-});
 it('Allows selection of Zcash', function(done) {
     var params = {
         selectText: "ZEC - Zcash",
@@ -2146,6 +2155,16 @@ it('Allows selection of Stellar', function(done) {
     };
     testNetwork(done, params);
 });
+it('Allows selection of Nano', function(done) {
+    var params = {
+        selectText: "NANO - Nano",
+        phrase: "deal wedding panda forum property artist whip total word student sea middle",
+        firstAddress: "nano_15fum9n68681dz73qyu37fuc9tro84gqm86eptdqpm9jutkfnt34agkoqpw5",
+        firstPubKey: "0dbb99e84310c05fca1bfb612b76a3eb15309d79988cb6977b4cf1dea4da6822",
+        firstPrivKey: "30633c8497cc47e0aefd52c7971ffd45e6c5d166274c7978feca3482a859c0af",
+    };
+    testNetwork(done, params);
+});
 it('Allows selection of Wagerr', function(done) {
     var params = {
         selectText: "WGR - Wagerr",
@@ -2218,21 +2237,21 @@ it('Allows selection of EtherCore', function(done) {
 });
 it('Allows selection of RBTC - RSK', function(done) {
     var params = {
-        selectText: "RBTC - RSK",
+        selectText: "R-BTC - RSK",
         phrase: "abandon abandon ability",
-        firstAddress: "RGtz5TDdtviAZ9haz1YAUNQzcGVFm5bQrP",
-        firstPubKey: "0219d9b5087ab68edc8a714969d8cb70e7159417b47a05932b227e6f417c7962b9",
-        firstPrivKey: "UsiDPMcpYqCwtzGXo4wiPZp7cwBaKdmbmseioTc1rFQsg21adFc8",
+        firstAddress: "0x37CA764c4b2fe819108448b80d2F35921b035931",
+        firstPubKey: "0x0219d9b5087ab68edc8a714969d8cb70e7159417b47a05932b227e6f417c7962b9",
+        firstPrivKey: "0x6e6f48cc422825f7fd68f2200d3dde757849f15342f252eeb0bc4ebc46089fe1",
     };
     testNetwork(done, params);
 });
 it('Allows selection of tRBTC - RSK Testnet', function(done) {
     var params = {
-        selectText: "tRBTC - RSK Testnet",
+        selectText: "tR-BTC - RSK Testnet",
         phrase: "abandon abandon ability",
-        firstAddress: "RHkrWgnSdJHxQAqEsMErhUUa4icXY6xUUC",
-        firstPubKey: "03f77eb7bd83e92ef47be1abddae7f71fb0bc8a7a1ee4b193662a86ed2705ffc5b",
-        firstPrivKey: "UpqfuSEDKoacrPh4wMV4sJZqCB6DJfYe81oWBr4eb7y9FWQWoo2A",
+        firstAddress: "0x176484B5a155Fe802aCB26055eb1c193D5A576d5",
+        firstPubKey: "0x03f77eb7bd83e92ef47be1abddae7f71fb0bc8a7a1ee4b193662a86ed2705ffc5b",
+        firstPrivKey: "0x18c2400d2f818d28b80d0e31235873bfeef644fc45fd702f54ae0d422cff6ab3",
     };
     testNetwork(done, params);
 });
@@ -2246,6 +2265,47 @@ it('Allows selection of Argoneum', function(done) {
     };
     testNetwork(done, params);
 });
+it('Allows selection of CranePay', function(done) {
+    var params = {
+        selectText: "CRP - CranePay",
+        phrase: "abandon abandon ability",
+        firstAddress: "CcUHPqgmef1BmgWFa9g3YNc8scgVXVh8ip",
+        firstPubKey: "0392af9ea9dc78170c6f68c50bac926f960e50769295f539ac6382a3af2b928740",
+        firstPrivKey: "KHTCAvKHKg1WdLoDSg3VjjyZK5Wk1ihzJENpp2YMb1RmAxrCZrXX",
+    };
+    testNetwork(done, params);
+});
+it('Allows selection of Scribe', function(done) {
+    var params = {
+        selectText: "SCRIBE - Scribe",
+        phrase: "abandon abandon ability",
+        firstAddress: "RYAnPeBLD8veZ9Tw8xugeTC2f9PeZonLHM",
+        firstPubKey: "02c912bc4759c8a209475502fb5352ff5be8a8f13eb72f1732ee25125cd53edc1e",
+        firstPrivKey: "HLZWvNCEUv4ghygjH9A2EYCa9HNRcxe5CS42kzUTmoxJYp3z96QE",
+    };
+    testNetwork(done, params);
+});
+it('Allows selection of Binance Smart Chain', function(done) {
+    var params = {
+        selectText: "BSC - Binance Smart Chain",
+        phrase: "abandon abandon ability",
+        firstAddress: "0xe5815d5902Ad612d49283DEdEc02100Bd44C2772",
+        firstPubKey: "0x03e723e5b3aa7d72213f01139aa4783e1b34f74e1a04534e3fd8e29bfe2768af8a",
+        firstPrivKey: "0x8f253078b73d7498302bb78c171b23ce7a8fb511987d2b2702b731638a4a15e7",
+    };
+    testNetwork(done, params);
+});
+
+it('Allows selection of TRX on Tron', function(done) {
+    var params = {
+        selectText: "TRX - Tron",
+        phrase: "abandon abandon ability",
+        firstAddress: "TA891Fu7vVz595BGQpNX2MCzr7yBcxuoC7",
+        firstPubKey: "0337bbb060e6166066f7f9e59e52f67bc23a6c9d0cbc815b82b6d89112444842e7",
+        firstPrivKey: "3a8fbd0379a815764979de86a3fcda759cb62d49e784e7b2a9a03206c90cfae2",
+    };
+    testNetwork(done, params);
+});
 
 // BIP39 seed is set from phrase
 it('Sets the bip39 seed from the prhase', function(done) {
@@ -3091,7 +3151,7 @@ it("Shows the number of bits of entropy for 4 bits of binary", function(done) {
     testEntropyBits(done, "0000", "4");
 });
 it("Shows the number of bits of entropy for 1 character of base 6 (dice)", function(done) {
-    // 6 in card is 0 in base 6, 0 in base 6 is 2.6 bits (rounded down to 2 bits)
+    // 6 in card is 0 in base 6, 0 is mapped to 00 by entropy.js
     testEntropyBits(done, "6", "2");
 });
 it("Shows the number of bits of entropy for 1 character of base 10 with 3 bits", function(done) {
@@ -3099,13 +3159,15 @@ it("Shows the number of bits of entropy for 1 character of base 10 with 3 bits",
     testEntropyBits(done, "7", "3");
 });
 it("Shows the number of bits of entropy for 1 character of base 10 with 4 bis", function(done) {
-    testEntropyBits(done, "8", "4");
+    // 8 in base 10 is mapped to 0 by entropy.js
+    testEntropyBits(done, "8", "1");
 });
 it("Shows the number of bits of entropy for 1 character of hex", function(done) {
     testEntropyBits(done, "F", "4");
 });
 it("Shows the number of bits of entropy for 2 characters of base 10", function(done) {
-    testEntropyBits(done, "29", "6");
+    // 2 as base 10 is binary 010, 9 is mapped to binary 1 by entropy.js
+    testEntropyBits(done, "29", "4");
 });
 it("Shows the number of bits of entropy for 2 characters of hex", function(done) {
     testEntropyBits(done, "0A", "8");
@@ -3130,17 +3192,17 @@ it("Shows the number of bits of entropy for 4 characters of hex with leading zer
     testEntropyBits(done, "000A", "16");
 });
 it("Shows the number of bits of entropy for 4 characters of base 6", function(done) {
-    testEntropyBits(done, "5555", "11");
+    // 5 in base 6 is mapped to binary 1
+    testEntropyBits(done, "5555", "4");
 });
 it("Shows the number of bits of entropy for 4 characters of base 6 dice", function(done) {
     // uses dice, so entropy is actually 0000 in base 6, which is 4 lots of
-    // 2.58 bits, which is 10.32 bits (rounded down to 10 bits)
-    testEntropyBits(done, "6666", "10");
+    // binary 00
+    testEntropyBits(done, "6666", "8");
 });
 it("Shows the number of bits of entropy for 4 charactes of base 10", function(done) {
-    // Uses base 10, which is 4 lots of 3.32 bits, which is 13.3 bits (rounded
-    // down to 13)
-    testEntropyBits(done, "2227", "13");
+    // 2 in base 10 is binary 010 and 7 is binary 111 so is 4 events of 3 bits
+    testEntropyBits(done, "2227", "12");
 });
 it("Shows the number of bits of entropy for 4 characters of hex with 2 leading zeros", function(done) {
     testEntropyBits(done, "222F", "16");
@@ -3149,13 +3211,16 @@ it("Shows the number of bits of entropy for 4 characters of hex starting with F"
     testEntropyBits(done, "FFFF", "16");
 });
 it("Shows the number of bits of entropy for 10 characters of base 10", function(done) {
-    // 10 events at 3.32 bits per event
-    testEntropyBits(done, "0000101017", "33");
+    // 10 events with 3 bits for each event
+    testEntropyBits(done, "0000101017", "30");
+});
+it("Shows the number of bits of entropy for 10 characters of base 10 account for bias", function(done) {
+    // 9 events with 3 bits per event and 1 event with 1 bit per event
+    testEntropyBits(done, "0000101018", "28");
 });
 it("Shows the number of bits of entropy for a full deck of cards", function(done) {
-    // cards are not replaced, so a full deck is not 52^52 entropy which is 296
-    // bits, it's 52!, which is 225 bits
-    testEntropyBits(done, "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks", "225");
+    // removing bias is 32*5 + 16*4 + 4*2
+    testEntropyBits(done, "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks", "232");
 });
 
 it("Shows details about the entered entropy", function(done) {
@@ -3281,7 +3346,7 @@ it("Shows details about the entered entropy", function(done) {
             entropy: "7d",
             type: "card",
             events: "1",
-            bits: "4",
+            bits: "5",
             words: 0,
             strength: "less than a second",
         }
@@ -3293,7 +3358,7 @@ it("Shows details about the entered entropy", function(done) {
             entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
             type: "card (full deck)",
             events: "52",
-            bits: "225",
+            bits: "232",
             words: 21,
             strength: "centuries",
         }
@@ -3305,7 +3370,7 @@ it("Shows details about the entered entropy", function(done) {
             entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks3d",
             type: "card (full deck, 1 duplicate: 3d)",
             events: "53",
-            bits: "254",
+            bits: "237",
             words: 21,
             strength: "centuries",
         }
@@ -3317,7 +3382,7 @@ it("Shows details about the entered entropy", function(done) {
             entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqs3d4d",
             type: "card (2 duplicates: 3d 4d, 1 missing: KS)",
             events: "53",
-            bits: "254",
+            bits: "240",
             words: 21,
             strength: "centuries",
         }
@@ -3329,8 +3394,8 @@ it("Shows details about the entered entropy", function(done) {
             entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqs3d4d5d6d",
             type: "card (4 duplicates: 3d 4d 5d..., 1 missing: KS)",
             events: "55",
-            bits: "264",
-            words: 24,
+            bits: "250",
+            words: 21,
             strength: "centuries",
         }
     );
@@ -3338,13 +3403,12 @@ it("Shows details about the entered entropy", function(done) {
 it("Shows details about the entered entropy", function(done) {
     testEntropyFeedback(done,
         // Next test was throwing uncaught error in zxcvbn
-        // Also tests 451 bits, ie Math.log2(52!)*2 = 225.58 * 2
         {
             entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsksac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
             type: "card (full deck, 52 duplicates: ac 2c 3c...)",
             events: "104",
-            bits: "499",
-            words: 45,
+            bits: "464",
+            words: 42,
             strength: "centuries",
         }
     );
@@ -3356,7 +3420,7 @@ it("Shows details about the entered entropy", function(done) {
             entropy: "asAS",
             type: "card (1 duplicate: AS)",
             events: "2",
-            bits: "9",
+            bits: "8",
             words: 0,
             strength: "less than a second",
         }
@@ -3368,7 +3432,7 @@ it("Shows details about the entered entropy", function(done) {
             entropy: "ASas",
             type: "card (1 duplicate: as)",
             events: "2",
-            bits: "9",
+            bits: "8",
             words: 0,
             strength: "less than a second",
         }
@@ -3381,8 +3445,8 @@ it("Shows details about the entered entropy", function(done) {
             entropy: "ac2c3c4c5c6c7c8c  tcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
             type: "card (1 missing: 9C)",
             events: "51",
-            bits: "221",
-            words: 18,
+            bits: "227",
+            words: 21,
             strength: "centuries",
         }
     );
@@ -3393,7 +3457,7 @@ it("Shows details about the entered entropy", function(done) {
             entropy: "ac2c3c4c5c6c7c8c  tcjcqckcad2d3d4d  6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
             type: "card (2 missing: 9C 5D)",
             events: "50",
-            bits: "216",
+            bits: "222",
             words: 18,
             strength: "centuries",
         }
@@ -3405,7 +3469,7 @@ it("Shows details about the entered entropy", function(done) {
             entropy: "ac2c3c4c5c6c7c8c  tcjcqckcad2d3d4d  6d7d8d9dtdjd  kdah2h3h  5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
             type: "card (4 missing: 9C 5D QD...)",
             events: "48",
-            bits: "208",
+            bits: "212",
             words: 18,
             strength: "centuries",
         }
@@ -3418,20 +3482,21 @@ it("Shows details about the entered entropy", function(done) {
             entropy: "ac2c3c4c5c6c7c8c  tcjcqckcad2d3d4d  6d  8d9d  jd  kdah2h3h  5h6h7h8h9hthjhqhkh  2s3s4s5s6s7s8s9stsjsqsks",
             type: "card",
             events: "45",
-            bits: "195",
+            bits: "198",
             words: 18,
             strength: "centuries",
         }
     );
 });
 it("Shows details about the entered entropy", function(done) {
+    // multiple decks does not affect the bits per event
+    // since the bits are hardcoded in entropy.js
     testEntropyFeedback(done,
-        // Multiple decks of cards increases bits per event
         {
             entropy: "3d",
             events: "1",
-            bits: "4",
-            bitsPerEvent: "4.34",
+            bits: "5",
+            bitsPerEvent: "4.46",
         }
     );
 });
@@ -3440,8 +3505,8 @@ it("Shows details about the entered entropy", function(done) {
         {
             entropy: "3d3d",
             events: "2",
-            bits: "9",
-            bitsPerEvent: "4.80",
+            bits: "10",
+            bitsPerEvent: "4.46",
         }
     );
 });
@@ -3451,7 +3516,7 @@ it("Shows details about the entered entropy", function(done) {
             entropy: "3d3d3d",
             events: "3",
             bits: "15",
-            bitsPerEvent: "5.01",
+            bitsPerEvent: "4.46",
         }
     );
 });
@@ -3461,7 +3526,7 @@ it("Shows details about the entered entropy", function(done) {
             entropy: "3d3d3d3d",
             events: "4",
             bits: "20",
-            bitsPerEvent: "5.14",
+            bitsPerEvent: "4.46",
         }
     );
 });
@@ -3470,8 +3535,8 @@ it("Shows details about the entered entropy", function(done) {
         {
             entropy: "3d3d3d3d3d",
             events: "5",
-            bits: "26",
-            bitsPerEvent: "5.22",
+            bits: "25",
+            bitsPerEvent: "4.46",
         }
     );
 });
@@ -3480,8 +3545,8 @@ it("Shows details about the entered entropy", function(done) {
         {
             entropy: "3d3d3d3d3d3d",
             events: "6",
-            bits: "31",
-            bitsPerEvent: "5.28",
+            bits: "30",
+            bitsPerEvent: "4.46",
         }
     );
 });
@@ -3490,8 +3555,8 @@ it("Shows details about the entered entropy", function(done) {
         {
             entropy: "3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d",
             events: "33",
-            bits: "184",
-            bitsPerEvent: "5.59",
+            bits: "165",
+            bitsPerEvent: "4.46",
             strength: 'less than a second - Repeats like "abcabcabc" are only slightly harder to guess than "abc"',
         }
     );
@@ -3542,10 +3607,11 @@ it('Converts very long entropy to very long mnemonics', function(done) {
 // https://bip32jp.github.io/english/index.html
 // NOTES:
 // Is incompatible with:
+//     base 6
 //     base 20
 it('Is compatible with bip32jp.github.io', function(done) {
-    var entropy  = "543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543";
-    var expectedPhrase = "train then jungle barely whip fiber purpose puppy eagle cloud clump hospital robot brave balcony utility detect estate old green desk skill multiply virus";
+    var entropy  = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+    var expectedPhrase = "primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary foster";
     driver.findElement(By.css('.use-entropy'))
         .click();
     driver.findElement(By.css('.entropy'))