fix(security): throttle and wipe the import dialog clipboard preview
Hovering the Paste button in the import-key dialog read the OS clipboard every frame to draw a ghost preview of the key, and the trimmed plaintext was rebuilt each frame and never wiped. SDL's clipboard read is a synchronous round-trip, and the pasted value is a secret private or viewing key. - The clipboard is now read only on hover entry and then at most twice a second, and the classified preview is cached rather than recomputed every frame. - The cached preview is a dedicated secret buffer: it is wiped the moment it stops being shown, wiped on secret wipe, and the transient trimmed copy is zeroed right after it is classified. - Trimming moves to a shared clipboard helper shared with the paste path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1499,6 +1499,10 @@ private:
|
||||
bool export_in_progress_ = false; // async key fetch running (spinner + disable Export)
|
||||
bool export_error_ = false; // last export returned no key (locked wallet / failure)
|
||||
char import_key_input_[512] = {0};
|
||||
char import_clip_preview_[64] = {0}; // trimmed clipboard preview (<=48 chars + NUL); SECRET, wiped
|
||||
uint8_t import_clip_class_ = 0; // 0 none / 1 ok / 2 wrong-type / 3 unrecognized
|
||||
double import_clip_next_at_ = 0.0; // ImGui::GetTime() of next allowed clipboard read
|
||||
bool import_clip_hover_prev_ = false; // hover edge
|
||||
std::string export_address_;
|
||||
std::string import_status_;
|
||||
bool import_success_ = false;
|
||||
|
||||
Reference in New Issue
Block a user