]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/commitdiff
Card entropy uses secure hashing when > 256 bits
authorIan Coleman <coleman.ian@gmail.com>
Thu, 22 Dec 2016 04:40:41 +0000 (15:40 +1100)
committerIan Coleman <coleman.ian@gmail.com>
Thu, 22 Dec 2016 04:40:41 +0000 (15:40 +1100)
src/js/entropy.js
tests.js

index 24fc21a47b4da47565bfde3621fd8ba6285351f2..a709c782a171855e3f3ba875af1c39ef73890ab4 100644 (file)
@@ -293,15 +293,12 @@ window.Entropy = new (function() {
         // Create a normalized string of the selected cards
         var normalizedCards = cards.join("").toUpperCase();
         // Convert to binary using the SHA256 hash of the normalized cards.
-        // If the number of bits is more than 256, multiple rounds of hashing
+        // If the number of bits is more than 256, multiple hashes
         // are used until the required number of bits is reached.
         var entropyBin = "";
         var iterations = 0;
         while (entropyBin.length < numberOfBits) {
-            var hashedCards = sjcl.hash.sha256.hash(normalizedCards);
-            for (var j=0; j<iterations; j++) {
-                hashedCards = sjcl.hash.sha256.hash(hashedCards);
-            }
+            var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
             var hashHex = sjcl.codec.hex.fromBits(hashedCards);
             for (var i=0; i<hashHex.length; i++) {
                 var decimal = parseInt(hashHex[i], 16);
index 3cde75ff8aacd464670fe5217842e9f1ac8ecaa1..4d229abe2ff56ad7152cefe9c2010ce723ceb931 100644 (file)
--- a/tests.js
+++ b/tests.js
@@ -2155,10 +2155,10 @@ page.open(url, function(status) {
             return e.message;
         }
         // Leading zeros for card entropy as binary string.
-        // Card entropy is hashed so 2c does not produce leading zeros.
+        // Card entropy is hashed so 2c does not necessarily produce leading zeros.
         try {
-            e = Entropy.fromString("4c");
-            if (e.binaryStr != "0001") {
+            e = Entropy.fromString("2c");
+            if (e.binaryStr != "0010") {
                 return "Card entropy as binary has leading zeros";
             }
         }
@@ -2190,24 +2190,24 @@ page.open(url, function(status) {
         // [ cards, binary ]
         try {
             var cards = [
-                [ "ac", "0100" ],
-                [ "acqs", "10111101" ],
-                [ "acks", "11110000" ],
-                [ "2cac", "11000010" ],
-                [ "2c", "1000" ],
-                [ "3d", "1111" ],
-                [ "4h", "0011" ],
+                [ "ac", "0101" ],
+                [ "acqs", "11011100" ],
+                [ "acks", "01011100" ],
+                [ "2cac", "11111000" ],
+                [ "2c", "0010" ],
+                [ "3d", "0001" ],
+                [ "4h", "1001" ],
                 [ "5s", "1001" ],
-                [ "6c", "1011" ],
-                [ "7d", "1101" ],
+                [ "6c", "0000" ],
+                [ "7d", "0001" ],
                 [ "8h", "1011" ],
-                [ "9s", "1010" ],
-                [ "tc", "1101" ],
-                [ "jd", "1101" ],
-                [ "qh", "1100" ],
-                [ "ks", "1111" ],
-                [ "ks2c", "10000001" ],
-                [ "KS2C", "10000001" ],
+                [ "9s", "0010" ],
+                [ "tc", "1001" ],
+                [ "jd", "1111" ],
+                [ "qh", "0010" ],
+                [ "ks", "0101" ],
+                [ "ks2c", "01010100" ],
+                [ "KS2C", "01010100" ],
             ];
             for (var i=0; i<cards.length; i++) {
                 var card = cards[i][0];