diff --git a/gui/src/GenerateWindow.cpp b/gui/src/GenerateWindow.cpp index 8880ffb..fa8711c 100644 --- a/gui/src/GenerateWindow.cpp +++ b/gui/src/GenerateWindow.cpp @@ -92,14 +92,16 @@ m_btn_copy_both ("Copy keys") void GenerateWindow::generate_key() { - std::string pubstr; + std::string pubstr, pvtstr; struct libeosio::ec_keypair pair; + const libeosio::wif_codec_t& codec = Settings::getKeyCodec(); libeosio::ec_generate_key(&pair); - pubstr = libeosio::wif_pub_encode(pair.pub, Settings::shouldGenerateFioKeys() ? "FIO" : "EOS"); + pubstr = libeosio::wif_pub_encode(pair.pub, codec.pub); + pvtstr = libeosio::wif_priv_encode(pair.secret, codec.pvt); m_pub.setText(QString::fromStdString(pubstr)); - m_priv.setText(QString::fromStdString(libeosio::wif_priv_encode(pair.secret))); + m_priv.setText(QString::fromStdString(pvtstr)); } void GenerateWindow::copy_both_keys() diff --git a/gui/src/MainWindow.cpp b/gui/src/MainWindow.cpp index 78b3a7a..4001ef4 100644 --- a/gui/src/MainWindow.cpp +++ b/gui/src/MainWindow.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include "gui_text.h" #include "Settings.hpp" #include "GenerateWindow.hpp" @@ -32,8 +33,10 @@ #include "MainWindow.hpp" MainWindow::MainWindow(QWidget *parent) : -QMainWindow (parent), -m_fio_action (nullptr) +QMainWindow (parent), +m_format_fio_action (nullptr), +m_format_legacy_action (nullptr), +m_format_k1_action (nullptr) { libeosio::ec_init(); @@ -51,12 +54,28 @@ m_fio_action (nullptr) // Settings - m_fio_action = new QAction("FIO Keys", this); - m_fio_action->setCheckable(true); - connect(m_fio_action, SIGNAL(triggered()), this, SLOT(fioKeysCheckboxChanged())); + QActionGroup* formatGroup = new QActionGroup(this); - QMenu *settings_menu = menuBar()->addMenu("Settings"); - settings_menu->addAction(m_fio_action); + m_format_fio_action = new QAction("FIO", formatGroup); + m_format_fio_action->setCheckable(true); + m_format_legacy_action = new QAction("Legacy", formatGroup); + m_format_legacy_action->setCheckable(true); + m_format_k1_action = new QAction("K1", formatGroup); + m_format_k1_action->setCheckable(true); + + // Set k1 and trigger the changed action so we set the codec. + m_format_k1_action->setChecked(true); + formatK1CheckboxChanged(); + + connect(m_format_fio_action, SIGNAL(triggered()), this, SLOT(formatFioCheckboxChanged())); + connect(m_format_legacy_action, SIGNAL(triggered()), this, SLOT(formatLegacyCheckboxChanged())); + connect(m_format_k1_action, SIGNAL(triggered()), this, SLOT(formatK1CheckboxChanged())); + + QMenu *settings = menuBar()->addMenu("Settings"); + QMenu *format_menu = settings->addMenu("Key Format"); + format_menu->addAction(m_format_k1_action); + format_menu->addAction(m_format_legacy_action); + format_menu->addAction(m_format_fio_action); // About menuBar()->addAction("About", this, SLOT(showAbout())); @@ -84,7 +103,23 @@ void MainWindow::showAbout() EOSIOKEYGEN_GUI_TEXT_ABOUT_BODY); } -void MainWindow::fioKeysCheckboxChanged() +void MainWindow::formatFioCheckboxChanged() { - Settings::setGenerateFioKeys(m_fio_action ? m_fio_action->isChecked() : false); + if (m_format_fio_action->isChecked()) { + Settings::setKeyCodec(libeosio::wif_create_legacy_codec("FIO")); + } +} + +void MainWindow::formatLegacyCheckboxChanged() +{ + if (m_format_legacy_action->isChecked()) { + Settings::setKeyCodec(libeosio::WIF_CODEC_LEG); + } +} + +void MainWindow::formatK1CheckboxChanged() +{ + if (m_format_k1_action->isChecked()) { + Settings::setKeyCodec(libeosio::WIF_CODEC_K1); + } } diff --git a/gui/src/MainWindow.hpp b/gui/src/MainWindow.hpp index 06d3fcb..3d4b172 100644 --- a/gui/src/MainWindow.hpp +++ b/gui/src/MainWindow.hpp @@ -47,13 +47,17 @@ private slots : void showAbout(); - void fioKeysCheckboxChanged(); + void formatFioCheckboxChanged(); + void formatLegacyCheckboxChanged(); + void formatK1CheckboxChanged(); private : QStackedWidget* m_stacked; - QPointer m_fio_action; + QPointer m_format_fio_action; + QPointer m_format_legacy_action; + QPointer m_format_k1_action; }; #endif /* MAIN_WINDOW_H */ diff --git a/gui/src/SearchWindow.cpp b/gui/src/SearchWindow.cpp index 23e2cf3..7af886d 100644 --- a/gui/src/SearchWindow.cpp +++ b/gui/src/SearchWindow.cpp @@ -150,14 +150,16 @@ void SearchWindow::onResult(const struct libeosio::ec_keypair* key, const struct { int pos = (int) result.pos; int len = (int) result.len; - QString pub = QString::fromStdString(libeosio::wif_pub_encode(key->pub, Settings::shouldGenerateFioKeys() ? "FIO" : "EOS")); + libeosio::wif_codec_t codec = Settings::getKeyCodec(); + QString pub = QString::fromStdString(libeosio::wif_pub_encode(key->pub, codec.pub)); + int pub_prefix_len = (int) codec.pub.length(); QString mid = pub.mid(pos, len); QString left = pub.left(pos); QString right = pub.mid(pos + len, pub.size() - pos); eoskeygen::Dictionary::search_result_t dict_res = m_dict.search(pub.toStdString()); - QString out = "Public: " + pub.left(3); - for(int i = 3; i < pub.length(); ) { + QString out = "Public: " + pub.left(pub_prefix_len); + for(int i = pub_prefix_len; i < pub.length(); ) { if (i == pos) { out += "" + pub.mid(pos, len) + ""; @@ -178,7 +180,7 @@ void SearchWindow::onResult(const struct libeosio::ec_keypair* key, const struct out += pub[i++]; } - out += "
Private: " + QString::fromStdString(libeosio::wif_priv_encode(key->secret)); + out += "
Private: " + QString::fromStdString(libeosio::wif_priv_encode(key->secret, codec.pvt)); // As this function could be called from a non-gui thread. we use signals. emit addOutput("

" + out + "

"); @@ -253,6 +255,9 @@ void SearchWindow::langFileAdd() void SearchWindow::searchStarted() { + // Set prefix for search + m_ksearch.setPrefix(Settings::getKeyCodec().pub); + m_btn_exec.setText("Cancel"); m_txt_search.setEnabled(false); diff --git a/gui/src/Settings.cpp b/gui/src/Settings.cpp index d49c408..733e028 100644 --- a/gui/src/Settings.cpp +++ b/gui/src/Settings.cpp @@ -24,16 +24,14 @@ #include "Settings.hpp" namespace priv { - bool fio_keys = false; + libeosio::wif_codec_t key_format = libeosio::WIF_CODEC_K1; } // namespace priv -bool Settings::shouldGenerateFioKeys() -{ - return priv::fio_keys; +void Settings::setKeyCodec(const libeosio::wif_codec_t& format) { + priv::key_format = format; } -void Settings::setGenerateFioKeys(bool value) -{ - priv::fio_keys = value; +const libeosio::wif_codec_t& Settings::getKeyCodec() { + return priv::key_format; } diff --git a/gui/src/Settings.hpp b/gui/src/Settings.hpp index d47c26f..4cf04be 100644 --- a/gui/src/Settings.hpp +++ b/gui/src/Settings.hpp @@ -24,11 +24,13 @@ #ifndef SETTINGS_H #define SETTINGS_H +#include + namespace Settings { - bool shouldGenerateFioKeys(); + void setKeyCodec(const libeosio::wif_codec_t& format); - void setGenerateFioKeys(bool value); + const libeosio::wif_codec_t& getKeyCodec(); }; #endif /* SEARCH_WINDOW_H */