Search in sources :

Example 41 with Keystore

use of com.sparrowwallet.drongo.wallet.Keystore in project sparrow by sparrowwallet.

the class PassportMultisig method getKeystore.

@Override
public Keystore getKeystore(ScriptType scriptType, InputStream inputStream, String password) throws ImportException {
    Keystore keystore = super.getKeystore(scriptType, inputStream, password);
    keystore.setLabel("Passport");
    keystore.setWalletModel(getWalletModel());
    return keystore;
}
Also used : Keystore(com.sparrowwallet.drongo.wallet.Keystore)

Example 42 with Keystore

use of com.sparrowwallet.drongo.wallet.Keystore in project sparrow by sparrowwallet.

the class PassportSinglesig method getKeystore.

@Override
public Keystore getKeystore(ScriptType scriptType, InputStream inputStream, String password) throws ImportException {
    Keystore keystore = super.getKeystore(scriptType, inputStream, password);
    keystore.setLabel("Passport");
    keystore.setWalletModel(getWalletModel());
    return keystore;
}
Also used : Keystore(com.sparrowwallet.drongo.wallet.Keystore)

Example 43 with Keystore

use of com.sparrowwallet.drongo.wallet.Keystore in project sparrow by sparrowwallet.

the class XprvKeystoreImportPane method importKeystore.

private void importKeystore(List<ChildNumber> derivation) {
    importButton.setDisable(true);
    try {
        Keystore keystore = importer.getKeystore(derivation, xprv);
        EventManager.get().post(new KeystoreImportEvent(keystore));
    } catch (ImportException e) {
        String errorMessage = e.getMessage();
        if (e.getCause() != null && e.getCause().getMessage() != null && !e.getCause().getMessage().isEmpty()) {
            errorMessage = e.getCause().getMessage();
        }
        setError("Import Error", errorMessage);
        importButton.setDisable(false);
    }
}
Also used : Keystore(com.sparrowwallet.drongo.wallet.Keystore) ImportException(com.sparrowwallet.sparrow.io.ImportException) KeystoreImportEvent(com.sparrowwallet.sparrow.event.KeystoreImportEvent)

Example 44 with Keystore

use of com.sparrowwallet.drongo.wallet.Keystore in project sparrow by sparrowwallet.

the class ColdcardMultisig method exportWallet.

@Override
public void exportWallet(Wallet wallet, OutputStream outputStream) throws ExportException {
    if (!wallet.isValid()) {
        throw new ExportException("Cannot export an incomplete wallet");
    }
    if (!wallet.getPolicyType().equals(PolicyType.MULTI)) {
        throw new ExportException(getName() + " import requires a multisig wallet");
    }
    boolean multipleDerivations = false;
    Set<String> derivationSet = new HashSet<>();
    for (Keystore keystore : wallet.getKeystores()) {
        derivationSet.add(keystore.getKeyDerivation().getDerivationPath());
    }
    if (derivationSet.size() > 1) {
        multipleDerivations = true;
    }
    try {
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8));
        writer.append("# " + getName() + " setup file (created by Sparrow)\n");
        writer.append("#\n");
        writer.append("Name: ").append(wallet.getFullName()).append("\n");
        writer.append("Policy: ").append(Integer.toString(wallet.getDefaultPolicy().getNumSignaturesRequired())).append(" of ").append(Integer.toString(wallet.getKeystores().size())).append("\n");
        if (!multipleDerivations) {
            writer.append("Derivation: ").append(wallet.getKeystores().get(0).getKeyDerivation().getDerivationPath()).append("\n");
        }
        writer.append("Format: ").append(wallet.getScriptType().toString().replace("P2SH-P2WSH", "P2WSH-P2SH")).append("\n");
        writer.append("\n");
        for (Keystore keystore : wallet.getKeystores()) {
            if (multipleDerivations) {
                writer.append("Derivation: ").append(keystore.getKeyDerivation().getDerivationPath()).append("\n");
            }
            writer.append(keystore.getKeyDerivation().getMasterFingerprint().toUpperCase()).append(": ").append(keystore.getExtendedPublicKey().toString()).append("\n");
            if (multipleDerivations) {
                writer.append("\n");
            }
        }
        writer.flush();
    } catch (Exception e) {
        log.error("Error exporting " + getName() + " wallet", e);
        throw new ExportException("Error exporting " + getName() + " wallet", e);
    }
}
Also used : Keystore(com.sparrowwallet.drongo.wallet.Keystore) HashSet(java.util.HashSet)

Example 45 with Keystore

use of com.sparrowwallet.drongo.wallet.Keystore in project sparrow by sparrowwallet.

the class ColdcardMultisig method importWallet.

@Override
public Wallet importWallet(InputStream inputStream, String password) throws ImportException {
    Wallet wallet = new Wallet();
    wallet.setPolicyType(PolicyType.MULTI);
    int threshold = 2;
    ScriptType scriptType = ScriptType.P2SH;
    String derivation = null;
    try {
        List<String> lines = CharStreams.readLines(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
        for (String line : lines) {
            line = line.trim();
            if (line.isEmpty()) {
                continue;
            }
            String[] keyValue = line.split(":");
            if (keyValue.length == 2) {
                String key = keyValue[0].trim();
                String value = keyValue[1].trim();
                switch(key) {
                    case "Name":
                        wallet.setName(value.trim());
                        break;
                    case "Policy":
                        threshold = Integer.parseInt(value.split(" ")[0]);
                        break;
                    case "Derivation":
                    case "# derivation":
                        derivation = value;
                        break;
                    case "Format":
                        scriptType = ScriptType.valueOf(value.replace("P2WSH-P2SH", "P2SH_P2WSH"));
                        break;
                    default:
                        if (key.length() == 8 && Utils.isHex(key)) {
                            Keystore keystore = new Keystore("Coldcard");
                            keystore.setSource(KeystoreSource.HW_AIRGAPPED);
                            keystore.setWalletModel(WalletModel.COLDCARD);
                            keystore.setKeyDerivation(new KeyDerivation(key, derivation));
                            keystore.setExtendedPublicKey(ExtendedKey.fromDescriptor(value));
                            wallet.makeLabelsUnique(keystore);
                            wallet.getKeystores().add(keystore);
                        }
                }
            }
        }
        Policy policy = Policy.getPolicy(PolicyType.MULTI, scriptType, wallet.getKeystores(), threshold);
        wallet.setDefaultPolicy(policy);
        wallet.setScriptType(scriptType);
        if (!wallet.isValid()) {
            throw new IllegalStateException("This file does not describe a valid wallet. " + getKeystoreImportDescription());
        }
        return wallet;
    } catch (Exception e) {
        throw new ImportException("Error importing " + getName() + " wallet", e);
    }
}
Also used : Policy(com.sparrowwallet.drongo.policy.Policy) ScriptType(com.sparrowwallet.drongo.protocol.ScriptType) Wallet(com.sparrowwallet.drongo.wallet.Wallet) KeyDerivation(com.sparrowwallet.drongo.KeyDerivation) Keystore(com.sparrowwallet.drongo.wallet.Keystore)

Aggregations

Keystore (com.sparrowwallet.drongo.wallet.Keystore)47 Wallet (com.sparrowwallet.drongo.wallet.Wallet)14 Test (org.junit.Test)12 KeyDerivation (com.sparrowwallet.drongo.KeyDerivation)5 ScriptType (com.sparrowwallet.drongo.protocol.ScriptType)5 ImportException (com.sparrowwallet.sparrow.io.ImportException)4 ECKey (com.sparrowwallet.drongo.crypto.ECKey)3 ArrayList (java.util.ArrayList)3 Subscribe (com.google.common.eventbus.Subscribe)2 com.sparrowwallet.drongo.protocol (com.sparrowwallet.drongo.protocol)2 PSBTInput (com.sparrowwallet.drongo.psbt.PSBTInput)2 BlockTransaction (com.sparrowwallet.drongo.wallet.BlockTransaction)2 DeterministicSeed (com.sparrowwallet.drongo.wallet.DeterministicSeed)2 MasterPrivateExtendedKey (com.sparrowwallet.drongo.wallet.MasterPrivateExtendedKey)2 WalletModel (com.sparrowwallet.drongo.wallet.WalletModel)2 EventManager (com.sparrowwallet.sparrow.EventManager)2 KeystoreImportEvent (com.sparrowwallet.sparrow.event.KeystoreImportEvent)2 URL (java.net.URL)2 Map (java.util.Map)2 ResourceBundle (java.util.ResourceBundle)2