+ function isUsingOwnEntropy() {
+ return DOM.useEntropy.prop("checked");
+ }
+
+ function setMnemonicFromEntropy() {
+ hideEntropyError();
+ // Work out minimum base for entropy
+ var entropyStr = DOM.entropy.val();
+ var entropy = Entropy.fromString(entropyStr);
+ if (entropy.hexStr.length == 0) {
+ return;
+ }
+ // Show entropy details
+ var extraBits = 32 - (entropy.binaryStr.length % 32);
+ var extraChars = Math.ceil(extraBits * Math.log(2) / Math.log(entropy.base.asInt));
+ var strength = "an extremely weak";
+ if (entropy.hexStr.length >= 8) {
+ strength = "a very weak";
+ }
+ if (entropy.hexStr.length >= 12) {
+ strength = "a weak";
+ }
+ if (entropy.hexStr.length >= 24) {
+ strength = "a strong";
+ }
+ if (entropy.hexStr.length >= 32) {
+ strength = "a very strong";
+ }
+ if (entropy.hexStr.length >= 40) {
+ strength = "an extremely strong";
+ }
+ if (entropy.hexStr.length >=48) {
+ strength = "an even stronger"
+ }
+ var msg = "Have " + entropy.binaryStr.length + " bits of entropy, " + extraChars + " more " + entropy.base.str + " chars required to generate " + strength + " mnemonic: " + entropy.cleanStr;
+ showEntropyError(msg);
+ // Discard trailing entropy
+ var hexStr = entropy.hexStr.substring(0, Math.floor(entropy.hexStr.length / 8) * 8);
+ // Convert entropy string to numeric array
+ var entropyArr = [];
+ for (var i=0; i<hexStr.length / 2; i++) {
+ var entropyByte = parseInt(hexStr[i*2].concat(hexStr[i*2+1]), 16);
+ entropyArr.push(entropyByte)
+ }
+ // Convert entropy array to mnemonic
+ var phrase = mnemonic.toMnemonic(entropyArr);
+ // Set the mnemonic in the UI
+ DOM.phrase.val(phrase);
+ }
+
+ function hideEntropyError() {
+ DOM.entropyError.addClass("hidden");
+ }
+
+ function showEntropyError(msg) {
+ DOM.entropyError.text(msg);
+ DOM.entropyError.removeClass("hidden");
+ }
+