handle invalid/incomplete output descriptors better

This commit is contained in:
Craig Raw 2020-09-25 13:43:02 +02:00
parent 5e281982cb
commit 2650dafa66

View file

@ -6,6 +6,7 @@ import com.sparrowwallet.drongo.crypto.DeterministicKey;
import com.sparrowwallet.drongo.crypto.ECKey; import com.sparrowwallet.drongo.crypto.ECKey;
import com.sparrowwallet.drongo.policy.Policy; import com.sparrowwallet.drongo.policy.Policy;
import com.sparrowwallet.drongo.policy.PolicyType; import com.sparrowwallet.drongo.policy.PolicyType;
import com.sparrowwallet.drongo.protocol.ProtocolException;
import com.sparrowwallet.drongo.protocol.Script; import com.sparrowwallet.drongo.protocol.Script;
import com.sparrowwallet.drongo.protocol.ScriptType; import com.sparrowwallet.drongo.protocol.ScriptType;
import com.sparrowwallet.drongo.wallet.Keystore; import com.sparrowwallet.drongo.wallet.Keystore;
@ -323,9 +324,13 @@ public class OutputDescriptor {
} }
KeyDerivation keyDerivation = new KeyDerivation(masterFingerprint, keyDerivationPath); KeyDerivation keyDerivation = new KeyDerivation(masterFingerprint, keyDerivationPath);
try {
ExtendedKey extendedPublicKey = ExtendedKey.fromDescriptor(extPubKey); ExtendedKey extendedPublicKey = ExtendedKey.fromDescriptor(extPubKey);
keyDerivationMap.put(extendedPublicKey, keyDerivation); keyDerivationMap.put(extendedPublicKey, keyDerivation);
keyChildDerivationMap.put(extendedPublicKey, childDerivationPath); keyChildDerivationMap.put(extendedPublicKey, childDerivationPath);
} catch(ProtocolException e) {
throw new ProtocolException("Invalid xPub: " + e.getMessage());
}
} }
return new OutputDescriptor(scriptType, multisigThreshold, keyDerivationMap, keyChildDerivationMap); return new OutputDescriptor(scriptType, multisigThreshold, keyDerivationMap, keyChildDerivationMap);
@ -440,7 +445,10 @@ public class OutputDescriptor {
keyBuilder.append("]"); keyBuilder.append("]");
} }
if(pubKey != null) {
keyBuilder.append(pubKey.toString()); keyBuilder.append(pubKey.toString());
}
String childDerivation = mapChildrenDerivations.get(pubKey); String childDerivation = mapChildrenDerivations.get(pubKey);
if(childDerivation != null) { if(childDerivation != null) {
if(!childDerivation.startsWith("/")) { if(!childDerivation.startsWith("/")) {