From 322c06bf7bc99d76b09295f03da191324e70bbbd Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Fri, 23 May 2014 01:44:24 +0200 Subject: [PATCH] add simple gui qt utility --- gui/.gitignore | 1 + gui/gui.pro | 11 +++++ gui/main.cpp | 10 ++++ gui/mainwindow.cpp | 66 +++++++++++++++++++++++++ gui/mainwindow.h | 27 ++++++++++ gui/mainwindow.ui | 121 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 236 insertions(+) create mode 100644 gui/.gitignore create mode 100644 gui/gui.pro create mode 100644 gui/main.cpp create mode 100644 gui/mainwindow.cpp create mode 100644 gui/mainwindow.h create mode 100644 gui/mainwindow.ui diff --git a/gui/.gitignore b/gui/.gitignore new file mode 100644 index 0000000000..f995622d56 --- /dev/null +++ b/gui/.gitignore @@ -0,0 +1 @@ +gui.pro.user diff --git a/gui/gui.pro b/gui/gui.pro new file mode 100644 index 0000000000..9b9c73af9d --- /dev/null +++ b/gui/gui.pro @@ -0,0 +1,11 @@ +QT += core gui +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = gui +TEMPLATE = app + +SOURCES += ../bip32.c ../bip39.c ../sha2.c ../pbkdf2.c ../hmac.c ../rand.c ../bignum.c ../ecdsa.c ../ripemd160.c ../base58.c ../secp256k1.c mainwindow.cpp main.cpp + +HEADERS += mainwindow.h ../bip32.h ../bip39.h + +FORMS += mainwindow.ui diff --git a/gui/main.cpp b/gui/main.cpp new file mode 100644 index 0000000000..115a22bf7d --- /dev/null +++ b/gui/main.cpp @@ -0,0 +1,10 @@ +#include "mainwindow.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp new file mode 100644 index 0000000000..1e88b2f35a --- /dev/null +++ b/gui/mainwindow.cpp @@ -0,0 +1,66 @@ +#include +#include "mainwindow.h" +#include "ui_mainwindow.h" +extern "C" { +#include "../bip32.h" +#include "../bip39.h" +#include "../ecdsa.h" +} + +HDNode root; + +MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) +{ + ui->setupUi(this); + for (int i = 0; i < 100; i++) { + ui->listAddress->insertRow(i); + ui->listChange->insertRow(i); + + } +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +// abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about + +void MainWindow::on_buttonLoad_clicked() +{ + ui->listAccount->clear(); + if (!mnemonic_check(ui->editMnemonic->text().toLocal8Bit().data())) { + QMessageBox::critical(this, "Error", "Text is not a valid BIP39 mnemonic.", QMessageBox::Ok); + return; + } + uint8_t seed[64]; + mnemonic_to_seed(ui->editMnemonic->text().toLocal8Bit().data(), ui->editPassphrase->text().toLocal8Bit().data(), seed, 0); + hdnode_from_seed(seed, 64, &root); + for (int i = 1; i <= 10; i++) { + ui->listAccount->addItem(QString("Account #") + QString::number(i)); + } +} + +void MainWindow::on_listAccount_clicked(const QModelIndex &index) +{ + const char addr_version = 0x00, wif_version = 0x80; + char buf[64]; + HDNode node; + // external chain + for (int chain = 0; chain < 2; chain++) { + QTableWidget *list = chain == 0 ? ui->listAddress : ui->listChange; + node = root; + hdnode_private_ckd(&node, 44 | 0x80000000); + hdnode_private_ckd(&node, index.row() | 0x80000000); + hdnode_private_ckd(&node, chain); // external / internal + for (int i = 0; i < 100; i++) { + HDNode node2 = node; + hdnode_private_ckd(&node2, i); + ecdsa_get_address(node2.public_key, addr_version, buf); QString address = QString(buf); + ecdsa_get_wif(node2.private_key, wif_version, buf); QString wif = QString(buf); + list->setItem(i, 0, new QTableWidgetItem(address)); + list->setItem(i, 1, new QTableWidgetItem(wif)); + list->setItem(i, 2, new QTableWidgetItem("0.0")); + } + } +} diff --git a/gui/mainwindow.h b/gui/mainwindow.h new file mode 100644 index 0000000000..ef7dc1b4d7 --- /dev/null +++ b/gui/mainwindow.h @@ -0,0 +1,27 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +private slots: + void on_buttonLoad_clicked(); + void on_listAccount_clicked(const QModelIndex &index); + +private: + Ui::MainWindow *ui; +}; + +#endif // MAINWINDOW_H diff --git a/gui/mainwindow.ui b/gui/mainwindow.ui new file mode 100644 index 0000000000..1b1782b6fb --- /dev/null +++ b/gui/mainwindow.ui @@ -0,0 +1,121 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + + DejaVu Sans Mono + + + + TREZOR + + + + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + 120 + 16777215 + + + + Load + + + + + + + + 0 + 0 + + + + + 140 + 16777215 + + + + + + + + + address + + + + + private key + + + + + balance + + + + + + + + + address + + + + + private key + + + + + balance + + + + + + + + + + editMnemonic + buttonLoad + listAccount + listAddress + + + +