Search in sources :

Example 36 with Keystore

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

the class FileWalletKeystoreImportPane method importWallet.

private void importWallet(ScriptType scriptType) throws ImportException {
    if (wallets != null && !wallets.isEmpty()) {
        Wallet wallet = wallets.stream().filter(wallet1 -> wallet1.getScriptType() == scriptType).findFirst().orElseThrow(ImportException::new);
        wallet.setName(importer.getName());
        wallet.setPolicyType(PolicyType.SINGLE);
        wallet.setDefaultPolicy(Policy.getPolicy(PolicyType.SINGLE, wallet.getScriptType(), wallet.getKeystores(), null));
        EventManager.get().post(new WalletImportEvent(wallet));
    } else {
        ByteArrayInputStream bais = new ByteArrayInputStream(fileBytes);
        Keystore keystore = importer.getKeystore(scriptType, bais, "");
        Wallet wallet = new Wallet();
        wallet.setName(Files.getNameWithoutExtension(fileName));
        wallet.setPolicyType(PolicyType.SINGLE);
        wallet.setScriptType(scriptType);
        wallet.getKeystores().add(keystore);
        wallet.setDefaultPolicy(Policy.getPolicy(PolicyType.SINGLE, scriptType, wallet.getKeystores(), null));
        EventManager.get().post(new WalletImportEvent(wallet));
    }
}
Also used : ImportException(com.sparrowwallet.sparrow.io.ImportException) Keystore(com.sparrowwallet.drongo.wallet.Keystore) WalletImportEvent(com.sparrowwallet.sparrow.event.WalletImportEvent) ByteArrayInputStream(java.io.ByteArrayInputStream) Wallet(com.sparrowwallet.drongo.wallet.Wallet)

Example 37 with Keystore

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

the class DescriptorArea method setWallet.

public void setWallet(Wallet wallet) {
    clear();
    this.wallet = wallet;
    DescriptorContextMenu contextMenu = new DescriptorContextMenu(wallet, this);
    setContextMenu(contextMenu);
    PolicyType policyType = wallet.getPolicyType();
    ScriptType scriptType = wallet.getScriptType();
    List<Keystore> keystores = wallet.getKeystores();
    int threshold = wallet.getDefaultPolicy().getNumSignaturesRequired();
    if (SINGLE.equals(policyType)) {
        append(scriptType.getDescriptor(), "descriptor-text");
        replace(getLength(), getLength(), keystores.get(0).getScriptName(), List.of(keystores.get(0).isValid() ? "descriptor-text" : "descriptor-error", keystores.get(0).getScriptName()));
        append(scriptType.getCloseDescriptor(), "descriptor-text");
    }
    if (MULTI.equals(policyType)) {
        append(scriptType.getDescriptor(), "descriptor-text");
        append(MULTISIG.getDescriptor(), "descriptor-text");
        append(Integer.toString(threshold), "descriptor-text");
        for (Keystore keystore : keystores) {
            append(",", "descriptor-text");
            replace(getLength(), getLength(), keystore.getScriptName(), List.of(keystore.isValid() ? "descriptor-text" : "descriptor-error", keystore.getScriptName()));
        }
        append(MULTISIG.getCloseDescriptor(), "descriptor-text");
        append(scriptType.getCloseDescriptor(), "descriptor-text");
    }
}
Also used : Keystore(com.sparrowwallet.drongo.wallet.Keystore) PolicyType(com.sparrowwallet.drongo.policy.PolicyType) ScriptType(com.sparrowwallet.drongo.protocol.ScriptType)

Example 38 with Keystore

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

the class BaseController method initializeDescriptorField.

protected void initializeDescriptorField(DescriptorArea descriptorArea) {
    Popup popup = new Popup();
    Label popupMsg = new Label();
    popupMsg.getStyleClass().add("tooltip");
    popup.getContent().add(popupMsg);
    descriptorArea.setMouseOverTextDelay(Duration.ofMillis(150));
    descriptorArea.addEventHandler(MouseOverTextEvent.MOUSE_OVER_TEXT_BEGIN, e -> {
        TwoDimensional.Position position = descriptorArea.getParagraph(0).getStyleSpans().offsetToPosition(e.getCharacterIndex(), Backward);
        int index = descriptorArea.getWallet().getPolicyType() == PolicyType.SINGLE ? position.getMajor() - 1 : ((position.getMajor() - 1) / 2);
        if (position.getMajor() > 0 && index >= 0 && index < descriptorArea.getWallet().getKeystores().size()) {
            Keystore hoverKeystore = descriptorArea.getWallet().getKeystores().get(index);
            Point2D pos = e.getScreenPosition();
            popupMsg.setText(describeKeystore(hoverKeystore));
            popup.show(descriptorArea, pos.getX(), pos.getY() + 10);
        }
    });
    descriptorArea.addEventHandler(MouseOverTextEvent.MOUSE_OVER_TEXT_END, e -> {
        popup.hide();
    });
}
Also used : Keystore(com.sparrowwallet.drongo.wallet.Keystore) TwoDimensional(org.fxmisc.richtext.model.TwoDimensional) Point2D(javafx.geometry.Point2D) Popup(javafx.stage.Popup) Label(javafx.scene.control.Label)

Example 39 with Keystore

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

the class SpecterDIY method getKeystore.

@Override
public Keystore getKeystore(ScriptType scriptType, InputStream inputStream, String password) throws ImportException {
    try {
        String text = CharStreams.toString(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
        String outputDesc = "sh(" + text + ")";
        OutputDescriptor outputDescriptor = OutputDescriptor.getOutputDescriptor(outputDesc);
        Wallet wallet = outputDescriptor.toWallet();
        if (wallet.getKeystores().size() != 1) {
            throw new ImportException("Could not determine keystore from import");
        }
        Keystore keystore = wallet.getKeystores().get(0);
        keystore.setLabel(getName());
        keystore.setWalletModel(getWalletModel());
        keystore.setSource(KeystoreSource.HW_AIRGAPPED);
        return keystore;
    } catch (IOException e) {
        throw new ImportException("Error getting " + getName() + " keystore", e);
    }
}
Also used : Keystore(com.sparrowwallet.drongo.wallet.Keystore) OutputDescriptor(com.sparrowwallet.drongo.OutputDescriptor) Wallet(com.sparrowwallet.drongo.wallet.Wallet)

Example 40 with Keystore

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

the class KeystoreDao method addKeystores.

default void addKeystores(Wallet wallet) {
    for (int i = 0; i < wallet.getKeystores().size(); i++) {
        Keystore keystore = wallet.getKeystores().get(i);
        if (keystore.hasMasterPrivateExtendedKey()) {
            MasterPrivateExtendedKey mpek = keystore.getMasterPrivateExtendedKey();
            if (mpek.isEncrypted()) {
                EncryptedData data = mpek.getEncryptedData();
                long id = insertMasterPrivateExtendedKey(null, null, data.getInitialisationVector(), data.getEncryptedBytes(), data.getKeySalt(), data.getEncryptionType().getDeriver().ordinal(), data.getEncryptionType().getCrypter().ordinal(), mpek.getCreationTimeSeconds());
                mpek.setId(id);
            } else {
                long id = insertMasterPrivateExtendedKey(mpek.getPrivateKey().getPrivKeyBytes(), mpek.getPrivateKey().getChainCode(), null, null, null, null, null, mpek.getCreationTimeSeconds());
                mpek.setId(id);
            }
        }
        if (keystore.hasSeed()) {
            DeterministicSeed seed = keystore.getSeed();
            if (seed.isEncrypted()) {
                EncryptedData data = seed.getEncryptedData();
                long id = insertSeed(seed.getType().ordinal(), null, data.getInitialisationVector(), data.getEncryptedBytes(), data.getKeySalt(), data.getEncryptionType().getDeriver().ordinal(), data.getEncryptionType().getCrypter().ordinal(), seed.needsPassphrase(), seed.getCreationTimeSeconds());
                seed.setId(id);
            } else {
                long id = insertSeed(seed.getType().ordinal(), seed.getMnemonicString().asString(), null, null, null, null, null, seed.needsPassphrase(), seed.getCreationTimeSeconds());
                seed.setId(id);
            }
        }
        long id = insert(truncate(keystore.getLabel()), keystore.getSource().ordinal(), keystore.getWalletModel().ordinal(), keystore.hasMasterPrivateKey() ? null : keystore.getKeyDerivation().getMasterFingerprint(), keystore.getKeyDerivation().getDerivationPath(), keystore.hasMasterPrivateKey() ? null : keystore.getExtendedPublicKey().toString(), keystore.getExternalPaymentCode() == null ? null : keystore.getExternalPaymentCode().toString(), keystore.getMasterPrivateExtendedKey() == null ? null : keystore.getMasterPrivateExtendedKey().getId(), keystore.getSeed() == null ? null : keystore.getSeed().getId(), wallet.getId(), i);
        keystore.setId(id);
    }
}
Also used : Keystore(com.sparrowwallet.drongo.wallet.Keystore) DeterministicSeed(com.sparrowwallet.drongo.wallet.DeterministicSeed) EncryptedData(com.sparrowwallet.drongo.crypto.EncryptedData) MasterPrivateExtendedKey(com.sparrowwallet.drongo.wallet.MasterPrivateExtendedKey)

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