mirror of
https://github.com/sparrowwallet/sparrow.git
synced 2025-11-05 11:56:37 +00:00
prevent selection of unsupported bip322 format when signing a message with a connected device
This commit is contained in:
parent
26ce1b3469
commit
e4dd4950bf
1 changed files with 20 additions and 8 deletions
|
|
@ -240,6 +240,9 @@ public class MessageSignDialog extends Dialog<ButtonBar.ButtonData> {
|
||||||
setFormatFromScriptType(address.getScriptType());
|
setFormatFromScriptType(address.getScriptType());
|
||||||
if(wallet != null) {
|
if(wallet != null) {
|
||||||
setWalletNodeFromAddress(wallet, address);
|
setWalletNodeFromAddress(wallet, address);
|
||||||
|
if(walletNode != null) {
|
||||||
|
setFormatFromScriptType(getSigningScriptType(walletNode));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch(InvalidAddressException e) {
|
} catch(InvalidAddressException e) {
|
||||||
//can't happen
|
//can't happen
|
||||||
|
|
@ -273,7 +276,7 @@ public class MessageSignDialog extends Dialog<ButtonBar.ButtonData> {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(wallet != null && walletNode != null) {
|
if(wallet != null && walletNode != null) {
|
||||||
setFormatFromScriptType(wallet.getScriptType());
|
setFormatFromScriptType(getSigningScriptType(walletNode));
|
||||||
} else {
|
} else {
|
||||||
formatGroup.selectToggle(formatElectrum);
|
formatGroup.selectToggle(formatElectrum);
|
||||||
}
|
}
|
||||||
|
|
@ -287,9 +290,13 @@ public class MessageSignDialog extends Dialog<ButtonBar.ButtonData> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean canSign(Wallet wallet) {
|
private boolean canSign(Wallet wallet) {
|
||||||
return wallet.getKeystores().get(0).hasPrivateKey()
|
return wallet.getKeystores().getFirst().hasPrivateKey()
|
||||||
|| wallet.getKeystores().get(0).getSource() == KeystoreSource.HW_USB
|
|| wallet.getKeystores().getFirst().getSource() == KeystoreSource.HW_USB
|
||||||
|| wallet.getKeystores().get(0).getWalletModel().isCard();
|
|| wallet.getKeystores().getFirst().getWalletModel().isCard();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean canSignBip322(Wallet wallet) {
|
||||||
|
return wallet.getKeystores().getFirst().hasPrivateKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Address getAddress()throws InvalidAddressException {
|
private Address getAddress()throws InvalidAddressException {
|
||||||
|
|
@ -313,6 +320,11 @@ public class MessageSignDialog extends Dialog<ButtonBar.ButtonData> {
|
||||||
walletNode = wallet.getWalletAddresses().get(address);
|
walletNode = wallet.getWalletAddresses().get(address);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ScriptType getSigningScriptType(WalletNode walletNode) {
|
||||||
|
ScriptType scriptType = walletNode.getWallet().getScriptType();
|
||||||
|
return canSign(walletNode.getWallet()) && !canSignBip322(walletNode.getWallet()) ? ScriptType.P2PKH : scriptType;
|
||||||
|
}
|
||||||
|
|
||||||
private void setFormatFromScriptType(ScriptType scriptType) {
|
private void setFormatFromScriptType(ScriptType scriptType) {
|
||||||
formatElectrum.setDisable(scriptType == ScriptType.P2TR);
|
formatElectrum.setDisable(scriptType == ScriptType.P2TR);
|
||||||
formatTrezor.setDisable(scriptType == ScriptType.P2TR || scriptType == ScriptType.P2PKH);
|
formatTrezor.setDisable(scriptType == ScriptType.P2TR || scriptType == ScriptType.P2PKH);
|
||||||
|
|
@ -345,7 +357,7 @@ public class MessageSignDialog extends Dialog<ButtonBar.ButtonData> {
|
||||||
|
|
||||||
//Note we can expect a single keystore due to the check in the constructor
|
//Note we can expect a single keystore due to the check in the constructor
|
||||||
Wallet signingWallet = walletNode.getWallet();
|
Wallet signingWallet = walletNode.getWallet();
|
||||||
if(signingWallet.getKeystores().get(0).hasPrivateKey()) {
|
if(signingWallet.getKeystores().getFirst().hasPrivateKey()) {
|
||||||
if(signingWallet.isEncrypted()) {
|
if(signingWallet.isEncrypted()) {
|
||||||
EventManager.get().post(new RequestOpenWalletsEvent());
|
EventManager.get().post(new RequestOpenWalletsEvent());
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -358,7 +370,7 @@ public class MessageSignDialog extends Dialog<ButtonBar.ButtonData> {
|
||||||
|
|
||||||
private void signUnencryptedKeystore(Wallet decryptedWallet) {
|
private void signUnencryptedKeystore(Wallet decryptedWallet) {
|
||||||
try {
|
try {
|
||||||
Keystore keystore = decryptedWallet.getKeystores().get(0);
|
Keystore keystore = decryptedWallet.getKeystores().getFirst();
|
||||||
ECKey privKey = keystore.getKey(walletNode);
|
ECKey privKey = keystore.getKey(walletNode);
|
||||||
String signatureText;
|
String signatureText;
|
||||||
if(isBip322()) {
|
if(isBip322()) {
|
||||||
|
|
@ -378,8 +390,8 @@ public class MessageSignDialog extends Dialog<ButtonBar.ButtonData> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void signDeviceKeystore(Wallet deviceWallet) {
|
private void signDeviceKeystore(Wallet deviceWallet) {
|
||||||
List<String> fingerprints = List.of(deviceWallet.getKeystores().get(0).getKeyDerivation().getMasterFingerprint());
|
List<String> fingerprints = List.of(deviceWallet.getKeystores().getFirst().getKeyDerivation().getMasterFingerprint());
|
||||||
KeyDerivation fullDerivation = deviceWallet.getKeystores().get(0).getKeyDerivation().extend(walletNode.getDerivation());
|
KeyDerivation fullDerivation = deviceWallet.getKeystores().getFirst().getKeyDerivation().extend(walletNode.getDerivation());
|
||||||
DeviceSignMessageDialog deviceSignMessageDialog = new DeviceSignMessageDialog(fingerprints, deviceWallet, message.getText().trim(), fullDerivation);
|
DeviceSignMessageDialog deviceSignMessageDialog = new DeviceSignMessageDialog(fingerprints, deviceWallet, message.getText().trim(), fullDerivation);
|
||||||
deviceSignMessageDialog.initOwner(getDialogPane().getScene().getWindow());
|
deviceSignMessageDialog.initOwner(getDialogPane().getScene().getWindow());
|
||||||
Optional<String> optSignature = deviceSignMessageDialog.showAndWait();
|
Optional<String> optSignature = deviceSignMessageDialog.showAndWait();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue