From 9c826d7819c9c20fb65b27f441797d509860b111 Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Fri, 12 Sep 2025 15:42:05 +0200 Subject: [PATCH] fix npe on null p2sh redeem script --- .../drongo/silentpayments/SilentPaymentScanAddress.java | 8 ++++++++ .../drongo/silentpayments/SilentPaymentUtils.java | 8 ++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/sparrowwallet/drongo/silentpayments/SilentPaymentScanAddress.java b/src/main/java/com/sparrowwallet/drongo/silentpayments/SilentPaymentScanAddress.java index 4c92cb1..40ab0aa 100644 --- a/src/main/java/com/sparrowwallet/drongo/silentpayments/SilentPaymentScanAddress.java +++ b/src/main/java/com/sparrowwallet/drongo/silentpayments/SilentPaymentScanAddress.java @@ -16,6 +16,14 @@ public class SilentPaymentScanAddress extends SilentPaymentAddress { } } + public ECKey getChangeTweakKey() { + return SilentPaymentUtils.getLabelledTweakKey(getScanKey(), 0); + } + + public ECKey getLabelledTweakKey(int labelIndex) { + return SilentPaymentUtils.getLabelledTweakKey(getScanKey(), labelIndex); + } + public SilentPaymentScanAddress getChangeAddress() { return getLabelledAddress(0); } diff --git a/src/main/java/com/sparrowwallet/drongo/silentpayments/SilentPaymentUtils.java b/src/main/java/com/sparrowwallet/drongo/silentpayments/SilentPaymentUtils.java index e30f4bc..1b97bf9 100644 --- a/src/main/java/com/sparrowwallet/drongo/silentpayments/SilentPaymentUtils.java +++ b/src/main/java/com/sparrowwallet/drongo/silentpayments/SilentPaymentUtils.java @@ -89,7 +89,7 @@ public class SilentPaymentUtils { break; case P2SH: Script redeemScript = input.getScriptSig().getFirstNestedScript(); - if(ScriptType.P2WPKH.isScriptType(redeemScript)) { + if(redeemScript != null && ScriptType.P2WPKH.isScriptType(redeemScript)) { if(input.getWitness() != null && input.getWitness().getPushCount() == 2) { byte[] pubKey = input.getWitness().getPushes().getLast(); if(pubKey != null && pubKey.length == 33) { @@ -270,8 +270,12 @@ public class SilentPaymentUtils { } public static ECKey getLabelledSpendKey(ECKey scanPrivateKey, ECKey spendPublicKey, int labelIndex) { + return spendPublicKey.add(getLabelledTweakKey(scanPrivateKey, labelIndex), true); + } + + public static ECKey getLabelledTweakKey(ECKey scanPrivateKey, int labelIndex) { BigInteger labelTweak = new BigInteger(1, Utils.taggedHash(BIP_0352_LABEL_TAG, Utils.concat(scanPrivateKey.getPrivKeyBytes(), ByteBuffer.allocate(4).order(ByteOrder.BIG_ENDIAN).putInt(labelIndex).array()))); - return spendPublicKey.add(ECKey.fromPublicOnly(ECKey.publicPointFromPrivate(labelTweak).getEncoded(true)), true); + return ECKey.fromPublicOnly(ECKey.publicPointFromPrivate(labelTweak).getEncoded(true)); } }