From 5df4e5761c27a5775cfc59e5593d2639886383f9 Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Wed, 16 Jun 2021 14:46:55 +0200 Subject: [PATCH] add seedsigner keystore import --- drongo | 2 +- .../sparrow/control/WalletImportDialog.java | 2 +- .../sparrowwallet/sparrow/io/SeedSigner.java | 20 ++++++++++++++++++ .../keystoreimport/HwAirgappedController.java | 4 ++-- src/main/resources/image/seedsigner.png | Bin 0 -> 2632 bytes src/main/resources/image/seedsigner@2x.png | Bin 0 -> 4550 bytes src/main/resources/image/seedsigner@3x.png | Bin 0 -> 8775 bytes 7 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/sparrowwallet/sparrow/io/SeedSigner.java create mode 100644 src/main/resources/image/seedsigner.png create mode 100644 src/main/resources/image/seedsigner@2x.png create mode 100644 src/main/resources/image/seedsigner@3x.png diff --git a/drongo b/drongo index 729c3a14..5e8a1467 160000 --- a/drongo +++ b/drongo @@ -1 +1 @@ -Subproject commit 729c3a1435ccf3f47db456a04c964cacd853a770 +Subproject commit 5e8a14678d264dfc5e30cc594f60a6f7f87292ef diff --git a/src/main/java/com/sparrowwallet/sparrow/control/WalletImportDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/WalletImportDialog.java index aa511b91..1a384509 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/WalletImportDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/WalletImportDialog.java @@ -47,7 +47,7 @@ public class WalletImportDialog extends Dialog { AnchorPane.setRightAnchor(scrollPane, 0.0); importAccordion = new Accordion(); - List keystoreImporters = List.of(new ColdcardSinglesig(), new CoboVaultSinglesig(), new KeystoneSinglesig(), new PassportSinglesig()); + List keystoreImporters = List.of(new ColdcardSinglesig(), new CoboVaultSinglesig(), new KeystoneSinglesig(), new PassportSinglesig(), new SeedSigner(), new SpecterDIY()); for(KeystoreFileImport importer : keystoreImporters) { FileWalletKeystoreImportPane importPane = new FileWalletKeystoreImportPane(importer); importAccordion.getPanes().add(importPane); diff --git a/src/main/java/com/sparrowwallet/sparrow/io/SeedSigner.java b/src/main/java/com/sparrowwallet/sparrow/io/SeedSigner.java new file mode 100644 index 00000000..b5a11250 --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/io/SeedSigner.java @@ -0,0 +1,20 @@ +package com.sparrowwallet.sparrow.io; + +import com.sparrowwallet.drongo.wallet.WalletModel; + +public class SeedSigner extends SpecterDIY { + @Override + public String getName() { + return "SeedSigner"; + } + + @Override + public String getKeystoreImportDescription() { + return "Import QR created on your SeedSigner by selecting Generate XPUB in the Signing Tools menu. Note that SeedSigner currently only supports P2WSH Multisig wallets."; + } + + @Override + public WalletModel getWalletModel() { + return WalletModel.SEEDSIGNER; + } +} diff --git a/src/main/java/com/sparrowwallet/sparrow/keystoreimport/HwAirgappedController.java b/src/main/java/com/sparrowwallet/sparrow/keystoreimport/HwAirgappedController.java index 16432a65..3d8cfb4a 100644 --- a/src/main/java/com/sparrowwallet/sparrow/keystoreimport/HwAirgappedController.java +++ b/src/main/java/com/sparrowwallet/sparrow/keystoreimport/HwAirgappedController.java @@ -16,9 +16,9 @@ public class HwAirgappedController extends KeystoreImportDetailController { public void initializeView() { List importers = Collections.emptyList(); if(getMasterController().getWallet().getPolicyType().equals(PolicyType.SINGLE)) { - importers = List.of(new ColdcardSinglesig(), new CoboVaultSinglesig(), new KeystoneSinglesig(), new PassportSinglesig(), new SpecterDIY()); + importers = List.of(new ColdcardSinglesig(), new CoboVaultSinglesig(), new KeystoneSinglesig(), new PassportSinglesig(), new SeedSigner(), new SpecterDIY()); } else if(getMasterController().getWallet().getPolicyType().equals(PolicyType.MULTI)) { - importers = List.of(new ColdcardMultisig(), new CoboVaultMultisig(), new KeystoneMultisig(), new PassportMultisig(), new SpecterDIY()); + importers = List.of(new ColdcardMultisig(), new CoboVaultMultisig(), new KeystoneMultisig(), new PassportMultisig(), new SeedSigner(), new SpecterDIY()); } for(KeystoreImport importer : importers) { diff --git a/src/main/resources/image/seedsigner.png b/src/main/resources/image/seedsigner.png new file mode 100644 index 0000000000000000000000000000000000000000..6aabf31c0528fabd446cd4a3ebd707c67a4cfc55 GIT binary patch literal 2632 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 literal 0 HcmV?d00001