mirror of
https://github.com/OneKeyHQ/bip39.git
synced 2026-04-18 08:22:16 +00:00
Parse extended root key regardless of prefix
This commit is contained in:
@@ -478,6 +478,37 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function calcBip32RootKeyFromBase58(rootKeyBase58) {
|
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);
|
bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -551,6 +582,37 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function validateRootKey(rootKeyBase58) {
|
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 {
|
try {
|
||||||
bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
|
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