]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blobdiff - src/js/index.js
Add test for Pull Request 370 THT Thought network
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / src / js / index.js
index edd70c534e9ab0c85bda0b0b88a3d4220b3e20bc..807230b2130ef6456f01f70d7dc413097663684a 100644 (file)
         }
         phraseChangeTimeoutEvent = setTimeout(function() {
             phraseChanged();
-            var entropy = mnemonic.toRawEntropyHex(DOM.phrase.val());
+            var entropy = mnemonic.toRawEntropyBin(DOM.phrase.val());
             if (entropy !== null) {
                 DOM.entropyMnemonicLength.val("raw");
                 DOM.entropy.val(entropy);
         calcForDerivationPath();
         // Show the word indexes
         showWordIndexes();
+        writeSplitPhrase(phrase);
     }
 
     function tabChanged() {
             if (DOM.phrase.val().length > 0) {
                 var newPhrase = convertPhraseToNewLanguage();
                 DOM.phrase.val(newPhrase);
-                writeSplitPhrase(newPhrase);
                 phraseChanged();
             }
             else {
         // show the words
         var words = mnemonic.toMnemonic(data);
         DOM.phrase.val(words);
-        writeSplitPhrase(words);
         // show the entropy
         var entropyHex = uint8ArrayToHex(data);
         DOM.entropy.val(entropyHex);
     }
 
     function writeSplitPhrase(phrase) {
-        var wordCount = phrase.split(/\s/g).length;                                //get number of words in phrase       
-        var left=[];                                                            //initialize array of indexs
-        for (var i=0;i<wordCount;i++) left.push(i);                                //add all indexs to array
-        var group=[[],[],[]],                                                    //make array for 3 groups
-            groupI=-1;                                                            //initialize group index
-        var seed = Math.abs(sjcl.hash.sha256.hash(phrase)[0])% 2147483647;        //start seed at sudo random value based on hash of words
-        while (left.length>0) {                                                    //while indexs left
-            groupI=(groupI+1)%3;                                                //get next group to insert index into
-            seed = seed * 16807 % 2147483647;                                    //change random value.(simple predicatable random number generator works well for this use)
-            var selected=Math.floor(left.length*(seed - 1) / 2147483646);        //get index in left we will use for this group
-            group[groupI].push(left[selected]);                                    //add index to group
-            left.splice(selected,1);                                            //remove selected index
-        }
-        var cards=[phrase.split(/\s/g),phrase.split(/\s/g),phrase.split(/\s/g)];//make array of cards
-        for (var i=0;i<3;i++) {                                                    //go through each card
-            for (var ii=0;ii<wordCount/3;ii++) cards[i][group[i][ii]]='XXXX';    //erase words listed in the group
-            cards[i]='Card '+(i+1)+': '+wordArrayToPhrase(cards[i]);                                //combine words on card back to string
-        }
-        DOM.splitPhrase.val(cards.join("\r\n"));                                //make words visible
-        var triesPerSecond=10000000000;                                            //assumed number of tries per second
-        var hackTime=Math.pow(2,wordCount*10/3)/triesPerSecond;                    //get number of bits of unknown data per card
+        var wordCount = phrase.split(/\s/g).length;
+        var left=[];
+        for (var i=0;i<wordCount;i++) left.push(i);
+        var group=[[],[],[]],
+            groupI=-1;
+        var seed = Math.abs(sjcl.hash.sha256.hash(phrase)[0])% 2147483647;
+        while (left.length>0) {
+            groupI=(groupI+1)%3;
+            seed = seed * 16807 % 2147483647;
+            var selected=Math.floor(left.length*(seed - 1) / 2147483646);
+            group[groupI].push(left[selected]);
+            left.splice(selected,1);
+        }
+        var cards=[phrase.split(/\s/g),phrase.split(/\s/g),phrase.split(/\s/g)];
+        for (var i=0;i<3;i++) {
+            for (var ii=0;ii<wordCount/3;ii++) cards[i][group[i][ii]]='XXXX';
+            cards[i]='Card '+(i+1)+': '+wordArrayToPhrase(cards[i]);
+        }
+        DOM.splitPhrase.val(cards.join("\r\n"));
+        var triesPerSecond=10000000000;
+        var hackTime=Math.pow(2,wordCount*10/3)/triesPerSecond;
+        var displayRedText = false;
         if (hackTime<1) {
             hackTime="<1 second";
+            displayRedText = true;
         } else if (hackTime<86400) {
             hackTime=Math.floor(hackTime)+" seconds";
+            displayRedText = true;
         } else if(hackTime<31557600) {
             hackTime=Math.floor(hackTime/86400)+" days";
+            displayRedText = true;
         } else {
             hackTime=Math.floor(hackTime/31557600)+" years";
         }
         DOM.phraseSplitWarn.html("Time to hack with only one card: "+hackTime);
+        if (displayRedText) {
+            DOM.phraseSplitWarn.addClass("text-danger");
+        } else {
+            DOM.phraseSplitWarn.removeClass("text-danger");
+        }
     }
 
     function isUsingOwnEntropy() {