clarify that the slip39 import passphrase applies to all shares and not individual ones
What changed, and why it matters
This commit only changes on-screen text labels and help messages in the wallet import flow. It clarifies that when using SLIP39 'shamir secret sharing' recovery, any passphrase applies to the whole reconstructed wallet secret, not to each individual recovery share. There is no code behavior change, no bug fix, and no security vulnerability being patched.
No security action required; this is a UI/UX wording clarification. Reviewers may optionally verify the new wording is accurate for SLIP39.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff refactors two hard-coded strings in MnemonicKeystorePane into protected getter methods (getPassphraseLabel, getPassphraseHelpText), then overrides them in MnemonicShareKeystoreImportPane to display ‘Global passphrase:’ and an expanded help text explaining the passphrase applies to the reconstructed secret rather than individual SLIP39 shares. No logic, cryptography, storage, or input handling is modified.
Changed components
src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystorePane.javasrc/main/java/com/sparrowwallet/sparrow/control/MnemonicShareKeystoreImportPane.javaInspect captured patch +21 / −2
### src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystorePane.java
@@ -429,6 +429,14 @@ private boolean allPreviousWordsValid() {
}
}
+ protected String getPassphraseLabel() {
+ return "Passphrase:";
+ }
+
+ protected String getPassphraseHelpText() {
+ return "Advanced feature: a passphrase provides optional added security, but it is not stored so it must be remembered!";
+ }
+
protected class PassphraseEntry extends HBox {
private final TextField passphraseField;
@@ -457,7 +465,7 @@ public PassphraseEntry(boolean editable) {
}
});
- Label passphraseLabel = new Label("Passphrase:");
+ Label passphraseLabel = new Label(getPassphraseLabel());
passphraseLabel.managedProperty().bind(passphraseLabel.visibleProperty());
passphraseField = new TextField();
passphraseField.setPromptText(passphraseProperty.isEmpty().get() ? "Leave blank for none" : "");
@@ -471,7 +479,7 @@ public PassphraseEntry(boolean editable) {
HelpLabel helpLabel = new HelpLabel();
helpLabel.setPrefHeight(28);
helpLabel.setStyle("-fx-padding: 0 0 0 0");
- helpLabel.setHelpText("Advanced feature: a passphrase provides optional added security, but it is not stored so it must be remembered!");
+ helpLabel.setHelpText(getPassphraseHelpText());
getChildren().addAll(usePassphraseLabel, usePassphraseCheckbox, passphraseLabel, passphraseField, helpLabel);
}
### src/main/java/com/sparrowwallet/sparrow/control/MnemonicShareKeystoreImportPane.java
@@ -305,6 +305,17 @@ private Node getDerivationEntry(List<ChildNumber> derivation) {
return contentBox;
}
+ @Override
+ protected String getPassphraseLabel() {
+ return "Global passphrase:";
+ }
+
+ @Override
+ protected String getPassphraseHelpText() {
+ return "Advanced feature: a passphrase provides optional added security, but it is not stored so it must be remembered!\n" +
+ "The passphrase applies to the reconstructed secret, and not to any individual share.";
+ }
+
public static Glyph getIncompleteGlyph() {
Glyph warningGlyph = new Glyph(FontAwesome5.FONT_NAME, FontAwesome5.Glyph.PLUS_CIRCLE);
warningGlyph.getStyleClass().add("warn-icon");Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.