mirror of
https://github.com/OneKeyHQ/bip39.git
synced 2026-04-05 18:43:47 +00:00
Parse extended root key regardless of prefix
This commit is contained in:
@@ -478,6 +478,37 @@
|
||||
}
|
||||
|
||||
function calcBip32RootKeyFromBase58(rootKeyBase58) {
|
||||
// try parsing with various segwit network params since this extended
|
||||
// key may be from any one of them.
|
||||
if (networkHasSegwit()) {
|
||||
var n = network;
|
||||
if ("baseNetwork" in n) {
|
||||
n = bitcoinjs.bitcoin.networks[n.baseNetwork];
|
||||
}
|
||||
// try parsing using base network params
|
||||
try {
|
||||
bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n);
|
||||
return;
|
||||
}
|
||||
catch (e) {}
|
||||
// try parsing using p2wpkh params
|
||||
if ("p2wpkh" in n) {
|
||||
try {
|
||||
bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkh);
|
||||
return;
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
// try parsing using p2wpkh-in-p2sh network params
|
||||
if ("p2wpkhInP2sh" in n) {
|
||||
try {
|
||||
bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh);
|
||||
return;
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
}
|
||||
// try the network params as currently specified
|
||||
bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
|
||||
}
|
||||
|
||||
@@ -551,6 +582,37 @@
|
||||
}
|
||||
|
||||
function validateRootKey(rootKeyBase58) {
|
||||
// try various segwit network params since this extended key may be from
|
||||
// any one of them.
|
||||
if (networkHasSegwit()) {
|
||||
var n = network;
|
||||
if ("baseNetwork" in n) {
|
||||
n = bitcoinjs.bitcoin.networks[n.baseNetwork];
|
||||
}
|
||||
// try parsing using base network params
|
||||
try {
|
||||
bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n);
|
||||
return "";
|
||||
}
|
||||
catch (e) {}
|
||||
// try parsing using p2wpkh params
|
||||
if ("p2wpkh" in n) {
|
||||
try {
|
||||
bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkh);
|
||||
return "";
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
// try parsing using p2wpkh-in-p2sh network params
|
||||
if ("p2wpkhInP2sh" in n) {
|
||||
try {
|
||||
bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh);
|
||||
return "";
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
}
|
||||
// try the network params as currently specified
|
||||
try {
|
||||
bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
|
||||
}
|
||||
|
||||
@@ -3681,4 +3681,23 @@ it('Shows litecoin BIP49 addresses', function(done) {
|
||||
});
|
||||
});
|
||||
|
||||
it('Can use root keys to generate segwit table rows', function(done) {
|
||||
// segwit uses ypub / zpub instead of xpub but the root key should still
|
||||
// be valid regardless of the encoding used to import that key.
|
||||
// Maybe this breaks the reason for the different extended key prefixes, but
|
||||
// since the parsed root key is used behind the scenes anyhow this should be
|
||||
// allowed.
|
||||
driver.findElement(By.css('#root-key'))
|
||||
.sendKeys('xprv9s21ZrQH143K2jkGDCeTLgRewT9F2pH5JZs2zDmmjXes34geVnFiuNa8KTvY5WoYvdn4Ag6oYRoB6cXtc43NgJAEqDXf51xPm6fhiMCKwpi');
|
||||
driver.findElement(By.css('#bip49-tab a'))
|
||||
.click()
|
||||
// bip49 addresses are shown
|
||||
driver.sleep(generateDelay).then(function() {
|
||||
getFirstAddress(function(address) {
|
||||
expect(address).toBe("3QG2Y9AA4xZ846gKHZqNf7mvVKbLqMKxr2");
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user