diff --git a/src/gui/views/goblin/onboarding.rs b/src/gui/views/goblin/onboarding.rs index 9e6a748c..8e3e9f49 100644 --- a/src/gui/views/goblin/onboarding.rs +++ b/src/gui/views/goblin/onboarding.rs @@ -666,7 +666,9 @@ impl OnboardingContent { t!("goblin.onboarding.words.copy_clipboard").to_string() }; if w::chip(ui, &label, false).clicked() { - cb.copy_string_to_buffer(self.mnemonic_setup.mnemonic.get_phrase()); + // Secret: auto-clears from the clipboard after a delay + // (compare-then-clear) so the seed phrase does not linger there. + cb.copy_secret_to_buffer(self.mnemonic_setup.mnemonic.get_phrase()); cb.vibrate_copy(); self.words_copied = Some(std::time::Instant::now()); } diff --git a/src/gui/views/wallets/creation/content.rs b/src/gui/views/wallets/creation/content.rs index 57d5d469..a18315c4 100644 --- a/src/gui/views/wallets/creation/content.rs +++ b/src/gui/views/wallets/creation/content.rs @@ -231,7 +231,10 @@ impl WalletCreationContent { PhraseMode::Generate => { let c_t = format!("{} {}", COPY, t!("copy")); View::button(ui, c_t, Colors::white_or_black(false), || { - cb.copy_string_to_buffer( + // Secret: auto-clears from the clipboard after a + // delay (compare-then-clear) so the seed phrase + // does not linger there, matching the nsec. + cb.copy_secret_to_buffer( self.mnemonic_setup.mnemonic.get_phrase(), ); });