Search in sources :

Example 1 with SecureString

use of com.sparrowwallet.drongo.SecureString in project drongo by sparrowwallet.

the class DeterministicSeed method getMnemonicAsBytes.

private byte[] getMnemonicAsBytes() {
    SecureString mnemonicString = getMnemonicString();
    if (mnemonicString == null) {
        return null;
    }
    byte[] mnemonicBytes = SecureString.toBytesUTF8(mnemonicString);
    mnemonicString.clear();
    return mnemonicBytes;
}
Also used : SecureString(com.sparrowwallet.drongo.SecureString)

Example 2 with SecureString

use of com.sparrowwallet.drongo.SecureString in project sparrow by sparrowwallet.

the class MessageSignDialog method openWallets.

@Subscribe
public void openWallets(OpenWalletsEvent event) {
    Storage storage = event.getStorage(wallet);
    if (storage == null) {
        // Another window, ignore
        return;
    }
    WalletPasswordDialog dlg = new WalletPasswordDialog(wallet.getMasterName(), WalletPasswordDialog.PasswordRequirement.LOAD);
    Optional<SecureString> password = dlg.showAndWait();
    if (password.isPresent()) {
        Storage.DecryptWalletService decryptWalletService = new Storage.DecryptWalletService(walletNode.getWallet().copy(), password.get());
        decryptWalletService.setOnSucceeded(workerStateEvent -> {
            EventManager.get().post(new StorageEvent(storage.getWalletId(wallet), TimedEvent.Action.END, "Done"));
            Wallet decryptedWallet = decryptWalletService.getValue();
            signUnencryptedKeystore(decryptedWallet);
            decryptedWallet.clearPrivate();
        });
        decryptWalletService.setOnFailed(workerStateEvent -> {
            EventManager.get().post(new StorageEvent(storage.getWalletId(wallet), TimedEvent.Action.END, "Failed"));
            AppServices.showErrorDialog("Incorrect Password", decryptWalletService.getException().getMessage());
        });
        EventManager.get().post(new StorageEvent(storage.getWalletId(wallet), TimedEvent.Action.START, "Decrypting wallet..."));
        decryptWalletService.start();
    }
}
Also used : Storage(com.sparrowwallet.sparrow.io.Storage) StorageEvent(com.sparrowwallet.sparrow.event.StorageEvent) Wallet(com.sparrowwallet.drongo.wallet.Wallet) SecureString(com.sparrowwallet.drongo.SecureString) Subscribe(com.google.common.eventbus.Subscribe)

Example 3 with SecureString

use of com.sparrowwallet.drongo.SecureString in project sparrow by sparrowwallet.

the class FileWalletExportPane method exportWallet.

private void exportWallet(File file) {
    if (wallet.isEncrypted() && exporter.walletExportRequiresDecryption()) {
        Wallet copy = wallet.copy();
        WalletPasswordDialog dlg = new WalletPasswordDialog(wallet.getMasterName(), WalletPasswordDialog.PasswordRequirement.LOAD);
        Optional<SecureString> password = dlg.showAndWait();
        if (password.isPresent()) {
            final String walletId = AppServices.get().getOpenWallets().get(wallet).getWalletId(wallet);
            Storage.DecryptWalletService decryptWalletService = new Storage.DecryptWalletService(copy, password.get());
            decryptWalletService.setOnSucceeded(workerStateEvent -> {
                EventManager.get().post(new StorageEvent(walletId, TimedEvent.Action.END, "Done"));
                Wallet decryptedWallet = decryptWalletService.getValue();
                try {
                    exportWallet(file, decryptedWallet);
                } finally {
                    decryptedWallet.clearPrivate();
                }
            });
            decryptWalletService.setOnFailed(workerStateEvent -> {
                EventManager.get().post(new StorageEvent(walletId, TimedEvent.Action.END, "Failed"));
                setError("Export Error", decryptWalletService.getException().getMessage());
            });
            EventManager.get().post(new StorageEvent(walletId, TimedEvent.Action.START, "Decrypting wallet..."));
            decryptWalletService.start();
        }
    } else {
        exportWallet(file, wallet);
    }
}
Also used : StorageEvent(com.sparrowwallet.sparrow.event.StorageEvent) Wallet(com.sparrowwallet.drongo.wallet.Wallet) SecureString(com.sparrowwallet.drongo.SecureString) SecureString(com.sparrowwallet.drongo.SecureString)

Example 4 with SecureString

use of com.sparrowwallet.drongo.SecureString in project sparrow by sparrowwallet.

the class PayNymController method addWalletIfNotificationTransactionPresent.

private void addWalletIfNotificationTransactionPresent(List<PayNym> following) {
    Map<BlockTransaction, PayNym> unlinkedPayNyms = new HashMap<>();
    Map<BlockTransaction, WalletNode> unlinkedNotifications = new HashMap<>();
    for (PayNym payNym : following) {
        if (!isLinked(payNym)) {
            PaymentCode externalPaymentCode = payNym.paymentCode();
            Map<BlockTransaction, WalletNode> unlinkedNotification = getMasterWallet().getNotificationTransaction(externalPaymentCode);
            if (!unlinkedNotification.isEmpty() && !INVALID_PAYMENT_CODE_LABEL.equals(unlinkedNotification.keySet().iterator().next().getLabel())) {
                unlinkedNotifications.putAll(unlinkedNotification);
                unlinkedPayNyms.put(unlinkedNotification.keySet().iterator().next(), payNym);
            }
        }
    }
    Wallet wallet = getMasterWallet();
    if (!unlinkedNotifications.isEmpty()) {
        if (wallet.isEncrypted()) {
            Storage storage = AppServices.get().getOpenWallets().get(wallet);
            Optional<ButtonType> optButtonType = AppServices.showAlertDialog("Link contacts?", "Some contacts were found that may be already linked. Link these contacts? Your password is required to check.", Alert.AlertType.CONFIRMATION, ButtonType.NO, ButtonType.YES);
            if (optButtonType.isPresent() && optButtonType.get() == ButtonType.YES) {
                WalletPasswordDialog dlg = new WalletPasswordDialog(wallet.getMasterName(), WalletPasswordDialog.PasswordRequirement.LOAD);
                Optional<SecureString> password = dlg.showAndWait();
                if (password.isPresent()) {
                    Storage.DecryptWalletService decryptWalletService = new Storage.DecryptWalletService(wallet.copy(), password.get());
                    decryptWalletService.setOnSucceeded(workerStateEvent -> {
                        EventManager.get().post(new StorageEvent(storage.getWalletId(wallet), TimedEvent.Action.END, "Done"));
                        Wallet decryptedWallet = decryptWalletService.getValue();
                        addWalletIfNotificationTransactionPresent(decryptedWallet, unlinkedPayNyms, unlinkedNotifications);
                        decryptedWallet.clearPrivate();
                    });
                    decryptWalletService.setOnFailed(workerStateEvent -> {
                        EventManager.get().post(new StorageEvent(storage.getWalletId(wallet), TimedEvent.Action.END, "Failed"));
                        AppServices.showErrorDialog("Incorrect Password", decryptWalletService.getException().getMessage());
                    });
                    EventManager.get().post(new StorageEvent(storage.getWalletId(wallet), TimedEvent.Action.START, "Decrypting wallet..."));
                    decryptWalletService.start();
                }
            }
        } else {
            addWalletIfNotificationTransactionPresent(wallet, unlinkedPayNyms, unlinkedNotifications);
        }
    }
}
Also used : PaymentCode(com.sparrowwallet.drongo.bip47.PaymentCode) Storage(com.sparrowwallet.sparrow.io.Storage) SecureString(com.sparrowwallet.drongo.SecureString)

Example 5 with SecureString

use of com.sparrowwallet.drongo.SecureString in project sparrow by sparrowwallet.

the class InitiatorDialog method acceptAndBroadcast.

private void acceptAndBroadcast(InitiatorController initiatorController, String walletId, Wallet wallet) {
    if (confirmationRequired && wallet.isEncrypted()) {
        WalletPasswordDialog dlg = new WalletPasswordDialog(wallet.getMasterName(), WalletPasswordDialog.PasswordRequirement.LOAD);
        Optional<SecureString> password = dlg.showAndWait();
        if (password.isPresent()) {
            Storage storage = AppServices.get().getOpenWallets().get(wallet);
            Storage.KeyDerivationService keyDerivationService = new Storage.KeyDerivationService(storage, password.get(), true);
            keyDerivationService.setOnSucceeded(workerStateEvent -> {
                EventManager.get().post(new StorageEvent(walletId, TimedEvent.Action.END, "Done"));
                initiatorController.accept();
                password.get().clear();
            });
            keyDerivationService.setOnFailed(workerStateEvent -> {
                EventManager.get().post(new StorageEvent(walletId, TimedEvent.Action.END, "Failed"));
                if (keyDerivationService.getException() instanceof InvalidPasswordException) {
                    Optional<ButtonType> optResponse = showErrorDialog("Invalid Password", "The wallet password was invalid. Try again?", ButtonType.CANCEL, ButtonType.OK);
                    if (optResponse.isPresent() && optResponse.get().equals(ButtonType.OK)) {
                        Platform.runLater(() -> acceptAndBroadcast(initiatorController, walletId, wallet));
                    }
                } else {
                    log.error("Error deriving wallet key", keyDerivationService.getException());
                }
            });
            EventManager.get().post(new StorageEvent(walletId, TimedEvent.Action.START, "Decrypting wallet..."));
            keyDerivationService.start();
        }
    } else {
        initiatorController.accept();
    }
}
Also used : WalletPasswordDialog(com.sparrowwallet.sparrow.control.WalletPasswordDialog) Storage(com.sparrowwallet.sparrow.io.Storage) StorageEvent(com.sparrowwallet.sparrow.event.StorageEvent) InvalidPasswordException(com.sparrowwallet.drongo.crypto.InvalidPasswordException) SecureString(com.sparrowwallet.drongo.SecureString)

Aggregations

SecureString (com.sparrowwallet.drongo.SecureString)12 Storage (com.sparrowwallet.sparrow.io.Storage)8 StorageEvent (com.sparrowwallet.sparrow.event.StorageEvent)3 PaymentCode (com.sparrowwallet.drongo.bip47.PaymentCode)2 InvalidPasswordException (com.sparrowwallet.drongo.crypto.InvalidPasswordException)2 Wallet (com.sparrowwallet.drongo.wallet.Wallet)2 Subscribe (com.google.common.eventbus.Subscribe)1 WalletPasswordDialog (com.sparrowwallet.sparrow.control.WalletPasswordDialog)1 ButtonType (javafx.scene.control.ButtonType)1