]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/commitdiff
Show the checksum value in the entropy details
authorIan Coleman <ian@iancoleman.io>
Sun, 11 Mar 2018 23:23:28 +0000 (10:23 +1100)
committerIan Coleman <ian@iancoleman.io>
Mon, 12 Mar 2018 00:31:41 +0000 (11:31 +1100)
src/index.html
src/js/index.js
tests/spec/tests.js

index 43a8e4fab6a2c6e3a88ecd6ddb40ced01a8d53a7..67e9101cacfa4454b9161e6350a290cd1d964640 100644 (file)
@@ -94,6 +94,8 @@
                                     <div class="filtered col-sm-9 form-control-static"></div>
                                     <label class="col-sm-3 control-label">Raw Binary</label>
                                     <div class="binary col-sm-9 form-control-static"></div>
+                                    <label class="col-sm-3 control-label">Binary Checksum</label>
+                                    <div class="checksum col-sm-9 form-control-static">&nbsp;</div>
                                     <label class="col-sm-3 control-label">Word Indexes</label>
                                     <div class="word-indexes col-sm-9 form-control-static">&nbsp;</div>
                                     <label class="col-sm-3 control-label">Mnemonic Length</label>
index b36e9926cdd96baa71c77f9c076c1d0f281e2e33..0d573baa88b1fe83d2cda149df21014f928afb82 100644 (file)
@@ -38,6 +38,7 @@
     DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
     DOM.entropyBinary = DOM.entropyContainer.find(".binary");
     DOM.entropyWordIndexes = DOM.entropyContainer.find(".word-indexes");
+    DOM.entropyChecksum = DOM.entropyContainer.find(".checksum");
     DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
     DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning");
     DOM.phrase = $(".phrase");
         DOM.phrase.val(phrase);
         // Show the word indexes
         showWordIndexes();
+        // Show the checksum
+        showChecksum();
     }
 
     function clearEntropyFeedback() {
         DOM.entropyWordIndexes.text(wordIndexesStr);
     }
 
+    function showChecksum() {
+        var phrase = DOM.phrase.val();
+        var words = phraseToWordArray(phrase);
+        var checksumBitlength = words.length / 3;
+        var checksum = "";
+        var binaryStr = "";
+        var language = getLanguage();
+        for (var i=words.length-1; i>=0; i--) {
+            var word = words[i];
+            var wordIndex = WORDLISTS[language].indexOf(word);
+            var wordBinary = wordIndex.toString(2);
+            while (wordBinary.length < 11) {
+                wordBinary = "0" + wordBinary;
+            }
+            var binaryStr = wordBinary + binaryStr;
+            if (binaryStr.length >= checksumBitlength) {
+                var start = binaryStr.length - checksumBitlength;
+                var end = binaryStr.length;
+                checksum = binaryStr.substring(start, end);
+            }
+        }
+        DOM.entropyChecksum.text(checksum);
+    }
+
     function updateCsv() {
         var tableCsv = "path,address,public key,private key\n";
         var rows = DOM.addresses.find("tr");
index 9e780162c73e65ff8b8cf7ec567128669c16fb7b..f56b18d0aea1192785b540c21ee31641a38e4613 100644 (file)
@@ -2922,4 +2922,19 @@ it('Can encrypt private keys using BIP38', function(done) {
     });
 }, bip38delay + 5000);
 
+it('Shows the checksum for the entropy', function(done) {
+    driver.findElement(By.css('.use-entropy'))
+        .click();
+    driver.findElement(By.css('.entropy'))
+        .sendKeys("00000000000000000000000000000000");
+    driver.sleep(generateDelay).then(function() {
+        driver.findElement(By.css('.checksum'))
+            .getText()
+            .then(function(text) {
+                expect(text).toBe("1");
+                done();
+            });
+    });
+});
+
 });