You can use the advanced options below to generate different kinds of master addresses.
-
+
+
+
+ Number of HMAC SHA-256 iterations for seed generation, higher value mean's also longer calculation
+ (use value 0 to calculate just SHA-256, like in previous coinb.in versions):
+
+
+
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));