diff --git a/index.html b/index.html index 691dbd5b..87ec3506 100644 --- a/index.html +++ b/index.html @@ -582,12 +582,27 @@

New HD Address making bip32 even easier

+ +
+ + + + +
+

Address Options

You can use the advanced options below to generate different kinds of master addresses.

- +
diff --git a/js/coin.js b/js/coin.js index d8f5388f..b58ad906 100644 --- a/js/coin.js +++ b/js/coin.js @@ -608,6 +608,7 @@ r.parent_fingerprint = bytes.slice(5, 9); r.child_index = coinjs.uint(bytes.slice(9, 13), 4); r.chain_code = bytes.slice(13, 45); + r.seed_wif = ''; r.key_bytes = bytes.slice(45, 78); var c = coinjs.compressed; // get current default @@ -742,8 +743,23 @@ } // make a master hd xprv/xpub - r.master = function(pass) { - var seed = (pass) ? Crypto.SHA256(pass) : coinjs.newPrivkey(); + r.master = function(pass, iters) { + if (pass) { + var seed_iters = (iters) ? Math.abs(iters * 1) : 0; + if (seed_iters == 0) { + var seed = Crypto.SHA256(pass); + } else { + var seed = Crypto.util.hexToBytes("0000000000000000000000000000000000000000000000000000000000000000"); + for (var i = 0; i < seed_iters; i++) { + seed = Crypto.HMAC(Crypto.SHA256, seed, pass, { asBytes: true }); + } + seed = Crypto.util.bytesToHex(seed); + } + } else { + var seed = coinjs.newPrivkey(); + } + + var seed_wif = coinjs.privkey2wif(seed); var hasher = new jsSHA(seed, 'HEX'); var I = hasher.getHMAC("Bitcoin seed", "TEXT", "SHA-512", "HEX"); @@ -755,6 +771,7 @@ 'parent_fingerprint':[0,0,0,0], 'child_index':0, 'chain_code':chain, + 'seed_wif':seed_wif, 'privkey':I.slice(0, 64), 'pubkey':coinjs.newPubkey(I.slice(0, 64))}); } @@ -799,6 +816,8 @@ var ret = pub.concat(checksum); o.pubkey = coinjs.base58encode(ret); } + + o.seed_wif = data.seed_wif; return o; } diff --git a/js/coinbin.js b/js/coinbin.js index afc98f17..a1ba84ad 100644 --- a/js/coinbin.js +++ b/js/coinbin.js @@ -570,18 +570,20 @@ $(document).ready(function() { $("#newHDKeysBtn").click(function(){ coinjs.compressed = true; var s = ($("#newHDBrainwallet").is(":checked")) ? $("#HDBrainwallet").val() : null; + var siters = ($("#newHDBrainwallet").is(":checked")) ? $("#HDBrainwalletIters").val()*1 : null; var hd = coinjs.hd(); - var pair = hd.master(s); + var pair = hd.master(s, siters); $("#newHDxpub").val(pair.pubkey); $("#newHDxprv").val(pair.privkey); + $("#newHDseed").val(pair.seed_wif); }); $("#newHDBrainwallet").click(function(){ if($(this).is(":checked")){ - $("#HDBrainwallet").removeClass("hidden"); + $("#HDBrainwalletInput").removeClass("hidden"); } else { - $("#HDBrainwallet").addClass("hidden"); + $("#HDBrainwalletInput").addClass("hidden"); } }); @@ -1681,6 +1683,7 @@ $(document).ready(function() { if(hex == hex_cmp_prv || hex == hex_cmp_pub){ var hd = coinjs.hd(s); $("#verifyHDaddress .hdKey").html(s); + $("#verifyHDaddress .seed_wif").val(hd.seed_wif); $("#verifyHDaddress .chain_code").val(Crypto.util.bytesToHex(hd.chain_code)); $("#verifyHDaddress .depth").val(hd.depth); $("#verifyHDaddress .version").val('0x'+(hd.version).toString(16));