]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blobdiff - bip39-standalone.html
bitsPerEvent correct for multiple decks of cards
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
index e433d3194752c1610d798c155aeca64293129518..4bad422a672a0999a644d43b0fed096dbe49fd26 100644 (file)
@@ -18324,9 +18324,13 @@ window.Entropy = new (function() {
         while (entropyBin.length < expectedBits) {
             entropyBin = "0" + entropyBin;
         }
+        // Calculate the number of bits per event
+        var bitsPerEvent = Math.log2(base.asInt);
         // Cards binary must be handled differently, since they're not replaced
         if (base.asInt == 52) {
-            entropyBin = getCardBinary(base.parts);
+            var cardEntropy = processCardEntropy(base.parts);
+            entropyBin = cardEntropy.binaryStr;
+            bitsPerEvent = cardEntropy.bitsPerEvent;
         }
         // Supply a 'filtered' entropy string for display purposes
         var entropyClean = base.parts.join("");
@@ -18348,6 +18352,7 @@ window.Entropy = new (function() {
             binaryStr: entropyBin,
             cleanStr: entropyClean,
             cleanHtml: entropyHtml,
+            bitsPerEvent: bitsPerEvent,
             base: base,
         }
         return e;
@@ -18440,7 +18445,7 @@ window.Entropy = new (function() {
     // total possible entropy is measured using n!, not base^n.
     // eg the second last card can be only one of two, not one of fifty two
     // so the added entropy for that card is only one bit at most
-    function getCardBinary(cards) {
+    function processCardEntropy(cards) {
         // Track how many instances of each card have been used, and thus
         // how many decks are in use.
         var cardCounts = {};
@@ -18509,7 +18514,12 @@ window.Entropy = new (function() {
         }
         // Truncate to the appropriate number of bits.
         entropyBin = entropyBin.substring(0, numberOfBits);
-        return entropyBin;
+        // Get the number of bits per event
+        bitsPerEvent = maxBits / totalCards;
+        return {
+            binaryStr: entropyBin,
+            bitsPerEvent: bitsPerEvent,
+        }
     }
 
     // Polyfill for Math.log2
@@ -19366,10 +19376,7 @@ window.Entropy = new (function() {
         }
         var entropyTypeStr = getEntropyTypeStr(entropy);
         var wordCount = Math.floor(numberOfBits / 32) * 3;
-        var bitsPerEvent = Math.log2(entropy.base.asInt).toFixed(2);
-        if (entropy.base.asInt == 52) {
-            bitsPerEvent = (4.3381).toFixed(2); // log2(52! / 52)
-        }
+        var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
         DOM.entropyFiltered.html(entropy.cleanHtml);
         DOM.entropyType.text(entropyTypeStr);
         DOM.entropyStrength.text(strength);