BIP44 account extended keys compiled to standalone

This commit is contained in:
Ian Coleman
2016-12-12 11:05:56 +11:00
parent c554e6ff5c
commit 20083ab9e9
+70 -29
View File
@@ -316,6 +316,36 @@
<input id="change" type="text" class="change form-control" value="0"> <input id="change" type="text" class="change form-control" value="0">
</div> </div>
</div> </div>
<div class="form-group">
<label class="col-sm-2 control-label">
</label>
<div class="col-sm-10">
<p data-translate>The account extendend keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
</div>
</div>
<div class="form-group">
<label for="account-xprv" class="col-sm-2 control-label">
<span data-translate>Account Extended Private Key</span>
</label>
<div class="col-sm-10">
<textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
</div>
</div>
<div class="form-group">
<label for="account-xpub" class="col-sm-2 control-label">
<span data-translate>Account Extended Public Key</span>
</label>
<div class="col-sm-10">
<textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">
</label>
<div class="col-sm-10">
<p data-translate>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
</div>
</div>
<div class="form-group"> <div class="form-group">
<label for="bip44-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label> <label for="bip44-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
<div class="col-sm-10"> <div class="col-sm-10">
@@ -347,27 +377,6 @@
<span data-translate>Use hardened addresses</span> <span data-translate>Use hardened addresses</span>
</label> </label>
</div> </div>
<div class="form-group">
<label for="mycelium-path" class="col-sm-2 control-label" data-translate>Mycelium Wallet</label>
<div class="col-sm-10">
<p class="form-control no-border" data-translate-html>
<code>m/44'/0'/0'</code> generates extended keys for import / export
</p>
<p class="form-control no-border" data-translate-html>
<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).
</p>
<p class="form-control no-border" data-translate-html>
<code>m/44'/0'/0'/0</code> generates public addresses
</p>
<p class="form-control no-border" data-translate-html>
<code>m/44'/0'/0'/1</code> generates change addresses
</p>
<p class="form-control no-border" data-translate-html>
For more info see the
<a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
</p>
</div>
</div>
<div class="form-group"> <div class="form-group">
<label for="core-path" class="col-sm-2 control-label" data-translate>Bitcoin Core</label> <label for="core-path" class="col-sm-2 control-label" data-translate>Bitcoin Core</label>
<div class="col-sm-10"> <div class="col-sm-10">
@@ -398,13 +407,13 @@
</div> </div>
<form class="form-horizontal" role="form"> <form class="form-horizontal" role="form">
<div class="form-group"> <div class="form-group">
<label for="extended-priv-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Key</label> <label for="extended-priv-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Private Key</label>
<div class="col-sm-10"> <div class="col-sm-10">
<textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea> <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="extended-pub-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Key (addresses only)</label> <label for="extended-pub-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Public Key</label>
<div class="col-sm-10"> <div class="col-sm-10">
<textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea> <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
</div> </div>
@@ -18653,6 +18662,8 @@ window.Entropy = new (function() {
DOM.bip44purpose = $("#bip44 .purpose"); DOM.bip44purpose = $("#bip44 .purpose");
DOM.bip44coin = $("#bip44 .coin"); DOM.bip44coin = $("#bip44 .coin");
DOM.bip44account = $("#bip44 .account"); DOM.bip44account = $("#bip44 .account");
DOM.bip44accountXprv = $("#bip44 .account-xprv");
DOM.bip44accountXpub = $("#bip44 .account-xpub");
DOM.bip44change = $("#bip44 .change"); DOM.bip44change = $("#bip44 .change");
DOM.generatedStrength = $(".generate-container .strength"); DOM.generatedStrength = $(".generate-container .strength");
DOM.hardenedAddresses = $(".hardened-addresses"); DOM.hardenedAddresses = $(".hardened-addresses");
@@ -18840,7 +18851,10 @@ window.Entropy = new (function() {
showValidationError(errorText); showValidationError(errorText);
return; return;
} }
calcBip32ExtendedKey(derivationPath); bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
if (bip44TabSelected()) {
displayBip44Info();
}
displayBip32Info(); displayBip32Info();
hidePending(); hidePending();
} }
@@ -18920,7 +18934,7 @@ window.Entropy = new (function() {
} }
function calcBip32ExtendedKey(path) { function calcBip32ExtendedKey(path) {
bip32ExtendedKey = bip32RootKey; var extendedKey = bip32RootKey;
// Derive the key from the path // Derive the key from the path
var pathBits = path.split("/"); var pathBits = path.split("/");
for (var i=0; i<pathBits.length; i++) { for (var i=0; i<pathBits.length; i++) {
@@ -18931,12 +18945,13 @@ window.Entropy = new (function() {
} }
var hardened = bit[bit.length-1] == "'"; var hardened = bit[bit.length-1] == "'";
if (hardened) { if (hardened) {
bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index); extendedKey = extendedKey.deriveHardened(index);
} }
else { else {
bip32ExtendedKey = bip32ExtendedKey.derive(index); extendedKey = extendedKey.derive(index);
} }
} }
return extendedKey
} }
function showValidationError(errorText) { function showValidationError(errorText) {
@@ -18989,7 +19004,7 @@ window.Entropy = new (function() {
} }
function getDerivationPath() { function getDerivationPath() {
if (DOM.bip44tab.hasClass("active")) { if (bip44TabSelected()) {
var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44); var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
var coin = parseIntNoNaN(DOM.bip44coin.val(), 0); var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
var account = parseIntNoNaN(DOM.bip44account.val(), 0); var account = parseIntNoNaN(DOM.bip44account.val(), 0);
@@ -19004,7 +19019,7 @@ window.Entropy = new (function() {
console.log("Using derivation path from BIP44 tab: " + derivationPath); console.log("Using derivation path from BIP44 tab: " + derivationPath);
return derivationPath; return derivationPath;
} }
else if (DOM.bip32tab.hasClass("active")) { else if (bip32TabSelected()) {
var derivationPath = DOM.bip32path.val(); var derivationPath = DOM.bip32path.val();
console.log("Using derivation path from BIP32 tab: " + derivationPath); console.log("Using derivation path from BIP32 tab: " + derivationPath);
return derivationPath; return derivationPath;
@@ -19051,6 +19066,24 @@ window.Entropy = new (function() {
return false; return false;
} }
function displayBip44Info() {
// Get the derivation path for the account
var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
var account = parseIntNoNaN(DOM.bip44account.val(), 0);
var path = "m/";
path += purpose + "'/";
path += coin + "'/";
path += account + "'/";
// Calculate the account extended keys
var accountExtendedKey = calcBip32ExtendedKey(path);
var accountXprv = accountExtendedKey.toBase58();
var accountXpub = accountExtendedKey.toBase58(false);
// Display the extended keys
DOM.bip44accountXprv.val(accountXprv);
DOM.bip44accountXpub.val(accountXpub);
}
function displayBip32Info() { function displayBip32Info() {
// Display the key // Display the key
DOM.seed.val(seed); DOM.seed.val(seed);
@@ -19541,6 +19574,14 @@ window.Entropy = new (function() {
DOM.qrHint.toggleClass("hidden"); DOM.qrHint.toggleClass("hidden");
} }
function bip44TabSelected() {
return DOM.bip44tab.hasClass("active");
}
function bip32TabSelected() {
return DOM.bip32tab.hasClass("active");
}
var networks = [ var networks = [
{ {
name: "Bitcoin", name: "Bitcoin",