feat(settings): migrate Export Private Key modal + fix outside-click secret leak
Phase 2 (first security modal), presentation-only + the review's one finding. Migration: struct-form BlurFloat overlay (was legacy positional); full i18n (reusing export_private_key / key_export_private_warning / key_export_private_key / select_address / key_export_fetching / export / copy / close, plus one new key_export_failed); DialogWarningHeader; centered DialogActionFooter (Export + Close) + a Copy TactileButton; async UX (export_in_progress_ spinner, export_error_ line). The exported key stays in the char[256] buffer shown via a read-only InputTextMultiline (deliberately NOT AddressCopyField, which would copy the secret into a lingering std::string). exportPrivateKey is untouched. Security fix (found by the adversarial review): the 0a "outside-click/Esc wipe" via the Begin-returns-false early-return was UNREACHABLE — BeginOverlayDialog clears show_export_key_ mid-frame but still returns true, so an outside-click/Esc dismiss left the exported spending key un-wiped in export_result_. Add the in-body `if (!show_export_key_)` teardown before EndOverlayDialog (the proven import-dialog pattern), which is the real wipe point for every dismiss path. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -470,6 +470,7 @@
|
||||
"keep": "Behalten",
|
||||
"keep_daemon": "Daemon weiterlaufen lassen",
|
||||
"key_export_click_retrieve": "Klicken Sie, um den Schlüssel aus Ihrer Wallet abzurufen",
|
||||
"key_export_failed": "Schlüssel konnte nicht exportiert werden — entsperren Sie die Wallet (falls verschlüsselt) und versuchen Sie es erneut.",
|
||||
"key_export_fetching": "Schlüssel wird aus Wallet abgerufen...",
|
||||
"key_export_private_key": "Privater Schlüssel:",
|
||||
"key_export_private_warning": "Halten Sie diesen Schlüssel GEHEIM! Jeder mit diesem Schlüssel kann Ihre Gelder ausgeben. Teilen Sie ihn niemals online oder mit nicht vertrauenswürdigen Parteien.",
|
||||
|
||||
@@ -470,6 +470,7 @@
|
||||
"keep": "Mantener",
|
||||
"keep_daemon": "Mantener daemon activo",
|
||||
"key_export_click_retrieve": "Haga clic para recuperar la clave de su billetera",
|
||||
"key_export_failed": "No se pudo exportar la clave: desbloquea el monedero (si está cifrado) e inténtalo de nuevo.",
|
||||
"key_export_fetching": "Obteniendo clave de la cartera...",
|
||||
"key_export_private_key": "Clave Privada:",
|
||||
"key_export_private_warning": "¡Mantén esta clave en SECRETO! Cualquiera con esta clave puede gastar tus fondos. Nunca la compartas en línea ni con personas no confiables.",
|
||||
|
||||
@@ -470,6 +470,7 @@
|
||||
"keep": "Conserver",
|
||||
"keep_daemon": "Garder le daemon en marche",
|
||||
"key_export_click_retrieve": "Cliquez pour récupérer la clé de votre portefeuille",
|
||||
"key_export_failed": "Impossible d'exporter la clé — déverrouillez le portefeuille (s'il est chiffré) et réessayez.",
|
||||
"key_export_fetching": "Récupération de la clé depuis le portefeuille...",
|
||||
"key_export_private_key": "Clé privée :",
|
||||
"key_export_private_warning": "Gardez cette clé SECRÈTE ! Toute personne possédant cette clé peut dépenser vos fonds. Ne la partagez jamais en ligne ou avec des tiers non fiables.",
|
||||
|
||||
@@ -470,6 +470,7 @@
|
||||
"keep": "保持",
|
||||
"keep_daemon": "デーモンを実行し続ける",
|
||||
"key_export_click_retrieve": "クリックしてウォレットからキーを取得",
|
||||
"key_export_failed": "鍵をエクスポートできませんでした。ウォレットのロックを解除して(暗号化されている場合)再試行してください。",
|
||||
"key_export_fetching": "ウォレットから鍵を取得中...",
|
||||
"key_export_private_key": "秘密鍵:",
|
||||
"key_export_private_warning": "この鍵は秘密にしてください!この鍵を持つ人は誰でもあなたの資金を使えます。オンラインや信頼できない相手と共有しないでください。",
|
||||
|
||||
@@ -470,6 +470,7 @@
|
||||
"keep": "유지",
|
||||
"keep_daemon": "데몬 계속 실행",
|
||||
"key_export_click_retrieve": "지갑에서 키를 가져오려면 클릭",
|
||||
"key_export_failed": "키를 내보내지 못했습니다. 지갑 잠금을 해제하고(암호화된 경우) 다시 시도하세요.",
|
||||
"key_export_fetching": "지갑에서 키를 가져오는 중...",
|
||||
"key_export_private_key": "개인 키:",
|
||||
"key_export_private_warning": "이 키를 비밀로 유지하세요! 이 키를 가진 사람은 누구나 자금을 사용할 수 있습니다. 온라인이나 신뢰할 수 없는 사람과 공유하지 마세요.",
|
||||
|
||||
@@ -470,6 +470,7 @@
|
||||
"keep": "Manter",
|
||||
"keep_daemon": "Manter daemon em execução",
|
||||
"key_export_click_retrieve": "Clique para recuperar a chave da sua carteira",
|
||||
"key_export_failed": "Não foi possível exportar a chave — desbloqueie a carteira (se estiver criptografada) e tente novamente.",
|
||||
"key_export_fetching": "Buscando chave da carteira...",
|
||||
"key_export_private_key": "Chave Privada:",
|
||||
"key_export_private_warning": "Mantenha esta chave em SEGREDO! Qualquer pessoa com esta chave pode gastar seus fundos. Nunca a compartilhe online ou com terceiros não confiáveis.",
|
||||
|
||||
@@ -470,6 +470,7 @@
|
||||
"keep": "Сохранить",
|
||||
"keep_daemon": "Оставить daemon работающим",
|
||||
"key_export_click_retrieve": "Нажмите, чтобы получить ключ из вашего кошелька",
|
||||
"key_export_failed": "Не удалось экспортировать ключ — разблокируйте кошелёк (если зашифрован) и повторите попытку.",
|
||||
"key_export_fetching": "Получение ключа из кошелька...",
|
||||
"key_export_private_key": "Приватный ключ:",
|
||||
"key_export_private_warning": "Держите этот ключ в ТАЙНЕ! Любой, кто владеет этим ключом, может потратить ваши средства. Никогда не делитесь им в интернете или с ненадёжными лицами.",
|
||||
|
||||
@@ -470,6 +470,7 @@
|
||||
"keep": "保留",
|
||||
"keep_daemon": "保持守护进程运行",
|
||||
"key_export_click_retrieve": "点击从钱包中获取密钥",
|
||||
"key_export_failed": "无法导出密钥——请解锁钱包(如已加密)后重试。",
|
||||
"key_export_fetching": "正在从钱包获取密钥...",
|
||||
"key_export_private_key": "私钥:",
|
||||
"key_export_private_warning": "请保密此密钥!任何拥有此密钥的人都可以花费您的资金。切勿在网上或与不可信的人分享。",
|
||||
|
||||
Reference in New Issue
Block a user