From 91ad82a21cdca6a8720efa8b08e78138d8be256a Mon Sep 17 00:00:00 2001 From: Toporin Date: Tue, 14 Jan 2025 15:23:38 +0100 Subject: [PATCH] Patch https://github.com/Toporin/SatochipApplet/issues/15 First try to recover derivation path from satochip keystore, otherwise from first keystore as default value. --- .../sparrow/io/satochip/SatoCardApi.java | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/sparrowwallet/sparrow/io/satochip/SatoCardApi.java b/src/main/java/com/sparrowwallet/sparrow/io/satochip/SatoCardApi.java index 09e03da9..c37a5bb1 100644 --- a/src/main/java/com/sparrowwallet/sparrow/io/satochip/SatoCardApi.java +++ b/src/main/java/com/sparrowwallet/sparrow/io/satochip/SatoCardApi.java @@ -165,12 +165,25 @@ public class SatoCardApi extends CardApi { if(!psbtInput.isSigned()) { WalletNode signingNode = signingNodes.get(psbtInput); List keystores = wallet.getKeystores(); - // recover full derivation path - Keystore keystore = keystores.get(0); - String basePath = keystore.getKeyDerivation().getDerivationPath(); - String extendedPath = signingNode.getDerivationPath().substring(1); - String fullPath = basePath + extendedPath; - + // recover derivation path from Satochip keystore + String fullPath = null; + for(int i = 0; i < keystores.size(); i++) { + Keystore keystore = keystores.get(i); + WalletModel walletModel = keystore.getWalletModel(); + if(walletModel == WalletModel.SATOCHIP) { + String basePath = keystore.getKeyDerivation().getDerivationPath(); + String extendedPath = signingNode.getDerivationPath().substring(1); + fullPath = basePath + extendedPath; + break; + } + } + if (fullPath == null) { + // recover a default derivation path from first keystore + Keystore keystore = keystores.get(0); + String basePath = keystore.getKeyDerivation().getDerivationPath(); + String extendedPath = signingNode.getDerivationPath().substring(1); + fullPath = basePath + extendedPath; + } psbtInput.sign(new CardPSBTInputSigner(signingNode, fullPath)); } }