From bc7a0be87ef2ca4337e81f65d0ad3cb879266e3d Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Fri, 22 May 2026 15:00:53 +0200 Subject: [PATCH] update bip322 implementation to match completed spec --- drongo | 2 +- .../sparrow/control/MessageSignDialog.java | 22 +++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/drongo b/drongo index cc55b5f1..37793173 160000 --- a/drongo +++ b/drongo @@ -1 +1 @@ -Subproject commit cc55b5f13a6543ac47667ff5ae4cfaa83824d06d +Subproject commit 377931738885c58d750005f2dfb61d3283820395 diff --git a/src/main/java/com/sparrowwallet/sparrow/control/MessageSignDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/MessageSignDialog.java index 3aa467dc..59277ccc 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/MessageSignDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/MessageSignDialog.java @@ -532,6 +532,16 @@ public class MessageSignDialog extends Dialog { } private String extractBip322Signature(PSBT signedPsbt) { + String psbtMessage = signedPsbt.getGenericSignedMessage(); + if(psbtMessage != null && !psbtMessage.equals(message.getText().trim())) { + Optional response = AppServices.showWarningDialog("Message mismatch", + "The message in the signed PSBT does not match the message in this dialog.\n\nPSBT message: " + psbtMessage + + "\n\nContinue extracting the signature?", ButtonType.NO, ButtonType.YES); + if(response.isEmpty() || response.get() != ButtonType.YES) { + return null; + } + } + Wallet signingWallet = walletNode.getWallet(); if(signingWallet.getPolicyType() == PolicyType.SINGLE_SP) { return Bip322.getBip322SignatureFromPsbtSp(signedPsbt); @@ -565,8 +575,10 @@ public class MessageSignDialog extends Dialog { if(result.psbt != null) { try { String sig = extractBip322Signature(result.psbt); - signature.clear(); - signature.appendText(sig); + if(sig != null) { + signature.clear(); + signature.appendText(sig); + } } catch(Exception e) { log.error("Error extracting BIP-322 signature from PSBT", e); AppServices.showErrorDialog("Error extracting signature", e.getMessage()); @@ -666,8 +678,10 @@ public class MessageSignDialog extends Dialog { byte[] psbtBytes = Files.readAllBytes(file.toPath()); PSBT signedPsbt = new PSBT(psbtBytes, false); String sig = extractBip322Signature(signedPsbt); - signature.clear(); - signature.appendText(sig); + if(sig != null) { + signature.clear(); + signature.appendText(sig); + } return; } catch(Exception e) { if(file.getName().toLowerCase(Locale.ROOT).endsWith(".psbt")) {