From e3ba96799c29057c0073615146dd2ad688eb1c13 Mon Sep 17 00:00:00 2001 From: Cheng Date: Sun, 22 May 2022 19:36:23 +1000 Subject: [PATCH] Now UI is working well enough to finally introduce secret management First thing that is actually part of the final use case --- app.cpp | 24 ++++---- display_wallet.cpp | 16 +++--- display_wallet.h | 1 - frame.cpp | 139 ++++++++++++++++++++++++--------------------- frame.h | 7 +-- localization.cpp | 2 +- ristretto255.h | 10 ++++ unit_test.cpp | 86 ++++++++++++++-------------- 8 files changed, 152 insertions(+), 133 deletions(-) diff --git a/app.cpp b/app.cpp index c97cf4f..07b88e7 100644 --- a/app.cpp +++ b/app.cpp @@ -19,9 +19,9 @@ App::~App() bool App::OnInit() { if (wxApp::OnInit()) { - SetVendorName(_T("rho")); /* This causes the non volatile config data to be stored under the rho on + SetVendorName(wxT("rho")); /* This causes the non volatile config data to be stored under the rho on windows.*/ - SetAppName(_T("wallet")); /* This causes the non volatile config data to be stored under rho\wallet + SetAppName(wxT("wallet")); /* This causes the non volatile config data to be stored under rho\wallet We will generally place data in the database, and if additional executables need their own data in the config, they will create their own subkey under Computer\HKEY_CURRENT_USER\Software\rho */ pConfig = std::unique_ptr(wxConfigBase::Get()); @@ -91,7 +91,7 @@ bool App::OnExceptionInMainLoop() error = wsz_program + _wx(sz_unknown_error); errorCode = 8; } - wxLogError(_T("%s"), error); + wxLogError(wxT("%s"), error); wxMessageDialog dlg(singletonFrame, error, wsz_error, wxICON_ERROR); dlg.SetId(myID_ERRORMESSAGE); dlg.ShowModal(); @@ -103,7 +103,7 @@ void App::OnInitCmdLine(wxCmdLineParser& parser) { parser.SetDesc(g_cmdLineDesc); // must refuse '/' as parameter starter or cannot use "/path" style paths - parser.SetSwitchChars(_T("-")); + parser.SetSwitchChars(wxT("-")); //Command line parameters parser.SetLogo(wsz_commandLineLogo); parser.AddUsageText(wsz_usageText); @@ -117,30 +117,30 @@ bool App::OnCmdLineParsed(wxCmdLineParser& parser) { case wxCMD_LINE_SWITCH: optionName = arg.GetShortName(); - if (optionName == _T("t")) { + if (optionName == wxT("t")) { m_unit_test = !arg.IsNegated(); } - else if (optionName == _T("l")) { + else if (optionName == wxT("l")) { m_display = !arg.IsNegated(); } - else if (optionName == _T("d")) { + else if (optionName == wxT("d")) { m_display |= m_display_in_front = !arg.IsNegated(); } - else if (optionName == _T("f")) { + else if (optionName == wxT("f")) { m_log_focus_events = !arg.IsNegated(); if (m_log_focus_events) { Bind( wxEVT_IDLE, +[](wxIdleEvent& event) { //Since this function is only ever used once, never being unbound, using a lambda to avoid naming it. static wxWindow* lastFocus = (wxWindow*)NULL; - //wxLogMessage(_T("OnIdle")); + //wxLogMessage(wxT("OnIdle")); wxWindow* curFocus = ::wxWindow::FindFocus(); if (curFocus != lastFocus && curFocus) { lastFocus = curFocus; wxString name{ "" }; do { - name = wxString(_T("/")) + curFocus->GetClassInfo()->GetClassName() + _T(":") + curFocus->GetName() + name; + name = wxString(wxT("/")) + curFocus->GetClassInfo()->GetClassName() + wxT(":") + curFocus->GetName() + name; } while (curFocus = curFocus->GetParent()); wxLogMessage(name); } @@ -149,11 +149,11 @@ bool App::OnCmdLineParsed(wxCmdLineParser& parser) ); } } - else if (optionName == _T("q")) { + else if (optionName == wxT("q")) { m_quick_unit_test = !arg.IsNegated(); m_complete_unit_test = m_complete_unit_test && !m_quick_unit_test; } - else if (optionName == _T("c")) { + else if (optionName == wxT("c")) { m_complete_unit_test = !arg.IsNegated(); m_quick_unit_test = m_quick_unit_test && !m_complete_unit_test; } diff --git a/display_wallet.cpp b/display_wallet.cpp index 01c0c76..42e488d 100644 --- a/display_wallet.cpp +++ b/display_wallet.cpp @@ -1,12 +1,11 @@ #include "stdafx.h" using ro::base58; display_wallet::display_wallet(wxWindow* parent, wxFileName& walletfile) : - wxPanel(parent, myID_WALLET_UI, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("Wallet")), + wxPanel(parent, myID_WALLET_UI, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, wxT("Wallet")), m_db(nullptr), - m_menuitem_close(this, &display_wallet::close_menu_event_handler), m_menuitem_add_name(this, &display_wallet::add_name_event_handler) { - wxLogMessage(_T("Loading %s"), walletfile.GetFullPath()); + wxLogMessage(wxT("Loading %s"), walletfile.GetFullPath()); if (!walletfile.IsOk() || !walletfile.HasName() || !walletfile.HasExt()) throw MyException("unexpected file name"); if (!walletfile.FileExists())throw MyException( walletfile.GetFullPath().append(" does not exist.").ToUTF8() @@ -62,7 +61,6 @@ display_wallet::display_wallet(wxWindow* parent, wxFileName& walletfile) : singletonFrame->m_LastUsedSqlite.Assign(walletfile); wxMenu* menuFile{ singletonFrame->GetMenuBar()->GetMenu(0) }; - m_menuitem_close.Insert(menuFile, 1, "close", "close wallet"); singletonFrame->GetMenuBar()->EnableTop(1, true); //enable edit menu. wxMenu* menuEdit{ singletonFrame->GetMenuBar()->GetMenu(1) }; m_menuitem_add_name.Insert(menuEdit, 0, "add name", "create new Zooko identity"); @@ -88,10 +86,14 @@ void display_wallet::add_name_event_handler(wxCommandEvent& event) { wxOK | wxCANCEL); if (dialog.ShowModal() == wxID_OK) { - wxMessageBox(dialog.GetValue(), "Got string", wxOK | wxICON_INFORMATION, this); + std::string zookoNickname(dialog.GetValue().ToUTF8()); + sql_insert_name insert_name(m_db); + auto zookoNickname_psz = zookoNickname.c_str(); + insert_name( + zookoNickname_psz, + m_MasterSecret(zookoNickname_psz).timesBase() + ); } - sql_insert_name insert_name(m_db); - insert_name(dialog.GetValue().ToUTF8(), m_MasterSecret(dialog.GetValue().ToUTF8()).timesBase()); } diff --git a/display_wallet.h b/display_wallet.h index a90a51f..b597c79 100644 --- a/display_wallet.h +++ b/display_wallet.h @@ -12,7 +12,6 @@ private: wxBoxSizer* m_rSizer; void close_menu_event_handler(wxCommandEvent&); void add_name_event_handler(wxCommandEvent&); - MenuLink m_menuitem_close; MenuLink m_menuitem_add_name; void OnClose(wxCloseEvent& event); }; diff --git a/frame.cpp b/frame.cpp index 70db891..530dc1f 100644 --- a/frame.cpp +++ b/frame.cpp @@ -8,20 +8,20 @@ Frame* singletonFrame{nullptr}; void Frame::RestorePositionFromConfig(const wxSize& bestSize) { // SetPath() understands ".." but you should probably never use it. - singletonApp->pConfig->SetPath(_T("/MainFrame")); wxPoint scr{ wxSystemSettings::GetMetric(wxSYS_SCREEN_X), wxSystemSettings::GetMetric(wxSYS_SCREEN_Y) }; + singletonApp->pConfig->SetPath(wxT("/MainFrame")); wxPoint scr{ wxSystemSettings::GetMetric(wxSYS_SCREEN_X), wxSystemSettings::GetMetric(wxSYS_SCREEN_Y) }; // restore frame position and size - int x = singletonApp->pConfig->ReadLong(_T("x"), scr.x / 4); - int y = singletonApp->pConfig->ReadLong(_T("y"), scr.y / 4); - int w = singletonApp->pConfig->ReadLong(_T("w"), scr.x / 2); - int h = singletonApp->pConfig->ReadLong(_T("h"), scr.y / 2); + int x = singletonApp->pConfig->ReadLong(wxT("x"), scr.x / 4); + int y = singletonApp->pConfig->ReadLong(wxT("y"), scr.y / 4); + int w = singletonApp->pConfig->ReadLong(wxT("w"), scr.x / 2); + int h = singletonApp->pConfig->ReadLong(wxT("h"), scr.y / 2); w = std::min(std::max(std::max(w, scr.x / 5), bestSize.GetWidth()), 8 * scr.x / 9); h = std::min(std::max(std::max(h, scr.y / 9), bestSize.GetHeight()), 4 * scr.y / 5); x = std::max(scr.x / 12, std::min(x, scr.x - w - scr.x / 12)); y = std::max(scr.y / 10, std::min(y, scr.y - h - scr.y / 10)); this->Move(x, y); - this->Maximize(singletonApp->pConfig->ReadBool(_T("Maximized"), false)); + this->Maximize(singletonApp->pConfig->ReadBool(wxT("Maximized"), false)); this->SetSize(w, h); - singletonApp->pConfig->SetPath(_T("/")); + singletonApp->pConfig->SetPath(wxT("/")); if (singletonApp->m_display || m_pLogWindow != nullptr) { m_pLogWindow->GetFrame()->SetSize(w, h); if (singletonApp->m_display_in_front) { @@ -40,22 +40,22 @@ void Frame::RestorePositionFromConfig(const wxSize& bestSize) { void Frame::StorePositionToConfig() { if (singletonApp->pConfig) { - singletonApp->pConfig->SetPath(_T("/MainFrame")); + singletonApp->pConfig->SetPath(wxT("/MainFrame")); if (this->IsMaximized()) { - singletonApp->pConfig->Write(_T("Maximized"), true); + singletonApp->pConfig->Write(wxT("Maximized"), true); } else { // save the frame position int x, y, w, h; this->GetSize(&w, &h); this->GetPosition(&x, &y); - singletonApp->pConfig->Write(_T("x"), (long)x); - singletonApp->pConfig->Write(_T("y"), (long)y); - singletonApp->pConfig->Write(_T("w"), (long)w); - singletonApp->pConfig->Write(_T("h"), (long)h); - singletonApp->pConfig->Write(_T("Maximized"), false); + singletonApp->pConfig->Write(wxT("x"), (long)x); + singletonApp->pConfig->Write(wxT("y"), (long)y); + singletonApp->pConfig->Write(wxT("w"), (long)w); + singletonApp->pConfig->Write(wxT("h"), (long)h); + singletonApp->pConfig->Write(wxT("Maximized"), false); } - singletonApp->pConfig->SetPath(_T("/")); + singletonApp->pConfig->SetPath(wxT("/")); } } @@ -85,12 +85,12 @@ try { m_pLogWindow->GetFrame()->SetName(sz_unit_test_log); m_pLogWindow->GetFrame()->SetIcon(wxICON(AAArho)); if (singletonApp->m_unit_test) { - wxLogMessage(_T("Command line specified %s unit test with%s exit on completion of unit test."), - singletonApp->m_complete_unit_test?_T("complete"): singletonApp->m_quick_unit_test?_T("quick"):_T(""), - singletonApp->m_display ? _T("out") : _T("")); - wxLogMessage(_T("If an error occurs during unit test, the program will return a non zero " + wxLogMessage(wxT("Command line specified %s unit test with%s exit on completion of unit test."), + singletonApp->m_complete_unit_test?wxT("complete"): singletonApp->m_quick_unit_test?wxT("quick"):wxT(""), + singletonApp->m_display ? wxT("out") : wxT("")); + wxLogMessage(wxT("If an error occurs during unit test, the program will return a non zero " "error number on exit.")); - wxLogMessage(_T("")); + wxLogMessage(wxT("")); } }else { wxLog::EnableLogging(false); @@ -102,18 +102,18 @@ try { &UnitTest ); if (singletonApp->m_log_focus_events) { - wxLogMessage(_T("Logging focus events")); - wxLogMessage(_T("")); + wxLogMessage(wxT("Logging focus events")); + wxLogMessage(wxT("")); } if (singletonApp->m_params.empty()) { - wxLogMessage(_T("No wallet specified. Attempting to open last used wallet")); + wxLogMessage(wxT("No wallet specified. Attempting to open last used wallet")); }else { - wxString subcommands( _T("")); + wxString subcommands( wxT("")); for (auto& str : singletonApp->m_params) { - subcommands += str + _T(" "); + subcommands += str + wxT(" "); } - wxLogMessage(_T("command argument%s %s"), singletonApp->m_params.size()==1?"":"s", subcommands); - wxLogMessage(_T("attempting to open %s"), singletonApp->m_params[0]); + wxLogMessage(wxT("command argument%s %s"), singletonApp->m_params.size()==1?"":"s", subcommands); + wxLogMessage(wxT("attempting to open %s"), singletonApp->m_params[0]); } SetIcon(wxICON(AAArho)); //Does not appear to do anything. Maybe it does something in Unix. //wxICON is a namestring on windows, and a symbol on Unix @@ -128,12 +128,13 @@ try { menuFile->Append(wxID_OPEN, menu_strings[0].tail[2][0], menu_strings[0].tail[2][1]); menuFile->Bind(wxEVT_MENU, &Frame::OnFileOpen, this, wxID_OPEN); - menuFile->Append(wxID_DELETE, menu_strings[0].tail[3][0], menu_strings[0].tail[3][1] + m_LastUsedSqlite.GetFullPath()); - wxLogMessage(m_LastUsedSqlite.GetFullPath()+" wallet path"); - menuFile->Bind(wxEVT_MENU, &Frame::OnDelete, this, wxID_DELETE); menuFile->Append(myID_DELETECONFIG, menu_strings[0].tail[4][0], menu_strings[0].tail[4][1] + m_LastUsedSqlite.GetFullPath()); + { auto _ = new wxMenuItem(menuFile, wxID_CLOSE); + _->SetHelp(menu_strings[0].tail[3][1] + m_LastUsedSqlite.GetFullPath()); + menuFile->Append(_); + menuFile->Bind(wxEVT_MENU, &Frame::OnMyCloseMPanel, this, wxID_CLOSE); + } + menuFile->Append(myID_DELETECONFIG, menu_strings[0].tail[4][0], menu_strings[0].tail[4][1] + m_LastUsedSqlite.GetFullPath()); menuFile->Bind(wxEVT_MENU, &Frame::OnDeleteConfiguration, this, myID_DELETECONFIG); - menuFile->Append(myID_MYEXIT,"my exit, testing destruction"); - menuFile->Bind(wxEVT_MENU, &Frame::OnMyCloseMpanel, this, myID_MYEXIT); menuFile->Append(wxID_EXIT); menuFile->Bind(wxEVT_MENU, &Frame::OnExit, this, wxID_EXIT); @@ -148,7 +149,7 @@ try { CreateStatusBar(); menuBar->EnableTop(1, false); //disable edit menu. // child controls - m_LastUsedSqlite.Assign(singletonApp->pConfig->Read(_T("/Wallet/LastUsed"), _T(""))); + m_LastUsedSqlite.Assign(singletonApp->pConfig->Read(wxT("/Wallet/LastUsed"), wxT(""))); if (!m_LastUsedSqlite.IsOk() || !m_LastUsedSqlite.HasName() || !m_LastUsedSqlite.HasExt()) { m_panel = new welcome_to_rhocoin(this); //Owner is "this", via the base class wxFrame. m_panel is a // non owning pointer in the derived class that duplicates the owning pointer in the base class. @@ -169,11 +170,6 @@ try { queue_error_message(e.what()); } } -void Frame::OnMyCloseMpanel(wxCommandEvent& event) { - if (m_panel) { - m_panel->Close(true); - } -} void Frame::OnExit(wxCommandEvent& event) { if (m_panel) { @@ -187,7 +183,7 @@ void Frame::OnClose(wxCloseEvent& event) { // This event gives you the opportunity to clean up anything that needs explicit cleanup, albeit if you have done your work right nothing should need explicit cleanup, // and to object to the closing in a "file not saved" type situation. // https://docs.wxwidgets.org/trunk/classwx_close_event.html - if (sqlite3_shutdown())wxMessageBox(_T(R"|(Sqlite3 shutdown error)|"), wsz_error, wxICON_ERROR); + if (sqlite3_shutdown())wxMessageBox(wxT(R"|(Sqlite3 shutdown error)|"), wsz_error, wxICON_ERROR); DestroyChildren(); Destroy(); //Default handler will destroy the window. This is our handler for the user calling close, replacing the default handler. } @@ -205,17 +201,17 @@ void Frame::OnDeleteConfiguration(wxCommandEvent&) { if (pConfig->DeleteAll()) { - wxLogMessage(_T("Config file/registry key successfully deleted.")); + wxLogMessage(wxT("Config file/registry key successfully deleted.")); wxConfigBase::DontCreateOnDemand(); pConfig.release(); } else { - wxLogError(_T("Deleting config file/registry key failed.")); + wxLogError(wxT("Deleting config file/registry key failed.")); } } else { - wxLogError(_T("No config to delete!")); + wxLogError(wxT("No config to delete!")); return; } } @@ -271,6 +267,17 @@ COMMIT;)|"); } } +class hide_panel { + wxPanel* oldpanel; +public: + hide_panel(wxPanel* v): oldpanel(v){ + v->Hide(); + } + ~hide_panel() { + if (oldpanel == singletonFrame->m_panel) oldpanel->Show(); + } +}; + void Frame::OnSaveNew(wxCommandEvent& WXUNUSED(event)) { wxFileDialog dialog(this, @@ -279,25 +286,27 @@ void Frame::OnSaveNew(wxCommandEvent& WXUNUSED(event)) sz_default_wallet_name, sz_wallet_files_title, wxFD_SAVE | wxFD_OVERWRITE_PROMPT); - dialog.SetFilterIndex(1); - if (dialog.ShowModal() == wxID_OK) { wxLogMessage("%s, filter %d", dialog.GetPath(), dialog.GetFilterIndex()); + hide_panel hid(m_panel); + wxString wxStrWallet{ dialog.GetDirectory() + "/" + dialog.GetFilename() }; + wxFileName wxFileWallet(wxStrWallet); + ristretto255::hash<256> WalletSecret{ wxStrWallet.ToUTF8() }; + NewWallet(wxFileWallet, WalletSecret); + wxLogMessage("new wallet created: %s", wxStrWallet); + display_wallet* panel = new display_wallet(this, wxFileWallet); + if (m_panel)m_panel->Destroy(); + m_panel = panel; + m_panel->Show(); } - wxString wxStrWallet{ dialog.GetDirectory() + "/" + dialog.GetFilename() }; - wxFileName wxFileWallet(wxStrWallet); - ristretto255::hash<256> WalletSecret{ wxStrWallet.ToUTF8() }; - NewWallet(wxFileWallet, WalletSecret); - wxLogMessage("new wallet created: %s", wxStrWallet); - wxConfigBase::Get()->Write(_T("/Wallet/ LastUsed"), wxStrWallet); } void Frame::OnFileOpen(wxCommandEvent&) { - wxString directory{ _T("") }; - wxString file{ _T("") }; + wxString directory{ wxT("") }; + wxString file{ wxT("") }; if (m_LastUsedSqlite.IsOk()) { directory = m_LastUsedSqlite.GetPath(); file = m_LastUsedSqlite.GetFullName(); @@ -318,7 +327,7 @@ void Frame::OnFileOpen(wxCommandEvent&) { } void Frame::RecreateWalletFromExistingSecret(wxCommandEvent&) { - wxMessageBox(_T("new wallet existing secret event"), _T("")); + wxMessageBox(wxT("new wallet existing secret event"), wxT("")); auto standardpaths = wxStandardPaths::Get(); wxFileDialog dialog(this, sz_new_wallet_existing_secret, @@ -336,22 +345,24 @@ void Frame::RecreateWalletFromExistingSecret(wxCommandEvent&) { } } -void Frame::OnDelete(wxCommandEvent& WXUNUSED(event)) -{ - singletonApp->pConfig->SetPath(_T("/Wallet")); - wxFileName LastUsedSqlite(singletonApp->pConfig->Read(_T("LastUsed"), _T(""))); - singletonApp->pConfig->DeleteEntry(_T("LastUsed")); - if (LastUsedSqlite.IsOk() && LastUsedSqlite.FileExists()) { - if (wxRemoveFile(LastUsedSqlite.GetFullPath()))wxLogMessage(_T("Deleting % s"), LastUsedSqlite.GetFullPath()); +void Frame::OnMyCloseMPanel(wxCommandEvent& event) { + if (m_panel) { + if (!m_panel->Close(false)) throw MyException("Close cancelled"); } - LastUsedSqlite.Clear(); + assert(m_panel == nullptr); + singletonApp->pConfig->SetPath(wxT("/Wallet")); + if (singletonApp->pConfig->Read(wxT("LastUsed"), wxT("")) == m_LastUsedSqlite.GetFullPath()) { + singletonApp->pConfig->DeleteEntry(wxT("LastUsed")); + m_LastUsedSqlite.Clear(); + } + assert(m_panel == nullptr); } void Frame::OnMenuOpen(wxMenuEvent& evt) { auto pMenu(evt.GetMenu()); if (pMenu) { auto label(pMenu->GetTitle()); - wxLogMessage(_T("Open menu \"%s\""), label); + wxLogMessage(wxT("Open menu \"%s\""), label); } } @@ -361,7 +372,7 @@ Frame::~Frame() { wxConfigBase* pConfig = wxConfigBase::Get(); if (pConfig == nullptr)return; StorePositionToConfig(); - if (singletonApp->pConfig->Read(_T("/Wallet/LastUsed"), _T("")) != m_LastUsedSqlite.GetFullPath()) { - pConfig->Write(_T("/Wallet/LastUsed"), m_LastUsedSqlite.GetFullPath()); + if (singletonApp->pConfig->Read(wxT("/Wallet/LastUsed"), wxT("")) != m_LastUsedSqlite.GetFullPath()) { + pConfig->Write(wxT("/Wallet/LastUsed"), m_LastUsedSqlite.GetFullPath()); } } diff --git a/frame.h b/frame.h index 6f8e31d..45a7a0d 100644 --- a/frame.h +++ b/frame.h @@ -70,22 +70,19 @@ private: void StorePositionToConfig(void); void RestorePositionFromConfig(const wxSize&); void OnExit(wxCommandEvent&); - void OnClose(wxCloseEvent&); void OnAbout(wxCommandEvent&); void OnDeleteConfiguration(wxCommandEvent&); - void OnMyCloseMpanel(wxCommandEvent&); - + void OnMyCloseMPanel(wxCommandEvent&); public: void OnSaveNew(wxCommandEvent&); void NewWallet(wxFileName&, ristretto255::hash<256>&); void RecreateWalletFromExistingSecret(wxCommandEvent&); void OnFileOpen(wxCommandEvent&); - + void OnClose(wxCloseEvent& event); private: void OnMenuOpen(wxMenuEvent&); public: - void OnDelete(wxCommandEvent&); void OnFirstUse(wxCommandEvent&); public: diff --git a/localization.cpp b/localization.cpp index 62db207..10aca9a 100644 --- a/localization.cpp +++ b/localization.cpp @@ -76,7 +76,7 @@ static const char * file_menu_strings[][2]{ {"&New wallet...", "New wallet file From new secret"}, {"Existing secret...","New Wallet File From the secret of an old wallet"}, {"&Open existing wallet file...",""}, - {"&Delete Wallet File","Delete"}, + {nullptr,"Close"}, {"&Reset defaults","Delete config file"}}; const menu_string menu_strings_[]{ diff --git a/ristretto255.h b/ristretto255.h index d0374ee..2892367 100644 --- a/ristretto255.h +++ b/ristretto255.h @@ -72,6 +72,16 @@ namespace ro { CompileSizedString() { *(this->rbegin()) = '0'; } + CompileSizedString(char *psz) { + auto tsz{ this->rbegin() }; + *tsz = '0'; + if (psz != nullptr) { + auto usz = tsz + strlen; + while (tsz < usz && *psz != '\0') + *tsz++ = *psz++; + *tsz = '\0'; + } + } operator char* () & { char* pc = &(static_cast*>(this)->operator[](0)); return pc; diff --git a/unit_test.cpp b/unit_test.cpp index f10c5fd..dd473d1 100644 --- a/unit_test.cpp +++ b/unit_test.cpp @@ -41,16 +41,16 @@ protected: virtual int Enter(wxDialog* dlg) wxOVERRIDE { wxLogMessage( - _T("Showing %s:%s dialog"), + wxT("Showing %s:%s dialog"), dlg->GetClassInfo()->GetClassName(), dlg->GetLabel() ); auto x = dlg->GetId(); switch (x) { case myID_ERRORMESSAGE: - wxLogMessage(_T("\tError message modal dialog")); + wxLogMessage(wxT("\tError message modal dialog")); unit_test_action = next_action; - wxLogMessage(_T("\tClosing dialog")); + wxLogMessage(wxT("\tClosing dialog")); return wxID_OK; default: return wxID_NONE; @@ -82,7 +82,7 @@ static bool EndUnitTest() { ILogMessage("Passed Unit Test"); } else { - wxLogMessage(_T("\nFailed Unit Test\nunit test error %d\n%s"), + wxLogMessage(wxT("\nFailed Unit Test\nunit test error %d\n%s"), errorCode, _wx(szError.c_str()) ); } @@ -251,12 +251,12 @@ static bool CheckForUtfEnvironment(void) { ILogMessage("\tChecking for UTF locale."); try { bool utfEnvironment{ true }; - wxString utfError{ _T("") }; + wxString utfError{ wxT("") }; if constexpr (b_WINDOWS) { auto ACP{ GetACP() }; utfEnvironment = utfEnvironment && (ACP == 65001); if (!utfEnvironment) { - utfError += wxString::Format(_T("current code page %d—should be 65001☹, "), ACP); + utfError += wxString::Format(wxT("current code page %d—should be 65001☹, "), ACP); } } auto FontEncoding{ wxLocale::GetSystemEncoding() }; @@ -269,11 +269,11 @@ static bool CheckForUtfEnvironment(void) { || (FontEncoding == wxFONTENCODING_SYSTEM) ); if (!utfEnvironment) { - utfError = wxString::Format(_T("%swxFontEncoding %d—should be %d☹"), + utfError = wxString::Format(wxT("%swxFontEncoding %d—should be %d☹"), utfError, FontEncoding, wxFONTENCODING_UTF8); - wxLogMessage(_T("%s"), utfError); + wxLogMessage(wxT("%s"), utfError); } if (!utfEnvironment) { throw MyException(utfError); } } @@ -367,19 +367,19 @@ static bool OpenWallet(void) { wallet file.*/ ILogMessage("\tWallet file"); assert(singletonApp->pConfig); - singletonApp->pConfig->SetPath(_T("/Wallet")); - wxFileName LastUsedSqlite(singletonApp->pConfig->Read(_T("LastUsed"), _T(""))); + singletonApp->pConfig->SetPath(wxT("/Wallet")); + wxFileName LastUsedSqlite(singletonApp->pConfig->Read(wxT("LastUsed"), wxT(""))); bool fWalletNameOk{ false }; wxStandardPaths& StandardPaths(wxStandardPaths::Get()); StandardPaths.UseAppInfo(3); wxFileName DefaultSqlite(StandardPaths.GetUserLocalDataDir(), "default.wallet"); - wxLogMessage(_T("\t\tLastUsed=\"%s\""), LastUsedSqlite.GetFullPath()); + wxLogMessage(wxT("\t\tLastUsed=\"%s\""), LastUsedSqlite.GetFullPath()); if (!LastUsedSqlite.IsOk() || !LastUsedSqlite.HasName() || !LastUsedSqlite.HasExt()) { - wxLogMessage(_T("\t\tDefault=\"%s\""), DefaultSqlite.GetFullPath()); + wxLogMessage(wxT("\t\tDefault=\"%s\""), DefaultSqlite.GetFullPath()); assert(DefaultSqlite.IsOk() && DefaultSqlite.HasName() && DefaultSqlite.HasExt()); if (DefaultSqlite.FileExists()) { LastUsedSqlite = DefaultSqlite; - singletonApp->pConfig->Write(_T("LastUsed"), DefaultSqlite.GetFullPath()); + singletonApp->pConfig->Write(wxT("LastUsed"), DefaultSqlite.GetFullPath()); fWalletNameOk = true; } } @@ -408,7 +408,7 @@ static bool OpenWallet(void) { } const char* name = read_name.name(); if(MasterSecret(name).timesBase()!=*pubkey)throw MyException(R"|(Public key of name fails to correspond)|"); - wxLogMessage(_T("\t\t\"%s\" has expected public key 0x%s"), name, (wxString)(bin2hex(*pubkey))); + wxLogMessage(wxT("\t\t\"%s\" has expected public key 0x%s"), name, (wxString)(bin2hex(*pubkey))); } } else { @@ -440,16 +440,16 @@ CREATE TABLE "Misc"( ); COMMIT;)|"); LastUsedSqlite = DefaultSqlite; - singletonApp->pConfig->Write(_T("LastUsed"), DefaultSqlite.GetFullPath()); - wxLogMessage(_T("\t\tConstructing default wallet %s"), DefaultSqlite.GetFullPath()); + singletonApp->pConfig->Write(wxT("LastUsed"), DefaultSqlite.GetFullPath()); + wxLogMessage(wxT("\t\tConstructing default wallet %s"), DefaultSqlite.GetFullPath()); // We now have a working wallet file with no valid data. Attempting to create a strong random secret, a name, and public and private keys for that name. - wxLogMessage(_T("\t\tGenerating random 128 bit wallet secret")); + wxLogMessage(wxT("\t\tGenerating random 128 bit wallet secret")); auto text_secret{ DeriveTextSecret(ristretto255::scalar::random(), 1) }; ro::msec start_time{ ro::msec_since_epoch() }; ristretto255::CMasterSecret MasterSecret(DeriveStrongSecret(&text_secret[0]) ); decltype(start_time) end_time{ ro::msec_since_epoch() }; - wxLogMessage(_T("\t\tStrong secret derivation took %d milliseconds"), (end_time - start_time).count()); + wxLogMessage(wxT("\t\tStrong secret derivation took %d milliseconds"), (end_time - start_time).count()); sql_update_to_misc update_to_misc(db.get()); update_to_misc(1, WALLET_FILE_IDENTIFIER); update_to_misc(2, WALLET_FILE_SCHEMA_VERSION_0_0); @@ -689,30 +689,30 @@ static bool TestShareSecretGenerationSpeed(void) { szError = "Fail\tro:deserialize ro:deserialize on integers produced unexpected results."; ILogError(szError.c_str()); } - wxLogMessage(_T("\tLibsodium constants\n\t\tsizeof(crypto_secretstream_xchacha20poly1305_state)=%d"), int(sizeof(crypto_secretstream_xchacha20poly1305_state))); - wxLogMessage(_T("\t\tcrypto_generichash_KEYBYTES=%d"), crypto_generichash_KEYBYTES); - wxLogMessage(_T("\t\tcrypto_secretstream_xchacha20poly1305_KEYBYTES=%d"), crypto_secretstream_xchacha20poly1305_KEYBYTES); - wxLogMessage(_T("\t\tcrypto_secretstream_xchacha20poly1305_HEADERBYTES=%d"), crypto_secretstream_xchacha20poly1305_HEADERBYTES); - wxLogMessage(_T("\t\tchecksum size == crypto_secretstream_xchacha20poly1305_ABYTES ==%d"), crypto_secretstream_xchacha20poly1305_ABYTES); - wxLogMessage(_T("\t\tcrypto_pwhash_OPSLIMIT_MIN ==\t%08x"), crypto_pwhash_OPSLIMIT_MIN); - wxLogMessage(_T("\t\tcrypto_pwhash_OPSLIMIT_MODERATE ==\t%08x"), crypto_pwhash_OPSLIMIT_MODERATE); - wxLogMessage(_T("\t\tcrypto_pwhash_OPSLIMIT_SENSITIVE ==\t%08x"), crypto_pwhash_OPSLIMIT_SENSITIVE); - wxLogMessage(_T("\t\tcrypto_pwhash_OPSLIMIT_MAX ==\t%08x"), crypto_pwhash_OPSLIMIT_MAX); - wxLogMessage(_T("\t\tcrypto_pwhash_MEMLIMIT_MIN ==\t%08x"), crypto_pwhash_MEMLIMIT_MIN); - wxLogMessage(_T("\t\tcrypto_pwhash_MEMLIMIT_MODERATE==%08x"), crypto_pwhash_MEMLIMIT_MODERATE); - wxLogMessage(_T("\t\tcrypto_pwhash_MEMLIMIT_SENSITIVE==\t%08x"), crypto_pwhash_MEMLIMIT_SENSITIVE); - wxLogMessage(_T("\t\tcrypto_auth_BYTES ==\t\t%08x"), crypto_auth_BYTES); - wxLogMessage(_T("\t\tcrypto_stream_chacha20_NONCEBYTES\t%08x"), crypto_stream_chacha20_NONCEBYTES); - wxLogMessage(_T("\t\tcrypto_stream_chacha20_KEYBYTES ==\t%08x"), crypto_stream_chacha20_KEYBYTES); - wxLogMessage(_T("\t\tchacha20 is 2^(256+128) 512 bit pseudo random blocks")); - wxLogMessage(_T("\t\tcrypto_stream_xchacha20_NONCEBYTES\t%08x"), crypto_stream_xchacha20_NONCEBYTES); - wxLogMessage(_T("\t\tcrypto_stream_xchacha20_KEYBYTES ==\t%08x"), crypto_stream_chacha20_KEYBYTES); - wxLogMessage(_T("\t\txchacha20 is 2^512 512 bit pseudo random blocks")); - wxLogMessage(_T("\t\tmin hash size is %d bits"), crypto_generichash_BYTES_MIN * 8); - wxLogMessage(_T("\t\tmax hash size is %d bits"), crypto_generichash_BYTES_MAX * 8); - wxLogMessage(_T("\t\tcrypto_shorthash_BYTES\t== %08x"), crypto_shorthash_BYTES); - wxLogMessage(_T("\t\tcrypto_shorthash_KEYBYTES\t== %08x"), crypto_shorthash_KEYBYTES); - wxLogMessage(_T("\t\tcrypto_auth_BYTES\t\t== %08x"), crypto_auth_BYTES); + wxLogMessage(wxT("\tLibsodium constants\n\t\tsizeof(crypto_secretstream_xchacha20poly1305_state)=%d"), int(sizeof(crypto_secretstream_xchacha20poly1305_state))); + wxLogMessage(wxT("\t\tcrypto_generichash_KEYBYTES=%d"), crypto_generichash_KEYBYTES); + wxLogMessage(wxT("\t\tcrypto_secretstream_xchacha20poly1305_KEYBYTES=%d"), crypto_secretstream_xchacha20poly1305_KEYBYTES); + wxLogMessage(wxT("\t\tcrypto_secretstream_xchacha20poly1305_HEADERBYTES=%d"), crypto_secretstream_xchacha20poly1305_HEADERBYTES); + wxLogMessage(wxT("\t\tchecksum size == crypto_secretstream_xchacha20poly1305_ABYTES ==%d"), crypto_secretstream_xchacha20poly1305_ABYTES); + wxLogMessage(wxT("\t\tcrypto_pwhash_OPSLIMIT_MIN ==\t%08x"), crypto_pwhash_OPSLIMIT_MIN); + wxLogMessage(wxT("\t\tcrypto_pwhash_OPSLIMIT_MODERATE ==\t%08x"), crypto_pwhash_OPSLIMIT_MODERATE); + wxLogMessage(wxT("\t\tcrypto_pwhash_OPSLIMIT_SENSITIVE ==\t%08x"), crypto_pwhash_OPSLIMIT_SENSITIVE); + wxLogMessage(wxT("\t\tcrypto_pwhash_OPSLIMIT_MAX ==\t%08x"), crypto_pwhash_OPSLIMIT_MAX); + wxLogMessage(wxT("\t\tcrypto_pwhash_MEMLIMIT_MIN ==\t%08x"), crypto_pwhash_MEMLIMIT_MIN); + wxLogMessage(wxT("\t\tcrypto_pwhash_MEMLIMIT_MODERATE==%08x"), crypto_pwhash_MEMLIMIT_MODERATE); + wxLogMessage(wxT("\t\tcrypto_pwhash_MEMLIMIT_SENSITIVE==\t%08x"), crypto_pwhash_MEMLIMIT_SENSITIVE); + wxLogMessage(wxT("\t\tcrypto_auth_BYTES ==\t\t%08x"), crypto_auth_BYTES); + wxLogMessage(wxT("\t\tcrypto_stream_chacha20_NONCEBYTES\t%08x"), crypto_stream_chacha20_NONCEBYTES); + wxLogMessage(wxT("\t\tcrypto_stream_chacha20_KEYBYTES ==\t%08x"), crypto_stream_chacha20_KEYBYTES); + wxLogMessage(wxT("\t\tchacha20 is 2^(256+128) 512 bit pseudo random blocks")); + wxLogMessage(wxT("\t\tcrypto_stream_xchacha20_NONCEBYTES\t%08x"), crypto_stream_xchacha20_NONCEBYTES); + wxLogMessage(wxT("\t\tcrypto_stream_xchacha20_KEYBYTES ==\t%08x"), crypto_stream_chacha20_KEYBYTES); + wxLogMessage(wxT("\t\txchacha20 is 2^512 512 bit pseudo random blocks")); + wxLogMessage(wxT("\t\tmin hash size is %d bits"), crypto_generichash_BYTES_MIN * 8); + wxLogMessage(wxT("\t\tmax hash size is %d bits"), crypto_generichash_BYTES_MAX * 8); + wxLogMessage(wxT("\t\tcrypto_shorthash_BYTES\t== %08x"), crypto_shorthash_BYTES); + wxLogMessage(wxT("\t\tcrypto_shorthash_KEYBYTES\t== %08x"), crypto_shorthash_KEYBYTES); + wxLogMessage(wxT("\t\tcrypto_auth_BYTES\t\t== %08x"), crypto_auth_BYTES); } catch (const std::exception & e) { errorCode = 15; @@ -820,7 +820,7 @@ static bool TestShareSecretGenerationSpeed(void) { { auto end_time{ std::chrono::high_resolution_clock::now() }; auto time_to_do_crypto{ std::chrono::duration_cast(end_time - start_time) }; - wxLogMessage(_T("\t\ttest of ristretto test vectors took %lld microseconds"), time_to_do_crypto.count()); + wxLogMessage(wxT("\t\ttest of ristretto test vectors took %lld microseconds"), time_to_do_crypto.count()); ILogMessage("\tTesting generation of shared secrets."); start_time = std::chrono::high_resolution_clock::now(); scalar sclrAnonSessionSecretKey{ scalar::random() };