diff options
author | Pavol Rusnak <stick@gk2.sk> | 2014-09-24 17:32:02 +0200 |
---|---|---|
committer | Pavol Rusnak <stick@gk2.sk> | 2014-09-24 17:32:02 +0200 |
commit | 1abcc51168d22067d303a709eb45d2ec7774808d (patch) | |
tree | 6b2dba2c5d3de0af46efe05794e45eeaefc8cc6c | |
parent | d922d6910987f9161870ca2225a0e49d91ffc8b7 (diff) | |
download | BIP39-1abcc51168d22067d303a709eb45d2ec7774808d.tar.gz BIP39-1abcc51168d22067d303a709eb45d2ec7774808d.tar.zst BIP39-1abcc51168d22067d303a709eb45d2ec7774808d.zip |
add support for BIP39 passphrase
-rw-r--r-- | src/index.html | 8 | ||||
-rw-r--r-- | src/js/index.js | 9 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/index.html b/src/index.html index dbdc67c..4a9647e 100644 --- a/src/index.html +++ b/src/index.html | |||
@@ -49,7 +49,7 @@ | |||
49 | <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p> | 49 | <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p> |
50 | </div> | 50 | </div> |
51 | <div class="form-group"> | 51 | <div class="form-group"> |
52 | <label for="phrase" class="col-sm-2 control-label">BIP39 Phrase</label> | 52 | <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label> |
53 | <div class="col-sm-10"> | 53 | <div class="col-sm-10"> |
54 | <textarea id="phrase" class="phrase form-control"></textarea> | 54 | <textarea id="phrase" class="phrase form-control"></textarea> |
55 | </div> | 55 | </div> |
@@ -66,6 +66,12 @@ | |||
66 | </div> | 66 | </div> |
67 | </div> | 67 | </div> |
68 | <div class="form-group"> | 68 | <div class="form-group"> |
69 | <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label> | ||
70 | <div class="col-sm-10"> | ||
71 | <textarea id="passphrase" class="passphrase form-control"></textarea> | ||
72 | </div> | ||
73 | </div> | ||
74 | <div class="form-group"> | ||
69 | <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label> | 75 | <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label> |
70 | <div class="col-sm-10"> | 76 | <div class="col-sm-10"> |
71 | <textarea id="root-key" class="root-key form-control" disabled="disabled"></textarea> | 77 | <textarea id="root-key" class="root-key form-control" disabled="disabled"></textarea> |
diff --git a/src/js/index.js b/src/js/index.js index 161f91f..cee8ffb 100644 --- a/src/js/index.js +++ b/src/js/index.js | |||
@@ -10,6 +10,7 @@ | |||
10 | 10 | ||
11 | var DOM = {}; | 11 | var DOM = {}; |
12 | DOM.phrase = $(".phrase"); | 12 | DOM.phrase = $(".phrase"); |
13 | DOM.passphrase = $(".passphrase"); | ||
13 | DOM.generate = $(".generate"); | 14 | DOM.generate = $(".generate"); |
14 | DOM.rootKey = $(".root-key"); | 15 | DOM.rootKey = $(".root-key"); |
15 | DOM.extendedPrivKey = $(".extended-priv-key"); | 16 | DOM.extendedPrivKey = $(".extended-priv-key"); |
@@ -35,6 +36,7 @@ | |||
35 | function init() { | 36 | function init() { |
36 | // Events | 37 | // Events |
37 | DOM.phrase.on("keyup", delayedPhraseChanged); | 38 | DOM.phrase.on("keyup", delayedPhraseChanged); |
39 | DOM.passphrase.on("keyup", delayedPhraseChanged); | ||
38 | DOM.generate.on("click", generateClicked); | 40 | DOM.generate.on("click", generateClicked); |
39 | DOM.more.on("click", showMore); | 41 | DOM.more.on("click", showMore); |
40 | DOM.bip32path.on("keyup", bip32Changed); | 42 | DOM.bip32path.on("keyup", bip32Changed); |
@@ -67,6 +69,7 @@ | |||
67 | hideValidationError(); | 69 | hideValidationError(); |
68 | // Get the mnemonic phrase | 70 | // Get the mnemonic phrase |
69 | var phrase = DOM.phrase.val(); | 71 | var phrase = DOM.phrase.val(); |
72 | var passphrase = DOM.passphrase.val(); | ||
70 | var errorText = findPhraseErrors(phrase); | 73 | var errorText = findPhraseErrors(phrase); |
71 | if (errorText) { | 74 | if (errorText) { |
72 | showValidationError(errorText); | 75 | showValidationError(errorText); |
@@ -79,7 +82,7 @@ | |||
79 | return; | 82 | return; |
80 | } | 83 | } |
81 | // Calculate and display | 84 | // Calculate and display |
82 | calcBip32Seed(phrase, derivationPath); | 85 | calcBip32Seed(phrase, passphrase, derivationPath); |
83 | displayBip32Info(); | 86 | displayBip32Info(); |
84 | hidePending(); | 87 | hidePending(); |
85 | } | 88 | } |
@@ -159,8 +162,8 @@ | |||
159 | return words; | 162 | return words; |
160 | } | 163 | } |
161 | 164 | ||
162 | function calcBip32Seed(phrase, path) { | 165 | function calcBip32Seed(phrase, passphrase, path) { |
163 | var seed = mnemonic.toSeed(phrase); | 166 | var seed = mnemonic.toSeed(phrase, passphrase); |
164 | var seedHash = Bitcoin.crypto.sha256(seed).toString("hex"); | 167 | var seedHash = Bitcoin.crypto.sha256(seed).toString("hex"); |
165 | bip32RootKey = Bitcoin.HDNode.fromSeedHex(seedHash, network); | 168 | bip32RootKey = Bitcoin.HDNode.fromSeedHex(seedHash, network); |
166 | bip32ExtendedKey = bip32RootKey; | 169 | bip32ExtendedKey = bip32RootKey; |