Search in sources :

Example 6 with Keystore

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

the class CaravanMultisig method importWallet.

@Override
public Wallet importWallet(InputStream inputStream, String password) throws ImportException {
    try {
        InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
        CaravanFile cf = JsonPersistence.getGson().fromJson(reader, CaravanFile.class);
        Wallet wallet = new Wallet();
        wallet.setName(cf.name);
        wallet.setPolicyType(PolicyType.MULTI);
        ScriptType scriptType = ScriptType.valueOf(cf.addressType.replace('-', '_'));
        for (ExtPublicKey extKey : cf.extendedPublicKeys) {
            Keystore keystore = new Keystore(extKey.name);
            try {
                keystore.setKeyDerivation(new KeyDerivation(extKey.xfp, extKey.bip32Path));
            } catch (NumberFormatException e) {
                keystore.setKeyDerivation(new KeyDerivation(extKey.xfp, scriptType.getDefaultDerivationPath()));
            }
            keystore.setExtendedPublicKey(ExtendedKey.fromDescriptor(extKey.xpub));
            WalletModel walletModel = WalletModel.fromType(extKey.method);
            if (walletModel == null) {
                keystore.setWalletModel(WalletModel.SPARROW);
                keystore.setSource(KeystoreSource.SW_WATCH);
            } else {
                keystore.setWalletModel(walletModel);
                keystore.setSource(KeystoreSource.HW_USB);
            }
            wallet.getKeystores().add(keystore);
        }
        wallet.setScriptType(scriptType);
        wallet.setDefaultPolicy(Policy.getPolicy(PolicyType.MULTI, scriptType, wallet.getKeystores(), cf.quorum.requiredSigners));
        return wallet;
    } catch (Exception e) {
        throw new ImportException("Error importing " + getName() + " wallet", e);
    }
}
Also used : Keystore(com.sparrowwallet.drongo.wallet.Keystore) ScriptType(com.sparrowwallet.drongo.protocol.ScriptType) WalletModel(com.sparrowwallet.drongo.wallet.WalletModel) InputStreamReader(java.io.InputStreamReader) Wallet(com.sparrowwallet.drongo.wallet.Wallet) KeyDerivation(com.sparrowwallet.drongo.KeyDerivation)

Example 7 with Keystore

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

the class KeystoneMultisig method getKeystore.

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

Example 8 with Keystore

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

the class CoboVaultMultisig method getKeystore.

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

Example 9 with Keystore

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

the class CoboVaultMultisig method importWallet.

@Override
public Wallet importWallet(InputStream inputStream, String password) throws ImportException {
    Wallet wallet = super.importWallet(inputStream, password);
    for (Keystore keystore : wallet.getKeystores()) {
        keystore.setLabel(keystore.getLabel().replace("Coldcard", "Cobo Vault"));
        keystore.setWalletModel(WalletModel.COBO_VAULT);
    }
    return wallet;
}
Also used : Keystore(com.sparrowwallet.drongo.wallet.Keystore) Wallet(com.sparrowwallet.drongo.wallet.Wallet)

Example 10 with Keystore

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

the class ColdcardMultisig method getKeystore.

@Override
public Keystore getKeystore(ScriptType scriptType, InputStream inputStream, String password) throws ImportException {
    InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
    ColdcardKeystore cck = JsonPersistence.getGson().fromJson(reader, ColdcardKeystore.class);
    Keystore keystore = new Keystore("Coldcard");
    keystore.setSource(KeystoreSource.HW_AIRGAPPED);
    keystore.setWalletModel(WalletModel.COLDCARD);
    try {
        if (cck.xpub != null && cck.path != null) {
            ExtendedKey.Header header = ExtendedKey.Header.fromExtendedKey(cck.xpub);
            if (header.getDefaultScriptType() != scriptType) {
                throw new ImportException("This wallet's script type (" + scriptType + ") does not match the " + getName() + " script type (" + header.getDefaultScriptType() + ")");
            }
            keystore.setKeyDerivation(new KeyDerivation(cck.xfp, cck.path));
            keystore.setExtendedPublicKey(ExtendedKey.fromDescriptor(cck.xpub));
        } else if (scriptType.equals(ScriptType.P2SH)) {
            keystore.setKeyDerivation(new KeyDerivation(cck.xfp, cck.p2sh_deriv));
            keystore.setExtendedPublicKey(ExtendedKey.fromDescriptor(cck.p2sh));
        } else if (scriptType.equals(ScriptType.P2SH_P2WSH)) {
            keystore.setKeyDerivation(new KeyDerivation(cck.xfp, cck.p2wsh_p2sh_deriv != null ? cck.p2wsh_p2sh_deriv : cck.p2sh_p2wsh_deriv));
            keystore.setExtendedPublicKey(ExtendedKey.fromDescriptor(cck.p2wsh_p2sh != null ? cck.p2wsh_p2sh : cck.p2sh_p2wsh));
        } else if (scriptType.equals(ScriptType.P2WSH)) {
            keystore.setKeyDerivation(new KeyDerivation(cck.xfp, cck.p2wsh_deriv));
            keystore.setExtendedPublicKey(ExtendedKey.fromDescriptor(cck.p2wsh));
        } else {
            throw new ImportException("Correct derivation not found for script type: " + scriptType);
        }
    } catch (NullPointerException e) {
        throw new ImportException("Correct derivation not found for script type: " + scriptType);
    }
    return keystore;
}
Also used : Keystore(com.sparrowwallet.drongo.wallet.Keystore) KeyDerivation(com.sparrowwallet.drongo.KeyDerivation) ExtendedKey(com.sparrowwallet.drongo.ExtendedKey)

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