@FXML public void setPasswordClicked(ActionEvent event) { if (!pass1.getText().equals(pass2.getText())) { informationalAlert(tr("Passwords do not match"), tr("Try re-typing your chosen passwords.")); return; } String password = pass1.getText(); // This is kind of arbitrary and we could do much more to help people pick strong passwords. if (password.length() < 4) { informationalAlert( tr("Password too short"), tr("You need to pick a password at least five characters or longer.")); return; } fadeIn(progressMeter); fadeOut(widgetGrid); fadeOut(explanationLabel); fadeOut(buttonHBox); KeyCrypterScrypt scrypt = new KeyCrypterScrypt(SCRYPT_PARAMETERS); // Deriving the actual key runs on a background thread. 500msec is empirical on my laptop // (actual val is more like 333 but we give padding time). KeyDerivationTasks tasks = new KeyDerivationTasks(scrypt, password, estimatedKeyDerivationTime) { @Override protected void onFinish(KeyParameter aesKey, int timeTakenMsec) { // Write the target time to the wallet so we can make the progress bar work when // entering the password. WalletPasswordController.setTargetTime(Duration.ofMillis(timeTakenMsec)); // The actual encryption part doesn't take very long as most private keys are derived on // demand. log.info("Key derived, now encrypting"); Main.bitcoin.wallet().encrypt(scrypt, aesKey); log.info("Encryption done"); informationalAlert( tr("Wallet encrypted"), tr("You can remove the password at any time from the settings screen.")); overlayUI.done(); } }; progressMeter.progressProperty().bind(tasks.progress); tasks.start(); }
public void initialize() { progressMeter.setOpacity(0); }