Skip to content

Commit

Permalink
Fix address generation for HD wallet with different types on simple p…
Browse files Browse the repository at this point in the history
…ath scheme.
  • Loading branch information
ok2 committed Apr 5, 2021
1 parent 00519cb commit 40a235e
Showing 1 changed file with 17 additions and 4 deletions.
21 changes: 17 additions & 4 deletions js/coin.js
Original file line number Diff line number Diff line change
Expand Up @@ -706,23 +706,34 @@
var ecparams = EllipticCurve.getSECCurveByName("secp256k1");
var curve = ecparams.getCurve();

var k, key, pubkey, o;
var k, key, pubkey, o, addr_format, address_fun, address;

o = coinjs.clone(this);
o.chain_code = ir;
o.child_index = i;

addr_format = $("#verifyHDaddress .derivation_addr_format").val();
if (addr_format == "bech32") {
address_fun = function(pk) { return coinjs.bech32Address(pk); };
} else if (addr_format == "segwit") {
address_fun = function(pk) { return coinjs.segwitAddress(pk); };
} else {
address_fun = function(pk) {
return {'address': coinjs.pubkey2address(pubkey), 'redeemscript': ''};
};
}
if(this.type=='private'){
// derive key pair from from a xprv key
k = il.add(new BigInteger([0].concat(Crypto.util.hexToBytes(this.keys.privkey)))).mod(ecparams.getN());
key = Crypto.util.bytesToHex(k.toByteArrayUnsigned());

pubkey = coinjs.newPubkey(key);

address = address_fun(pubkey);
o.keys = {'privkey':key,
'pubkey':pubkey,
'wif':coinjs.privkey2wif(key),
'address':coinjs.pubkey2address(pubkey)};
'address':address.address,
'script':address.redeemscript};

} else if (this.type=='public'){
// derive xpub key from an xpub key
Expand All @@ -739,9 +750,11 @@
publicKeyBytesCompressed.unshift(0x03)
}
pubkey = Crypto.util.bytesToHex(publicKeyBytesCompressed);
address = address_fun(pubkey);

o.keys = {'pubkey':pubkey,
'address':coinjs.pubkey2address(pubkey)}
'address':address.address,
'script':address.redeemscript}
} else {
// fail
}
Expand Down

0 comments on commit 40a235e

Please sign in to comment.