From 247192f7dd72bd250e5bad669435be3258a55c39 Mon Sep 17 00:00:00 2001 From: miodragpop Date: Thu, 4 Jun 2020 21:21:41 +0200 Subject: [PATCH 01/78] translucent theme test --- application.qrc | 18 ++-- res/css/test.css | 239 ++++++++++++++++++++++++++++++++++++++++++++ res/images/tile.png | Bin 0 -> 209520 bytes src/mainwindow.cpp | 4 +- src/settings.ui | 5 + 5 files changed, 256 insertions(+), 10 deletions(-) create mode 100644 res/css/test.css create mode 100644 res/images/tile.png diff --git a/application.qrc b/application.qrc index 0507184..a569d66 100644 --- a/application.qrc +++ b/application.qrc @@ -18,13 +18,13 @@ res/silentdragonlite-animated-startup-dark.gif - res/silentdragonlite_de.qm - res/silentdragonlite_es.qm - res/silentdragonlite_fr.qm - res/silentdragonlite_pt.qm - res/silentdragonlite_it.qm - res/silentdragonlite_hr.qm - res/silentdragonlite_fa.qm + res/silentdragonlite_de.qm + res/silentdragonlite_es.qm + res/silentdragonlite_fr.qm + res/silentdragonlite_pt.qm + res/silentdragonlite_it.qm + res/silentdragonlite_hr.qm + res/silentdragonlite_fa.qm res/css/blue.css @@ -32,6 +32,7 @@ res/css/default.css res/css/light.css res/css/midnight.css + res/css/test.css res/images/blue/unchecked.png @@ -43,4 +44,7 @@ res/images/blue/blue_rightArrow_small.png res/images/blue/blue_qtreeview_selected.png + + res/images/tile.png + diff --git a/res/css/test.css b/res/css/test.css new file mode 100644 index 0000000..ddb7f35 --- /dev/null +++ b/res/css/test.css @@ -0,0 +1,239 @@ + +QWidget, QMainWindow, QMenuBar, QMenu, QDialog, QTabWidget, QTableView, QTableView::item, QScrollArea, QGroupBox, QPlainTextEdit, QLineEdit, QLabel, MainWindow +{ + /* background-color: #303335; */ + background: transparent; + color: #ffffff; +} + +QMainWindow +{ + border-image: url(':images/res/images/tile.png') 0 0 0 0 repeat repeat; + color: #ffffff; +} + +QTabWidget QTabBar::tab { +padding-left:20px; +padding-right:20px; +padding-top:5px; +padding-bottom:5px; +border: 1px solid #525355; +/*background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #747577, stop: 1 #3E4244);*/ +background-color: rgba(0, 0, 0, 128); +} + +QTabWidget QTabBar::tab:selected { +min-height: 10px; +/*background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #525355, stop: 1 #303335);*/ +background-color: rgba(0, 64, 0, 128); +color:#fff; +border: 1px ridge #000; +} + +QTabWidget QTabBar::tab:hover { +/*background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #747577, stop: 1 #3E4244);*/ +background-color: rgba(0, 0, 0, 32); +color:#fff; +border: 1px ridge #fff; +min-height: 20px +} + +QTabWidget::pane { + background-color: rgba(0, 0, 0, 128); + border: 2px solid rgb(0, 0, 0); + border-top-left-radius: 0px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; + top: -2px; +} + +QStatusBar { + background-color: rgba(0, 0, 64, 128); +} + +QHeaderView { /* Table Header */ +/* background-color:#303335;*/ +background-color: rgba(0, 0, 0, 64); +border:1px solid #fff; +} + +QHeaderView::section { /* Table Header Sections */ +qproperty-alignment:center; +/*background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #747577, stop: 1 #3E4244);*/ +background: transparent; +color:#fff; +min-height:25px; +font-weight:bold; +font-size:11px; +outline:0; +border:1px solid #525355; +border-right:1px solid #fff; +border-left:1px solid #fff; +padding-left:5px; +padding-right:5px; +padding-top:2px; +padding-bottom:2px; +} + +QHeaderView::section:last { +border-right: 0px solid #d7d7d7; +} + +QScrollArea { +background:transparent; +border:0px; +} + +QTableView { /* Table - has to be selected as a class otherwise it throws off QCalendarWidget */ +/*background:#303335;*/ +background: transparent; +} + +QTableView::item { /* Table Item */ +/*background-color:#303335;*/ +background: transparent; +border:1px solid #fff; +font-size:12px; +} + +QTableView::item:selected { /* Table Item Selected */ +background-color:#fff; +color:#000; +} + +QMenuBar { +background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #525355, stop: 1 #303335); +color: #fff; +} + +QMenuBar::item { +background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #525355, stop: 1 #303335); +color: #fff; +} + +QMenuBar::item:selected { +background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #747577, stop: 1 #3E4244); +} + +QTabBar::tab { + background-color: rgba(0, 0, 0, 128); + min-width: 150px; + padding: 4px; + border-bottom: 2px solid rgb(68, 49, 141); + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QTabBar::tab:selected { + /* font: bold; */ + border: 2px solid rgb(68, 49, 141); + border-bottom: none; +} + + +QTabBar::tab:hover { + /* font: bold; */ + border: 2px solid rgb(68, 49, 141); +} + + +QGroupBox { + background-color: rgba(0, 0, 0, 128); + font-weight: bold; + font-style: italic; + border: 1px solid rgba(0, 128, 0, 128); + border-radius: 4px; + padding: 4px; + margin-top: 16px; +} + +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top left; + left: 8px; + padding-left: 3px; + padding-right: 3px; + padding-top: 6px; + padding-bottom: 8px; +} + +QLineEdit, QPushButton, QPlainTextEdit { + background-color: rgba(10, 7, 20, 128); + min-width: 100px; + border: 1px solid rgb(68, 49, 141); + border-radius: 4px; + padding:5px; +} + +QLineEdit:focus, QPushButton:pressed, QPlainTextEdit:focus { + border: 1px solid rgb(216, 00, 255); +} + +QLineEdit:hover, QPushButton:hover, QPlainTextEdit:hover { + border: 1px solid rgb(216, 00, 255); +} + +QLineEdit:disabled, QPushButton:disabled, QPlainTextEdit:disabled { + border: 1px solid rgb(64, 64, 64); +} + +QComboBox { + background-color: rgba(10, 7, 20, 128); + min-height: 28px; + min-width: 80px; + border: 1px solid rgb(68, 49, 141); + border-radius: 4px; +} + +QComboBox:hover { + border: 1px solid rgb(216, 00, 255); +} + +QComboBox QAbstractItemView { + background-color: rgb(0, 0, 0); + border: 1px solid rgb(68, 49, 141); + border-radius: 4px; +} + +QComboBox::item { + background-color: rgb(0, 0, 0); + border: 1px solid rgb(0, 0, 0); + border-radius: 4px; + height:28px; +} + +QComboBox::item:selected { /* when user selects item using mouse or keyboard */ + background-color: rgb(20, 15, 40); + border: 1px solid rgb(68, 49, 141); + border-radius: 4px; + +} + + +QCheckBox::indicator, QRadioButton::indicator { + border: 2px solid rgb(68, 49, 141); + border-radius: 6px; +} + +QCheckBox::indicator:checked, QRadioButton::indicator:checked { + background-color: rgba(0, 255, 0, 128); +} + +QCheckBox::indicator:unchecked, QRadioButton::indicator:unchecked { + background-color: rgba(0, 16, 0, 128); +} + +QCheckBox::indicator:hover, QRadioButton::indicator:hover { + border: 2px solid rgb(0, 192, 0); +} + +QCheckBox::indicator:disabled, QRadioButton::indicator:disabled { + border: 2px solid rgb(64, 64, 64); +} + +QWidget.FilledIconLabel /* targets custom ui widget by class name */ +{ + background-color: rgba(255, 255, 255, 64); + border: 2px solid rgb(255, 0, 0); +} diff --git a/res/images/tile.png b/res/images/tile.png new file mode 100644 index 0000000000000000000000000000000000000000..eeba408d0e1245ac95c527807547e24fb9197e67 GIT binary patch literal 209520 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

(o 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 b2PfyiAhW)ojjL^G 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 - // Tell the user to restart - QMessageBox::information(this, tr("Restart"), tr("Please restart Silentdragonlite to have the theme apply"), QMessageBox::Ok); }); // Get Currency Data @@ -1384,7 +1382,7 @@ void MainWindow::slot_change_theme(const QString& theme_name) if (qFile.open(QFile::ReadOnly)) { QString styleSheet = QLatin1String(qFile.readAll()); - this->setStyleSheet(""); // reset styles + this->setStyleSheet(""); // resets styles, makes app restart unnecessary this->setStyleSheet(styleSheet); } diff --git a/src/settings.ui b/src/settings.ui index 6871c7b..a44ba84 100644 --- a/src/settings.ui +++ b/src/settings.ui @@ -120,6 +120,11 @@ midnight + + + test + + From 05809afeb139c189bd1f9e34601f01e9e512f2b1 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Fri, 12 Jun 2020 23:50:50 +0200 Subject: [PATCH 02/78] decrypt addrbook only if needed, show only memos in requests --- src/addressbook.cpp | 114 ++++++++++++++++++++++++++++++++++++++------ src/chatmodel.cpp | 6 +-- src/mainwindow.cpp | 32 ++++++------- 3 files changed, 118 insertions(+), 34 deletions(-) diff --git a/src/addressbook.cpp b/src/addressbook.cpp index e2f481d..5061438 100644 --- a/src/addressbook.cpp +++ b/src/addressbook.cpp @@ -386,13 +386,53 @@ AddressBook::AddressBook() void AddressBook::readFromStorage() { - QFile file(AddressBook::writeableFile()); + auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); + QString target_decaddr_file = dir.filePath("addresslabels.dat"); + QString target_encaddr_file = dir.filePath("addresslabels.dat.enc"); + QFile file(target_encaddr_file); + QFile file1(target_decaddr_file); if (file.exists()) { + + qDebug() << "Existiert"; + QString password = DataStore::getChatDataStore()->getPassword(); + int length = password.length(); + char *sequence = NULL; + sequence = new char[length+1]; + strncpy(sequence, password.toLocal8Bit(), length +1); + + #define MESSAGE ((const unsigned char *) sequence) + #define MESSAGE_LEN length + + unsigned char hash[crypto_secretstream_xchacha20poly1305_KEYBYTES]; + + crypto_hash_sha256(hash,MESSAGE, MESSAGE_LEN); + + #define PASSWORD sequence + #define KEY_LEN crypto_box_SEEDBYTES + + + + /////////we use the Hash of the Password as Salt, not perfect but still a good solution. + + unsigned char key[KEY_LEN]; + + if (crypto_pwhash + (key, sizeof key, PASSWORD, strlen(PASSWORD), hash, + crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, + crypto_pwhash_ALG_DEFAULT) != 0) { + /* out of memory */ + } + + + + FileEncryption::decrypt(target_decaddr_file, target_encaddr_file, key); + qDebug() << "entschlüsselt"; + allLabels.clear(); - file.open(QIODevice::ReadOnly); - QDataStream in(&file); // read the data serialized from the file + file1.open(QIODevice::ReadOnly); + QDataStream in(&file1); // read the data serialized from the file QString version; in >> version; QList> stuff; @@ -405,6 +445,8 @@ void AddressBook::readFromStorage() auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); QFile address(dir.filePath(filename)); + qDebug() << "is v1"; + address.rename(dir.filePath("addresslabels.bak")); }else{ @@ -419,21 +461,16 @@ void AddressBook::readFromStorage() // qDebug() << "Read " << version << " Hush contacts from disk..."; - file.close(); + file1.close(); + + FileEncryption::encrypt(target_encaddr_file, target_decaddr_file, key); + file1.remove(); } else { qDebug() << "No Hush contacts found on disk!"; } - // Special. - // Add the default silentdragon donation address if it isn't already present - // QList allAddresses; - // std::transform(allLabels.begin(), allLabels.end(), - // std::back_inserter(allAddresses), [=] (auto i) { return i.getPartnerAddress(); }); - // if (!allAddresses.contains(Settings::getDonationAddr(true))) { - // allLabels.append(QPair("silentdragon donation", Settings::getDonationAddr(true))); - // } } @@ -442,12 +479,49 @@ void AddressBook::writeToStorage() //FileSystem::getInstance()->writeContacts(AddressBook::writeableFile(), DataStore::getContactDataStore()->dump()); // FileSystem::getInstance()->writeContactsOldFormat(AddressBook::writeableFile(), allLabels); + + QString password = DataStore::getChatDataStore()->getPassword(); + int length = password.length(); + char *sequence = NULL; + sequence = new char[length+1]; + strncpy(sequence, password.toLocal8Bit(), length +1); + + #define MESSAGE ((const unsigned char *) sequence) + #define MESSAGE_LEN length + + unsigned char hash[crypto_secretstream_xchacha20poly1305_KEYBYTES]; + + crypto_hash_sha256(hash,MESSAGE, MESSAGE_LEN); + + #define PASSWORD sequence + #define KEY_LEN crypto_box_SEEDBYTES + + + + /////////we use the Hash of the Password as Salt, not perfect but still a good solution. + + unsigned char key[KEY_LEN]; + + if (crypto_pwhash + (key, sizeof key, PASSWORD, strlen(PASSWORD), hash, + crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, + crypto_pwhash_ALG_DEFAULT) != 0) { + /* out of memory */ + } + + - - QFile file(AddressBook::writeableFile()); + auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); + QString target_encaddr_file = dir.filePath("addresslabels.dat.enc"); + QString target_decaddr_file = dir.filePath("addresslabels.dat"); + + FileEncryption::decrypt(target_decaddr_file, target_encaddr_file, key); + + QFile file(target_decaddr_file); file.open(QIODevice::ReadWrite | QIODevice::Truncate); QDataStream out(&file); // we will serialize the data into the file QList> contacts; + for(auto &item: allLabels) { QList c; @@ -456,10 +530,20 @@ void AddressBook::writeToStorage() c.push_back(item.getMyAddress()); c.push_back(item.getCid()); c.push_back(item.getAvatar()); - contacts.push_back(c); + contacts.push_back(c); + } out << QString("v2") << contacts; + qDebug()<<"schreibe in Datei: "; file.close(); + + + FileEncryption::encrypt(target_encaddr_file, target_decaddr_file , key); + QFile file1(target_decaddr_file); + file1.remove(); + + qDebug()<<"encrypt Addrbook writeToStorage"; + } QString AddressBook::writeableFile() diff --git a/src/chatmodel.cpp b/src/chatmodel.cpp index f5bf1b6..4db379b 100644 --- a/src/chatmodel.cpp +++ b/src/chatmodel.cpp @@ -163,7 +163,7 @@ void MainWindow::renderContactRequest(){ - if ((c.second.isOutgoing() == false) && (label_contact == c.second.getRequestZaddr())) + if ((c.second.isOutgoing() == false) && (label_contact == c.second.getRequestZaddr() && (c.second.getMemo().startsWith("{") == false))) { @@ -194,12 +194,12 @@ void MainWindow::renderContactRequest(){ QString label_contactold = index.data(Qt::DisplayRole).toString(); QStandardItemModel* contactMemo = new QStandardItemModel(); - if ((c.second.isOutgoing() == false) && (label_contactold == c.second.getContact())) + if ((c.second.isOutgoing() == false) && (label_contactold == c.second.getContact()) && (c.second.getMemo().startsWith("{") == false)) { QStandardItem* Items = new QStandardItem(c.second.getMemo()); - contactMemo->appendRow(Items); + contactMemo->appendRow(Items); requestContact.requestMemo->setModel(contactMemo); requestContact.requestMemo->show(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 338c8b2..61657a1 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -338,20 +338,20 @@ void MainWindow::closeEvent(QCloseEvent* event) { auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); // auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); - QString source_file = dir.filePath("addresslabels.dat"); - QString target_enc_file = dir.filePath("addresslabels.dat.enc"); + // QString source_file = dir.filePath("addresslabels.dat"); + // QString target_enc_file = dir.filePath("addresslabels.dat.enc"); QString sourceWallet_file = dirwallet; QString target_encWallet_file = dirwalletenc; - FileEncryption::encrypt(target_enc_file, source_file, key); + // FileEncryption::encrypt(target_enc_file, source_file, key); FileEncryption::encrypt(target_encWallet_file, sourceWallet_file, key); ///////////////// we rename the plaintext wallet.dat to Backup, for testing. QFile wallet(dirwallet); - QFile address(dir.filePath("addresslabels.dat")); + // QFile address(dir.filePath("addresslabels.dat")); wallet.remove(); - address.remove(); + //address.remove(); } @@ -432,18 +432,18 @@ void MainWindow::encryptWallet() { auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); - QString source_file = dir.filePath("addresslabels.dat"); - QString target_enc_file = dir.filePath("addresslabels.dat.enc"); + // QString source_file = dir.filePath("addresslabels.dat"); + // QString target_enc_file = dir.filePath("addresslabels.dat.enc"); QString sourceWallet_file = dirwallet; QString target_encWallet_file = dirwalletenc; - FileEncryption::encrypt(target_enc_file, source_file, key); + // FileEncryption::encrypt(target_enc_file, source_file, key); FileEncryption::encrypt(target_encWallet_file, sourceWallet_file, key); QFile wallet(dirwallet); - QFile address(dir.filePath("addresslabels.dat")); + // QFile address(dir.filePath("addresslabels.dat")); wallet.rename(dirwalletbackup); - address.rename(dir.filePath("addresslabels.datBackup")); + // address.rename(dir.filePath("addresslabels.datBackup")); QMessageBox::information(this, tr("Wallet Encryption Success"), QString("Successfully encrypted your wallet"), @@ -520,11 +520,11 @@ void MainWindow::removeWalletEncryption() { auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); QString target_encwallet_file = dirwalletenc; QString target_decwallet_file = dirwallet; - QString target_encaddr_file = dir.filePath("addresslabels.dat.enc"); - QString target_decaddr_file = dir.filePath("addresslabels.dat"); + // QString target_encaddr_file = dir.filePath("addresslabels.dat.enc"); + // QString target_decaddr_file = dir.filePath("addresslabels.dat"); FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, key); - FileEncryption::decrypt(target_decaddr_file, target_encaddr_file, key); + // FileEncryption::decrypt(target_decaddr_file, target_encaddr_file, key); QFile filencrypted(dirwalletenc); QFile wallet(dirwallet); @@ -595,11 +595,11 @@ void MainWindow::removeWalletEncryptionStartUp() { auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); QString target_encwallet_file = dirwalletenc; QString target_decwallet_file = dirwallet; - QString target_encaddr_file = dir.filePath("addresslabels.dat.enc"); - QString target_decaddr_file = dir.filePath("addresslabels.dat"); + // QString target_encaddr_file = dir.filePath("addresslabels.dat.enc"); + // QString target_decaddr_file = dir.filePath("addresslabels.dat"); FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, key); - FileEncryption::decrypt(target_decaddr_file, target_encaddr_file, key); + // FileEncryption::decrypt(target_decaddr_file, target_encaddr_file, key); } From da2ea0fbf57bed138ba5cd92e8ed18702b7fbf03 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Fri, 12 Jun 2020 23:55:37 +0200 Subject: [PATCH 03/78] fix zaddr for deposit hush dialog #140 --- src/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 61657a1..ef5845b 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1169,7 +1169,7 @@ void MainWindow::setupBalancesTab() { QList allAddresses; allAddresses = getRPC()->getModel()->getAllZAddresses(); - QString depositzaddr = allAddresses[1]; + QString depositzaddr = allAddresses[0]; deposithush.qrcodeDisplayDeposit->setQrcodeString(depositzaddr); deposithush.zaddr->setText(depositzaddr); From 05004478d19ccb7c65b277641088c7004a07ce34 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sat, 13 Jun 2020 00:40:42 +0200 Subject: [PATCH 04/78] auto create hushchat zaddr at contact request --- src/DataStore/ChatDataStore.cpp | 12 ++++++++++++ src/DataStore/ChatDataStore.h | 6 +++++- src/addressbook.cpp | 2 +- src/chatmodel.cpp | 24 ++++++++++-------------- src/contactrequest.ui | 16 ---------------- 5 files changed, 28 insertions(+), 32 deletions(-) diff --git a/src/DataStore/ChatDataStore.cpp b/src/DataStore/ChatDataStore.cpp index 82f9db3..bcb1751 100644 --- a/src/DataStore/ChatDataStore.cpp +++ b/src/DataStore/ChatDataStore.cpp @@ -39,6 +39,18 @@ QString ChatDataStore::getPassword() return _password; } +QString ChatDataStore::getSendZaddr() +{ + + return _zaddr; +} + +void ChatDataStore::setSendZaddr(QString zaddr) +{ + + _zaddr = zaddr; +} + void ChatDataStore::setPassword(QString password) { diff --git a/src/DataStore/ChatDataStore.h b/src/DataStore/ChatDataStore.h index c1233b6..aa05662 100644 --- a/src/DataStore/ChatDataStore.h +++ b/src/DataStore/ChatDataStore.h @@ -26,9 +26,13 @@ class ChatDataStore std::map getAllOldContactRequests(); std::map getAllMemos(); QString getPassword(); + QString getSendZaddr(); - void setPassword(QString Password); + void setSendZaddr(QString Password); QString _password; + + void setPassword(QString zaddr); + QString _zaddr; QString dump(); diff --git a/src/addressbook.cpp b/src/addressbook.cpp index 5061438..3897678 100644 --- a/src/addressbook.cpp +++ b/src/addressbook.cpp @@ -439,7 +439,7 @@ void AddressBook::readFromStorage() in >> stuff; //////////////found old addrbook, and rename it to .bak - if (version != "v2") + if (version == "v1") { auto filename = QStringLiteral("addresslabels.dat"); auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); diff --git a/src/chatmodel.cpp b/src/chatmodel.cpp index 4db379b..91c51b2 100644 --- a/src/chatmodel.cpp +++ b/src/chatmodel.cpp @@ -710,8 +710,8 @@ void::MainWindow::addContact() request.setupUi(&dialog); Settings::saveRestore(&dialog); -QObject::connect(request.newZaddr, &QPushButton::clicked, [&] () { - try + + try { bool sapling = true; rpc->createNewZaddr(sapling, [=] (json reply) { @@ -720,6 +720,9 @@ QObject::connect(request.newZaddr, &QPushButton::clicked, [&] () { request.myzaddr->setText(myAddr); ui->listReceiveAddresses->insertItem(0, myAddr); ui->listReceiveAddresses->setCurrentIndex(0); + DataStore::getChatDataStore()->setSendZaddr(myAddr); + + qDebug()<<"Zaddr: "<getSendZaddr(); QString type = "Cont"; QString addr = contactRequest.getReceiverAddress(); @@ -835,16 +841,6 @@ void MainWindow::ContactRequest() { return; } - if (contactRequest.getSenderAddress().size() > 80) { - - QMessageBox msg(QMessageBox::Critical, tr("Missing HushChat Address"), - tr("You have to create your HushChat address to send a contact request,\n"), - QMessageBox::Ok, this); - - msg.exec(); - return; - } - int max = 235; QString chattext = contactRequest.getMemo();; int size = chattext.size(); diff --git a/src/contactrequest.ui b/src/contactrequest.ui index d187eb1..6f6a529 100644 --- a/src/contactrequest.ui +++ b/src/contactrequest.ui @@ -122,22 +122,6 @@ - - - - - 0 - 0 - - - - Create New Address - - - false - - - From c8553cee151e7cabe70fb54e5e0db6ad5eb76b92 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sat, 13 Jun 2020 00:44:53 +0200 Subject: [PATCH 05/78] Disallow chat input when no contact is selected #137 --- src/mainwindow.cpp | 3 +++ src/mainwindow.ui | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index ef5845b..d839cea 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1344,6 +1344,8 @@ void MainWindow::setupTransactionsTab() { void MainWindow::setupchatTab() { + ui->memoTxtChat->setEnabled(false); + /////////////Setting Icons for Chattab and different themes auto theme = Settings::getInstance()->get_theme_name(); @@ -1530,6 +1532,7 @@ void MainWindow::setupchatTab() { ui->listContactWidget->addAction(HushAction); ui->listContactWidget->addAction(requestHushAction); ui->listContactWidget->addAction(subatomicAction); + ui->memoTxtChat->setEnabled(true); /*QObject::connect(requestHushAction, &QAction::triggered, [=]() { QModelIndex index = ui->listContactWidget->currentIndex(); diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 8471227..cf6fa57 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -59,7 +59,7 @@ - 2 + 5 From 1c020691b15c17b4e6f612108cf039cfd66e48e7 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sat, 13 Jun 2020 01:01:26 +0200 Subject: [PATCH 06/78] backup encrypted addresslabels to restore it later if needed --- src/chatmodel.cpp | 20 +------------------- src/firsttimewizard.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/src/chatmodel.cpp b/src/chatmodel.cpp index 91c51b2..a563398 100644 --- a/src/chatmodel.cpp +++ b/src/chatmodel.cpp @@ -734,25 +734,7 @@ void::MainWindow::addContact() QString cid = QUuid::createUuid().toString(QUuid::WithoutBraces); - - QObject::connect(request.sendRequestButton, &QPushButton::clicked, [&] () { - - QString addr = request.zaddr->text(); - QString myAddr = request.myzaddr->text().trimmed(); - QString memo = request.memorequest->toPlainText().trimmed(); - QString avatar = QString(":/icons/res/") + request.comboBoxAvatar->currentText() + QString(".png"); - QString label = request.labelRequest->text().trimmed(); - - - contactRequest.setSenderAddress(myAddr); - contactRequest.setReceiverAddress(addr); - contactRequest.setMemo(memo); - contactRequest.setCid(cid); - contactRequest.setAvatar(avatar); - contactRequest.setLabel(label); - - }); - + QObject::connect(request.sendRequestButton, &QPushButton::clicked, this, &MainWindow::saveandsendContact); diff --git a/src/firsttimewizard.cpp b/src/firsttimewizard.cpp index 5ef96bb..ca22f4f 100644 --- a/src/firsttimewizard.cpp +++ b/src/firsttimewizard.cpp @@ -16,6 +16,18 @@ FirstTimeWizard::FirstTimeWizard(bool dangerous, QString server) this->dangerous = dangerous; this->server = server; + ////backup addresslabels.dat if there is one, to restore it later + + auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); + QString addressbook = dir.filePath("addresslabels.dat.enc"); + QFile file(addressbook); + + if (file.exists()) + { + file.rename(dir.filePath("addresslabels.dat.enc-backup")); + + } + // Create the pages setPage(Page_NewOrRestore, new NewOrRestorePage(this)); setPage(Page_New, new NewSeedPage(this)); From 6310c6bf0d05639e92bc6b9bab3b2d05165123b6 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 14 Jun 2020 08:15:06 +0200 Subject: [PATCH 07/78] add blake3 crate --- lib/Cargo.lock | 16 ++++++++++++++++ lib/Cargo.toml | 1 + 2 files changed, 17 insertions(+) diff --git a/lib/Cargo.lock b/lib/Cargo.lock index 3c5dbf4..baf8931 100644 --- a/lib/Cargo.lock +++ b/lib/Cargo.lock @@ -194,6 +194,20 @@ dependencies = [ "constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "blake3" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayref 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "crypto-mac 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "block-buffer" version = "0.7.3" @@ -1175,6 +1189,7 @@ dependencies = [ name = "qtlib" version = "0.1.0" dependencies = [ + "blake3 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", "silentdragonlitelib 0.1.0 (git+https://github.com/MyHush/silentdragonlite-cli?rev=d2887d07879a93bdd9b2c8bd12504bb977e82fe0)", @@ -2461,6 +2476,7 @@ dependencies = [ "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" "checksum blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a" "checksum blake2s_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ab9e07352b829279624ceb7c64adb4f585dacdb81d35cafae81139ccd617cf44" +"checksum blake3 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "423897d97e11b810c9da22458400b28ec866991c711409073662eb34dc44bfff" "checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" "checksum block-cipher-trait 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1c924d49bd09e7c06003acda26cd9742e796e34282ec6c1189404dee0c1f4774" "checksum block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" diff --git a/lib/Cargo.toml b/lib/Cargo.toml index 39a70e9..a0e526e 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -11,4 +11,5 @@ crate-type = ["staticlib"] [dependencies] libc = "0.2.58" lazy_static = "1.4.0" +blake3 = "0.3.4" silentdragonlitelib = { git = "https://github.com/MyHush/silentdragonlite-cli", rev = "d2887d07879a93bdd9b2c8bd12504bb977e82fe0" } From b013eeff4bd917d03b977bcc4634a6b00b953d37 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 14 Jun 2020 08:15:32 +0200 Subject: [PATCH 08/78] use blake3 to hash the passphrase --- lib/silentdragonlitelib.h | 1 + lib/src/lib.rs | 24 +++++ src/firsttimewizard.cpp | 27 +++++- src/mainwindow.cpp | 183 +++++++++++++------------------------- 4 files changed, 109 insertions(+), 126 deletions(-) diff --git a/lib/silentdragonlitelib.h b/lib/silentdragonlitelib.h index 4546e70..fdea5db 100644 --- a/lib/silentdragonlitelib.h +++ b/lib/silentdragonlitelib.h @@ -13,6 +13,7 @@ extern char * litelib_initialize_new_from_phrase extern char * litelib_initialize_existing (bool dangerous, const char* server); extern char * litelib_execute (const char* s, const char* args); extern void litelib_rust_free_string (char* s); +extern char * blake3_PW (char* pw); #ifdef __cplusplus } diff --git a/lib/src/lib.rs b/lib/src/lib.rs index 8be7c55..4ac3bf0 100644 --- a/lib/src/lib.rs +++ b/lib/src/lib.rs @@ -29,6 +29,30 @@ pub extern fn litelib_wallet_exists(chain_name: *const c_char) -> bool { println!("Wallet exists: {}", config.wallet_exists()); config.wallet_exists() +} + +//////hash blake3 + +#[no_mangle] +pub extern fn blake3_PW(pw: *const c_char) -> *mut c_char{ + + let passwd = unsafe { + assert!(!pw.is_null()); + + CStr::from_ptr(pw).to_string_lossy().into_owned() + }; + + let data = passwd.as_bytes(); +// Hash an input all at once. +let hash1 = blake3::hash(data).to_hex(); +println!("\nBlake3 Hash: {}", hash1); + +//let sttring = CString::new(hash1).unwrap(); +let e_str = CString::new(format!("{}", hash1)).unwrap(); +return e_str.into_raw(); + + + } /// Create a new wallet and return the seed for the newly created wallet. diff --git a/src/firsttimewizard.cpp b/src/firsttimewizard.cpp index 5ef96bb..18f5487 100644 --- a/src/firsttimewizard.cpp +++ b/src/firsttimewizard.cpp @@ -16,6 +16,18 @@ FirstTimeWizard::FirstTimeWizard(bool dangerous, QString server) this->dangerous = dangerous; this->server = server; + ////backup addresslabels.dat if there is one, to restore it later + + auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); + QString addressbook = dir.filePath("addresslabels.dat.enc"); + QFile file(addressbook); + + if (file.exists()) + { + file.rename(dir.filePath("addresslabels.dat.enc-backup")); + + } + // Create the pages setPage(Page_NewOrRestore, new NewOrRestorePage(this)); setPage(Page_New, new NewSeedPage(this)); @@ -60,9 +72,18 @@ NewOrRestorePage::NewOrRestorePage(FirstTimeWizard *parent) : QWizardPage(parent form.radioRestoreWallet->setEnabled(true); form.radioNewWallet->setEnabled(true); form.radioNewWallet->setChecked(true); - - -DataStore::getChatDataStore()->setPassword(Password); + int length = Password.length(); + char *sequence = NULL; + sequence = new char[length+1]; + strncpy(sequence, Password.toUtf8(), length +1); + + QString str = blake3_PW(sequence); + qDebug() << str; + DataStore::getChatDataStore()->setPassword(str); + + char *sequence1 = NULL; + sequence1 = new char[length]; + strncpy(sequence1, str.toUtf8(), length); //main->setPassword(Password); //qDebug()<<"Objekt gesetzt"; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 338c8b2..df05260 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -33,6 +33,7 @@ #include "Crypto/FileEncryption.h" #include "DataStore/DataStore.h" #include "firsttimewizard.h" +#include "../lib/silentdragonlitelib.h" using json = nlohmann::json; @@ -305,53 +306,28 @@ void MainWindow::closeEvent(QCloseEvent* event) { fileoldencryption.remove(); // Encrypt our wallet.dat - QString str = DataStore::getChatDataStore()->getPassword(); - // QString str = ed.txtPassword->text(); // data comes from user inputs - int length = str.length(); + QString passphraseHash = DataStore::getChatDataStore()->getPassword(); + int length = passphraseHash.length(); - char *sequence = NULL; - sequence = new char[length+1]; - strncpy(sequence, str.toLocal8Bit(), length +1); - - #define MESSAGE ((const unsigned char *) sequence) - #define MESSAGE_LEN length - - unsigned char hash[crypto_secretstream_xchacha20poly1305_KEYBYTES]; - - crypto_hash_sha256(hash,MESSAGE, MESSAGE_LEN); - - #define PASSWORD sequence - #define KEY_LEN crypto_box_SEEDBYTES + char *sequence1 = NULL; + sequence1 = new char[length+1]; + strncpy(sequence1, passphraseHash.toUtf8(), length+1); - - - /////////we use the Hash of the Password as Salt, not perfect but still a good solution. - - unsigned char key[KEY_LEN]; + #define PassphraseHashEnd ((const unsigned char *) sequence1) + #define MESSAGE_LEN length - if (crypto_pwhash - (key, sizeof key, PASSWORD, strlen(PASSWORD), hash, - crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, - crypto_pwhash_ALG_DEFAULT) != 0) { - /* out of memory */ -} - + #define PASSWORD sequence + #define KEY_LEN crypto_box_SEEDBYTES + auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); - // auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); - QString source_file = dir.filePath("addresslabels.dat"); - QString target_enc_file = dir.filePath("addresslabels.dat.enc"); QString sourceWallet_file = dirwallet; QString target_encWallet_file = dirwalletenc; - FileEncryption::encrypt(target_enc_file, source_file, key); - FileEncryption::encrypt(target_encWallet_file, sourceWallet_file, key); - - ///////////////// we rename the plaintext wallet.dat to Backup, for testing. + // FileEncryption::encrypt(target_enc_file, source_file, key); + FileEncryption::encrypt(target_encWallet_file, sourceWallet_file, PassphraseHashEnd); QFile wallet(dirwallet); - QFile address(dir.filePath("addresslabels.dat")); wallet.remove(); - address.remove(); } @@ -401,49 +377,34 @@ void MainWindow::encryptWallet() { QString passphrase = ed.txtPassword->text(); // data comes from user inputs int length = passphrase.length(); - DataStore::getChatDataStore()->setPassword(passphrase); - - char *sequence = NULL; - sequence = new char[length+1]; - strncpy(sequence, passphrase.toLocal8Bit(), length +1); - - #define MESSAGE ((const unsigned char *) sequence) - #define MESSAGE_LEN length - - unsigned char hash[crypto_secretstream_xchacha20poly1305_KEYBYTES]; - - crypto_hash_sha256(hash,MESSAGE, MESSAGE_LEN); - - #define PASSWORD sequence - #define KEY_LEN crypto_box_SEEDBYTES + - + char *sequence = NULL; + sequence = new char[length+1]; + strncpy(sequence, passphrase.toUtf8(), length +1); + + QString passphraseHash = blake3_PW(sequence); + DataStore::getChatDataStore()->setPassword(passphraseHash); - /////////we use the Hash of the Password as Salt, not perfect but still a good solution. + char *sequence1 = NULL; + sequence1 = new char[length+1]; + strncpy(sequence1, passphraseHash.toUtf8(), length+1); - unsigned char key[KEY_LEN]; + #define MESSAGE1 ((const unsigned char *) sequence1) + #define MESSAGE_LEN length - if (crypto_pwhash - (key, sizeof key, PASSWORD, strlen(PASSWORD), hash, - crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, - crypto_pwhash_ALG_DEFAULT) != 0) { - /* out of memory */ -} + #define PASSWORD sequence + #define KEY_LEN crypto_box_SEEDBYTES auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); - QString source_file = dir.filePath("addresslabels.dat"); - QString target_enc_file = dir.filePath("addresslabels.dat.enc"); QString sourceWallet_file = dirwallet; QString target_encWallet_file = dirwalletenc; - - FileEncryption::encrypt(target_enc_file, source_file, key); - FileEncryption::encrypt(target_encWallet_file, sourceWallet_file, key); + + FileEncryption::encrypt(target_encWallet_file, sourceWallet_file, MESSAGE1); QFile wallet(dirwallet); - QFile address(dir.filePath("addresslabels.dat")); wallet.rename(dirwalletbackup); - address.rename(dir.filePath("addresslabels.datBackup")); QMessageBox::information(this, tr("Wallet Encryption Success"), QString("Successfully encrypted your wallet"), @@ -484,47 +445,34 @@ void MainWindow::removeWalletEncryption() { if (d.exec() == QDialog::Accepted) { - QString str = ed.txtPassword->text(); // data comes from user inputs - int length = str.length(); + QString passphrase = ed.txtPassword->text(); // data comes from user inputs + int length = passphrase.length(); char *sequence = NULL; sequence = new char[length+1]; - strncpy(sequence, str.toLocal8Bit(), length +1); + strncpy(sequence, passphrase.toUtf8(), length +1); + + QString passphraseHash = blake3_PW(sequence); - #define MESSAGE ((const unsigned char *) sequence) - #define MESSAGE_LEN length + char *sequence1 = NULL; + sequence1 = new char[length+1]; + strncpy(sequence1, passphraseHash.toUtf8(), length+1); - unsigned char hash[crypto_secretstream_xchacha20poly1305_KEYBYTES]; + #define MESSAGE3 ((const unsigned char *) sequence1) + #define MESSAGE3_LEN length - crypto_hash_sha256(hash,MESSAGE, MESSAGE_LEN); #define PASSWORD sequence #define KEY_LEN crypto_box_SEEDBYTES - - - /////////we use the Hash of the Password as Salt, not perfect but still a good solution. - - unsigned char key[KEY_LEN]; - - if (crypto_pwhash - (key, sizeof key, PASSWORD, strlen(PASSWORD), hash, - crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, - crypto_pwhash_ALG_DEFAULT) != 0) { - /* out of memory */ -} - - auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); QString target_encwallet_file = dirwalletenc; QString target_decwallet_file = dirwallet; - QString target_encaddr_file = dir.filePath("addresslabels.dat.enc"); - QString target_decaddr_file = dir.filePath("addresslabels.dat"); - FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, key); - FileEncryption::decrypt(target_decaddr_file, target_encaddr_file, key); + FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, MESSAGE3); + QFile filencrypted(dirwalletenc); QFile wallet(dirwallet); @@ -556,56 +504,42 @@ void MainWindow::removeWalletEncryptionStartUp() { QDialog d(this); Ui_startup ed; ed.setupUi(&d); - + if (d.exec() == QDialog::Accepted) { - QString password = ed.txtPassword->text(); // data comes from user inputs - int length = password.length(); - DataStore::getChatDataStore()->setPassword(password); + QString passphrase = ed.txtPassword->text(); // data comes from user inputs + int length = passphrase.length(); + char *sequence = NULL; sequence = new char[length+1]; - strncpy(sequence, password.toLocal8Bit(), length +1); + strncpy(sequence, passphrase.toUtf8(), length +1); + + QString passphraseHash = blake3_PW(sequence); + DataStore::getChatDataStore()->setPassword(passphraseHash); + + char *sequence1 = NULL; + sequence1 = new char[length+1]; + strncpy(sequence1, passphraseHash.toUtf8(), length+1); #define MESSAGE ((const unsigned char *) sequence) #define MESSAGE_LEN length - - unsigned char hash[crypto_secretstream_xchacha20poly1305_KEYBYTES]; - - crypto_hash_sha256(hash,MESSAGE, MESSAGE_LEN); + #define hash ((const unsigned char *) sequence1) #define PASSWORD sequence - #define KEY_LEN crypto_box_SEEDBYTES - - - - /////////we use the Hash of the Password as Salt, not perfect but still a good solution. - - unsigned char key[KEY_LEN]; - - if (crypto_pwhash - (key, sizeof key, PASSWORD, strlen(PASSWORD), hash, - crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, - crypto_pwhash_ALG_DEFAULT) != 0) { - /* out of memory */ - } - + #define KEY_LEN crypto_box_SEEDBYTES { auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); QString target_encwallet_file = dirwalletenc; QString target_decwallet_file = dirwallet; - QString target_encaddr_file = dir.filePath("addresslabels.dat.enc"); - QString target_decaddr_file = dir.filePath("addresslabels.dat"); - FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, key); - FileEncryption::decrypt(target_decaddr_file, target_encaddr_file, key); + FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, hash); } auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); QFile wallet(dirwallet); - //QFile backup(dirHome.filePath(".silentdragonlite/silentdragonlite-wallet.datBACKUP"));*/ if (wallet.size() > 0) { @@ -1169,7 +1103,7 @@ void MainWindow::setupBalancesTab() { QList allAddresses; allAddresses = getRPC()->getModel()->getAllZAddresses(); - QString depositzaddr = allAddresses[1]; + QString depositzaddr = allAddresses[0]; deposithush.qrcodeDisplayDeposit->setQrcodeString(depositzaddr); deposithush.zaddr->setText(depositzaddr); @@ -1344,6 +1278,8 @@ void MainWindow::setupTransactionsTab() { void MainWindow::setupchatTab() { + ui->memoTxtChat->setEnabled(false); + /////////////Setting Icons for Chattab and different themes auto theme = Settings::getInstance()->get_theme_name(); @@ -1530,6 +1466,7 @@ void MainWindow::setupchatTab() { ui->listContactWidget->addAction(HushAction); ui->listContactWidget->addAction(requestHushAction); ui->listContactWidget->addAction(subatomicAction); + ui->memoTxtChat->setEnabled(true); /*QObject::connect(requestHushAction, &QAction::triggered, [=]() { QModelIndex index = ui->listContactWidget->currentIndex(); From e0d071296a471150beeb774fd55fe65c8c735426 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 14 Jun 2020 08:49:54 +0200 Subject: [PATCH 09/78] use blake3 for messages --- src/chatmodel.cpp | 53 ++++++++++++++-------------------------------- src/controller.cpp | 39 +++++++++++----------------------- 2 files changed, 28 insertions(+), 64 deletions(-) diff --git a/src/chatmodel.cpp b/src/chatmodel.cpp index f5bf1b6..c27c495 100644 --- a/src/chatmodel.cpp +++ b/src/chatmodel.cpp @@ -443,43 +443,29 @@ Tx MainWindow::createTxFromChatPage() { int lengthmemo = memoplain.length(); char *memoplainchar = NULL; - memoplainchar = new char[lengthmemo+1]; - strncpy(memoplainchar, memoplain.toLocal8Bit(), lengthmemo +1); - - /////////We convert the CID from QString to unsigned char*, so we can encrypt it later - int lengthcid = cid.length(); - - char *cidchar = NULL; - cidchar = new char[lengthcid+1]; - strncpy(cidchar, cid.toLocal8Bit(), lengthcid +1); - - - - QString pubkey = this->getPubkeyByAddress(addr); - QString passphrase = DataStore::getChatDataStore()->getPassword(); - QString hashEncryptionKey = passphrase; - int length = hashEncryptionKey.length(); + memoplainchar = new char[lengthmemo+1]; + strncpy(memoplainchar, memoplain.toUtf8(), lengthmemo +1); + QString pubkey = this->getPubkeyByAddress(addr); + QString passphraseHash = DataStore::getChatDataStore()->getPassword(); + int length = passphraseHash.length(); ////////////////Generate the secretkey for our message encryption - char *hashEncryptionKeyraw = NULL; - hashEncryptionKeyraw = new char[length+1]; - strncpy(hashEncryptionKeyraw, hashEncryptionKey.toLocal8Bit(), length +1); + char *hashEncryptionKeyraw = NULL; + hashEncryptionKeyraw = new char[length+1]; + strncpy(hashEncryptionKeyraw, passphraseHash.toUtf8(), length+1); #define MESSAGEAS1 ((const unsigned char *) hashEncryptionKeyraw) #define MESSAGEAS1_LEN length - unsigned char hash[crypto_kx_SEEDBYTES]; - - crypto_hash_sha256(hash,MESSAGEAS1, MESSAGEAS1_LEN); - + unsigned char sk[crypto_kx_SECRETKEYBYTES]; unsigned char pk[crypto_kx_PUBLICKEYBYTES]; unsigned char server_rx[crypto_kx_SESSIONKEYBYTES], server_tx[crypto_kx_SESSIONKEYBYTES]; if (crypto_kx_seed_keypair(pk,sk, - hash) !=0) { + MESSAGEAS1) !=0) { } ////////////////Get the pubkey from Bob, so we can create the share key @@ -784,29 +770,22 @@ Tx MainWindow::createTxForSafeContactRequest() QString memo = contactRequest.getMemo(); - // QString privkey = rpc->fetchPrivKey(myAddr); QString passphrase = DataStore::getChatDataStore()->getPassword(); - QString hashEncryptionKey = passphrase; - int length = hashEncryptionKey.length(); + int length = passphrase.length(); ////////////////Generate the secretkey for our message encryption - char *hashEncryptionKeyraw = NULL; - hashEncryptionKeyraw = new char[length+1]; - strncpy(hashEncryptionKeyraw, hashEncryptionKey.toLocal8Bit(), length +1); + char *hashEncryptionKeyraw = NULL; + hashEncryptionKeyraw = new char[length+1]; + strncpy(hashEncryptionKeyraw, passphrase.toUtf8(), length +1); + #define MESSAGEAS1 ((const unsigned char *) hashEncryptionKeyraw) #define MESSAGEAS1_LEN length - - unsigned char hash[crypto_kx_SEEDBYTES]; - - crypto_hash_sha256(hash,MESSAGEAS1, MESSAGEAS1_LEN); - - unsigned char sk[crypto_kx_SECRETKEYBYTES]; unsigned char pk[crypto_kx_PUBLICKEYBYTES]; if (crypto_kx_seed_keypair(pk,sk, - hash) !=0) { + MESSAGEAS1) !=0) { } QString publicKey = QByteArray(reinterpret_cast(pk), crypto_kx_PUBLICKEYBYTES).toHex(); diff --git a/src/controller.cpp b/src/controller.cpp index 7ce4c2d..72f383d 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -1026,32 +1026,25 @@ void Controller::refreshTransactions() { { QString passphrase = DataStore::getChatDataStore()->getPassword(); - QString hashEncryptionKey = passphrase; - int length = hashEncryptionKey.length(); + int length = passphrase.length(); ////////////////Generate the secretkey for our message encryption char *hashEncryptionKeyraw = NULL; hashEncryptionKeyraw = new char[length+1]; - strncpy(hashEncryptionKeyraw, hashEncryptionKey.toLocal8Bit(), length +1); + strncpy(hashEncryptionKeyraw, passphrase.toUtf8(), length +1); + const QByteArray pubkeyBobArray = QByteArray::fromHex(publickey.toLatin1()); const unsigned char *pubkeyBob = reinterpret_cast(pubkeyBobArray.constData()); - - - #define MESSAGEAS1 ((const unsigned char *) hashEncryptionKeyraw)/////////// - #define MESSAGEAS1_LEN length + #define MESSAGEAS1_LEN length - - unsigned char hash1[crypto_kx_SEEDBYTES]; - - crypto_hash_sha256(hash1,MESSAGEAS1, MESSAGEAS1_LEN); unsigned char sk[crypto_kx_SECRETKEYBYTES]; unsigned char pk[crypto_kx_PUBLICKEYBYTES]; if (crypto_kx_seed_keypair(pk,sk, - hash1) !=0) { + MESSAGEAS1) !=0) { } unsigned char server_rx[crypto_kx_SESSIONKEYBYTES], server_tx[crypto_kx_SESSIONKEYBYTES]; @@ -1292,32 +1285,24 @@ void Controller::refreshTransactions() { }else{} QString passphrase = DataStore::getChatDataStore()->getPassword(); - QString hashEncryptionKey = passphrase; - int length = hashEncryptionKey.length(); + int length = passphrase.length(); char *hashEncryptionKeyraw = NULL; hashEncryptionKeyraw = new char[length+1]; - strncpy(hashEncryptionKeyraw, hashEncryptionKey.toLocal8Bit(), length +1); - - //const QByteArray ba2 = QByteArray::fromHex(hashEncryptionKey.toLatin1()); - // const unsigned char *hashEncryptionKeyraw = reinterpret_cast(ba2.constData()); + strncpy(hashEncryptionKeyraw, passphrase.toUtf8(), length +1); const QByteArray pubkeyBobArray = QByteArray::fromHex(publickey.toLatin1()); const unsigned char *pubkeyBob = reinterpret_cast(pubkeyBobArray.constData()); - #define MESSAGEAS1 ((const unsigned char *) hashEncryptionKeyraw)/////////// - #define MESSAGEAS1_LEN length - - - unsigned char hash1[crypto_kx_SEEDBYTES]; + #define MESSAGEAS1 ((const unsigned char *) hashEncryptionKeyraw)/////////// + #define MESSAGEAS1_LEN length - crypto_hash_sha256(hash1,MESSAGEAS1, MESSAGEAS1_LEN); - unsigned char sk[crypto_kx_SECRETKEYBYTES]; - unsigned char pk[crypto_kx_PUBLICKEYBYTES]; + unsigned char sk[crypto_kx_SECRETKEYBYTES]; + unsigned char pk[crypto_kx_PUBLICKEYBYTES]; if (crypto_kx_seed_keypair(pk,sk, - hash1) !=0) { + MESSAGEAS1) !=0) { } From 553d929f3a7543c55381894058ed7d3777e68e68 Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Sun, 14 Jun 2020 21:19:22 +0200 Subject: [PATCH 10/78] use blake3 for salt and pwhash for passphrase hash --- src/chatmodel.cpp | 2 +- src/controller.cpp | 6 ++-- src/firsttimewizard.cpp | 44 +++++++++++++++++++------- src/mainwindow.cpp | 68 ++++++++++++++++++++++++++++++++--------- 4 files changed, 90 insertions(+), 30 deletions(-) diff --git a/src/chatmodel.cpp b/src/chatmodel.cpp index c27c495..876c296 100644 --- a/src/chatmodel.cpp +++ b/src/chatmodel.cpp @@ -443,7 +443,7 @@ Tx MainWindow::createTxFromChatPage() { int lengthmemo = memoplain.length(); char *memoplainchar = NULL; - memoplainchar = new char[lengthmemo+1]; + memoplainchar = new char[lengthmemo+2]; strncpy(memoplainchar, memoplain.toUtf8(), lengthmemo +1); QString pubkey = this->getPubkeyByAddress(addr); diff --git a/src/controller.cpp b/src/controller.cpp index 72f383d..6dfda83 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -1061,7 +1061,7 @@ void Controller::refreshTransactions() { } - const QByteArray ba = QByteArray::fromHex(memo.toLatin1()); + const QByteArray ba = QByteArray::fromHex(memo.toUtf8()); const unsigned char *encryptedMemo = reinterpret_cast(ba.constData()); const QByteArray ba1 = QByteArray::fromHex(headerbytes.toLatin1()); @@ -1321,7 +1321,7 @@ void Controller::refreshTransactions() { - const QByteArray ba = QByteArray::fromHex(memo.toLatin1()); + const QByteArray ba = QByteArray::fromHex(memo.toUtf8()); const unsigned char *encryptedMemo = reinterpret_cast(ba.constData()); const QByteArray ba1 = QByteArray::fromHex(headerbytes.toLatin1()); @@ -1341,7 +1341,7 @@ void Controller::refreshTransactions() { //////Set the length of the decrypted message - unsigned char decrypted[MESSAGE1_LEN]; + unsigned char decrypted[MESSAGE1_LEN+1]; unsigned char tag[crypto_secretstream_xchacha20poly1305_TAG_FINAL]; crypto_secretstream_xchacha20poly1305_state state; diff --git a/src/firsttimewizard.cpp b/src/firsttimewizard.cpp index 18f5487..f3f3348 100644 --- a/src/firsttimewizard.cpp +++ b/src/firsttimewizard.cpp @@ -61,10 +61,13 @@ NewOrRestorePage::NewOrRestorePage(FirstTimeWizard *parent) : QWizardPage(parent auto fnPasswordEdited = [=](const QString&) { // Enable the Finish button if the passwords match. - QString Password = form.txtPassword->text(); + QString passphraseBlank = form.txtPassword->text(); + + QString passphrase = QString("HUSH3") + passphraseBlank + QString("SDL"); + if (!form.txtPassword->text().isEmpty() && - form.txtPassword->text() == form.txtConfirmPassword->text() && Password.size() >= 16) { + form.txtPassword->text() == form.txtConfirmPassword->text() && passphraseBlank.size() >= 16) { form.lblPasswordMatch->setText(""); parent->button(QWizard::CommitButton)->setEnabled(true); @@ -72,18 +75,37 @@ NewOrRestorePage::NewOrRestorePage(FirstTimeWizard *parent) : QWizardPage(parent form.radioRestoreWallet->setEnabled(true); form.radioNewWallet->setEnabled(true); form.radioNewWallet->setChecked(true); - int length = Password.length(); - char *sequence = NULL; - sequence = new char[length+1]; - strncpy(sequence, Password.toUtf8(), length +1); - QString str = blake3_PW(sequence); - qDebug() << str; - DataStore::getChatDataStore()->setPassword(str); + int length = passphrase.length(); + + char *sequence = NULL; + sequence = new char[length+1]; + strncpy(sequence, passphrase.toUtf8(), length +1); + + QString passphraseHash = blake3_PW(sequence); + char *sequence1 = NULL; - sequence1 = new char[length]; - strncpy(sequence1, str.toUtf8(), length); + sequence1 = new char[length+1]; + strncpy(sequence1, passphraseHash.toUtf8(), length+1); + + #define MESSAGE ((const unsigned char *) sequence) + #define MESSAGE_LEN length + #define hash ((const unsigned char *) sequence1) + + #define PASSWORD sequence + #define KEY_LEN crypto_box_SEEDBYTES + + unsigned char key[KEY_LEN]; + + if (crypto_pwhash + (key, sizeof key, PASSWORD, strlen(PASSWORD), hash, + crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, + crypto_pwhash_ALG_DEFAULT) != 0) { + /* out of memory */ +} + QString passphraseHash1 = QByteArray(reinterpret_cast(key), KEY_LEN).toHex(); + DataStore::getChatDataStore()->setPassword(passphraseHash1); //main->setPassword(Password); //qDebug()<<"Objekt gesetzt"; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index df05260..2184a06 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -318,13 +318,16 @@ void MainWindow::closeEvent(QCloseEvent* event) { #define PASSWORD sequence #define KEY_LEN crypto_box_SEEDBYTES + + const QByteArray ba = QByteArray::fromHex(passphraseHash.toLatin1()); + const unsigned char *encryptedMemo1 = reinterpret_cast(ba.constData()); auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); QString sourceWallet_file = dirwallet; QString target_encWallet_file = dirwalletenc; // FileEncryption::encrypt(target_enc_file, source_file, key); - FileEncryption::encrypt(target_encWallet_file, sourceWallet_file, PassphraseHashEnd); + FileEncryption::encrypt(target_encWallet_file, sourceWallet_file, encryptedMemo1); QFile wallet(dirwallet); wallet.remove(); @@ -375,7 +378,8 @@ void MainWindow::encryptWallet() { if (d.exec() == QDialog::Accepted) { - QString passphrase = ed.txtPassword->text(); // data comes from user inputs + QString passphraseBlank = ed.txtPassword->text(); // data comes from user inputs + QString passphrase = QString("HUSH3") + passphraseBlank + QString("SDL"); int length = passphrase.length(); @@ -390,18 +394,30 @@ void MainWindow::encryptWallet() { sequence1 = new char[length+1]; strncpy(sequence1, passphraseHash.toUtf8(), length+1); - #define MESSAGE1 ((const unsigned char *) sequence1) + #define MESSAGE ((const unsigned char *) sequence) #define MESSAGE_LEN length + #define hash ((const unsigned char *) sequence1) #define PASSWORD sequence #define KEY_LEN crypto_box_SEEDBYTES + unsigned char key[KEY_LEN]; + + if (crypto_pwhash + (key, sizeof key, PASSWORD, strlen(PASSWORD), hash, + crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, + crypto_pwhash_ALG_DEFAULT) != 0) { + /* out of memory */ +} + QString passphraseHash1 = QByteArray(reinterpret_cast(key), KEY_LEN).toHex(); + DataStore::getChatDataStore()->setPassword(passphraseHash1); + auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); QString sourceWallet_file = dirwallet; QString target_encWallet_file = dirwalletenc; - FileEncryption::encrypt(target_encWallet_file, sourceWallet_file, MESSAGE1); + FileEncryption::encrypt(target_encWallet_file, sourceWallet_file, key); QFile wallet(dirwallet); wallet.rename(dirwalletbackup); @@ -445,7 +461,10 @@ void MainWindow::removeWalletEncryption() { if (d.exec() == QDialog::Accepted) { - QString passphrase = ed.txtPassword->text(); // data comes from user inputs + QString passphraseBlank = ed.txtPassword->text(); // data comes from user inputs + + QString passphrase = QString("HUSH3") + passphraseBlank + QString("SDL"); + int length = passphrase.length(); char *sequence = NULL; @@ -458,20 +477,27 @@ void MainWindow::removeWalletEncryption() { sequence1 = new char[length+1]; strncpy(sequence1, passphraseHash.toUtf8(), length+1); - #define MESSAGE3 ((const unsigned char *) sequence1) - #define MESSAGE3_LEN length + #define hash ((const unsigned char *) sequence1) #define PASSWORD sequence #define KEY_LEN crypto_box_SEEDBYTES + unsigned char key[KEY_LEN]; + + if (crypto_pwhash + (key, sizeof key, PASSWORD, strlen(PASSWORD), hash, + crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, + crypto_pwhash_ALG_DEFAULT) != 0) { + /* out of memory */ +} auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); QString target_encwallet_file = dirwalletenc; QString target_decwallet_file = dirwallet; - FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, MESSAGE3); + FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, key); QFile filencrypted(dirwalletenc); @@ -507,7 +533,9 @@ void MainWindow::removeWalletEncryptionStartUp() { if (d.exec() == QDialog::Accepted) { - QString passphrase = ed.txtPassword->text(); // data comes from user inputs + QString passphraseBlank = ed.txtPassword->text(); // data comes from user inputs + + QString passphrase = QString("HUSH3") + passphraseBlank + QString("SDL"); int length = passphrase.length(); char *sequence = NULL; @@ -515,7 +543,7 @@ void MainWindow::removeWalletEncryptionStartUp() { strncpy(sequence, passphrase.toUtf8(), length +1); QString passphraseHash = blake3_PW(sequence); - DataStore::getChatDataStore()->setPassword(passphraseHash); + char *sequence1 = NULL; sequence1 = new char[length+1]; @@ -527,16 +555,26 @@ void MainWindow::removeWalletEncryptionStartUp() { #define PASSWORD sequence #define KEY_LEN crypto_box_SEEDBYTES - - { + + unsigned char key[KEY_LEN]; + + if (crypto_pwhash + (key, sizeof key, PASSWORD, strlen(PASSWORD), hash, + crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, + crypto_pwhash_ALG_DEFAULT) != 0) { + /* out of memory */ +} + QString passphraseHash1 = QByteArray(reinterpret_cast(key), KEY_LEN).toHex(); + DataStore::getChatDataStore()->setPassword(passphraseHash1); + auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); - auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); + QString target_encwallet_file = dirwalletenc; QString target_decwallet_file = dirwallet; - FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, hash); + FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, key); - } + auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); QFile wallet(dirwallet); From e20efde2edb230fad2625111e0531ef8fd3cae0c Mon Sep 17 00:00:00 2001 From: miodragpop Date: Mon, 15 Jun 2020 13:11:39 +0200 Subject: [PATCH 11/78] Qtification "lite" - first round --- silentdragon-lite.pro | 1 - src/3rdparty/json/json.hpp | 18928 --------------------------- src/DataStore/ChatDataStore.cpp | 11 +- src/DataStore/ChatDataStore.h | 3 +- src/DataStore/ContactDataStore.cpp | 13 +- src/DataStore/ContactDataStore.h | 3 +- src/DataStore/SietchDataStore.h | 4 +- src/FileSystem/FileSystem.h | 4 +- src/Model/ChatItem.cpp | 24 +- src/Model/ChatItem.h | 5 +- src/Model/ContactItem.cpp | 16 +- src/Model/ContactItem.h | 5 +- src/Model/ContactRequest.cpp | 2 +- src/Model/ContactRequest.h | 3 +- src/addressbook.cpp | 4 +- src/chatmodel.cpp | 116 +- src/connection.cpp | 51 +- src/connection.h | 34 +- src/controller.cpp | 1156 +- src/controller.h | 35 +- src/firsttimewizard.cpp | 26 +- src/liteinterface.cpp | 40 +- src/liteinterface.h | 42 +- src/mainwindow.cpp | 29 +- src/mainwindow.h | 1 - src/precompiled.h | 2 +- src/sendtab.cpp | 2 - src/settings.h | 13 +- src/websockets.cpp | 8 +- 29 files changed, 834 insertions(+), 19747 deletions(-) delete mode 100644 src/3rdparty/json/json.hpp diff --git a/silentdragon-lite.pro b/silentdragon-lite.pro index 762dab7..65ba321 100644 --- a/silentdragon-lite.pro +++ b/silentdragon-lite.pro @@ -94,7 +94,6 @@ HEADERS += \ src/3rdparty/qrcode/BitBuffer.hpp \ src/3rdparty/qrcode/QrCode.hpp \ src/3rdparty/qrcode/QrSegment.hpp \ - src/3rdparty/json/json.hpp \ src/settings.h \ src/txtablemodel.h \ src/qrcodelabel.h \ diff --git a/src/3rdparty/json/json.hpp b/src/3rdparty/json/json.hpp deleted file mode 100644 index c40620a..0000000 --- a/src/3rdparty/json/json.hpp +++ /dev/null @@ -1,18928 +0,0 @@ -/* - __ _____ _____ _____ - __| | __| | | | JSON for Modern C++ -| | |__ | | | | | | version 3.3.0 -|_____|_____|_____|_|___| https://github.com/nlohmann/json - -Licensed under the MIT License . -SPDX-License-Identifier: MIT -Copyright (c) 2013-2018 Niels Lohmann . - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#ifndef NLOHMANN_JSON_HPP -#define NLOHMANN_JSON_HPP - -#define NLOHMANN_JSON_VERSION_MAJOR 3 -#define NLOHMANN_JSON_VERSION_MINOR 3 -#define NLOHMANN_JSON_VERSION_PATCH 0 - -#include // all_of, find, for_each -#include // assert -#include // and, not, or -#include // nullptr_t, ptrdiff_t, size_t -#include // hash, less -#include // initializer_list -#include // istream, ostream -#include // iterator_traits, random_access_iterator_tag -#include // accumulate -#include // string, stoi, to_string -#include // declval, forward, move, pair, swap - -// #include -#ifndef NLOHMANN_JSON_FWD_HPP -#define NLOHMANN_JSON_FWD_HPP - -#include // int64_t, uint64_t -#include // map -#include // allocator -#include // string -#include // vector - -/*! -@brief namespace for Niels Lohmann -@see https://github.com/nlohmann -@since version 1.0.0 -*/ -namespace nlohmann -{ -/*! -@brief default JSONSerializer template argument - -This serializer ignores the template arguments and uses ADL -([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) -for serialization. -*/ -template -struct adl_serializer; - -template class ObjectType = - std::map, - template class ArrayType = std::vector, - class StringType = std::string, class BooleanType = bool, - class NumberIntegerType = std::int64_t, - class NumberUnsignedType = std::uint64_t, - class NumberFloatType = double, - template class AllocatorType = std::allocator, - template class JSONSerializer = - adl_serializer> -class basic_json; - -/*! -@brief JSON Pointer - -A JSON pointer defines a string syntax for identifying a specific value -within a JSON document. It can be used with functions `at` and -`operator[]`. Furthermore, JSON pointers are the base for JSON patches. - -@sa [RFC 6901](https://tools.ietf.org/html/rfc6901) - -@since version 2.0.0 -*/ -template -class json_pointer; - -/*! -@brief default JSON class - -This type is the default specialization of the @ref basic_json class which -uses the standard template types. - -@since version 1.0.0 -*/ -using json = basic_json<>; -} - -#endif - -// #include - - -// This file contains all internal macro definitions -// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them - -// exclude unsupported compilers -#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) - #if defined(__clang__) - #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 - #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" - #endif - #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) - #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 - #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" - #endif - #endif -#endif - -// disable float-equal warnings on GCC/clang -#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wfloat-equal" -#endif - -// disable documentation warnings on clang -#if defined(__clang__) - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wdocumentation" -#endif - -// allow for portable deprecation warnings -#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) - #define JSON_DEPRECATED __attribute__((deprecated)) -#elif defined(_MSC_VER) - #define JSON_DEPRECATED __declspec(deprecated) -#else - #define JSON_DEPRECATED -#endif - -// allow to disable exceptions -#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) - #define JSON_THROW(exception) throw exception - #define JSON_TRY try - #define JSON_CATCH(exception) catch(exception) - #define JSON_INTERNAL_CATCH(exception) catch(exception) -#else - #define JSON_THROW(exception) std::abort() - #define JSON_TRY if(true) - #define JSON_CATCH(exception) if(false) - #define JSON_INTERNAL_CATCH(exception) if(false) -#endif - -// override exception macros -#if defined(JSON_THROW_USER) - #undef JSON_THROW - #define JSON_THROW JSON_THROW_USER -#endif -#if defined(JSON_TRY_USER) - #undef JSON_TRY - #define JSON_TRY JSON_TRY_USER -#endif -#if defined(JSON_CATCH_USER) - #undef JSON_CATCH - #define JSON_CATCH JSON_CATCH_USER - #undef JSON_INTERNAL_CATCH - #define JSON_INTERNAL_CATCH JSON_CATCH_USER -#endif -#if defined(JSON_INTERNAL_CATCH_USER) - #undef JSON_INTERNAL_CATCH - #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER -#endif - -// manual branch prediction -#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) - #define JSON_LIKELY(x) __builtin_expect(!!(x), 1) - #define JSON_UNLIKELY(x) __builtin_expect(!!(x), 0) -#else - #define JSON_LIKELY(x) x - #define JSON_UNLIKELY(x) x -#endif - -// C++ language standard detection -#if (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 -#elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) - #define JSON_HAS_CPP_14 -#endif - -// Ugly macros to avoid uglier copy-paste when specializing basic_json. They -// may be removed in the future once the class is split. - -#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ - template class ObjectType, \ - template class ArrayType, \ - class StringType, class BooleanType, class NumberIntegerType, \ - class NumberUnsignedType, class NumberFloatType, \ - template class AllocatorType, \ - template class JSONSerializer> - -#define NLOHMANN_BASIC_JSON_TPL \ - basic_json - -// #include - - -#include // not -#include // size_t -#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type - -namespace nlohmann -{ -namespace detail -{ -// alias templates to reduce boilerplate -template -using enable_if_t = typename std::enable_if::type; - -template -using uncvref_t = typename std::remove_cv::type>::type; - -// implementation of C++14 index_sequence and affiliates -// source: https://stackoverflow.com/a/32223343 -template -struct index_sequence -{ - using type = index_sequence; - using value_type = std::size_t; - static constexpr std::size_t size() noexcept - { - return sizeof...(Ints); - } -}; - -template -struct merge_and_renumber; - -template -struct merge_and_renumber, index_sequence> - : index_sequence < I1..., (sizeof...(I1) + I2)... > {}; - -template -struct make_index_sequence - : merge_and_renumber < typename make_index_sequence < N / 2 >::type, - typename make_index_sequence < N - N / 2 >::type > {}; - -template<> struct make_index_sequence<0> : index_sequence<> {}; -template<> struct make_index_sequence<1> : index_sequence<0> {}; - -template -using index_sequence_for = make_index_sequence; - -// dispatch utility (taken from ranges-v3) -template struct priority_tag : priority_tag < N - 1 > {}; -template<> struct priority_tag<0> {}; - -// taken from ranges-v3 -template -struct static_const -{ - static constexpr T value{}; -}; - -template -constexpr T static_const::value; -} -} - -// #include - - -#include // not -#include // numeric_limits -#include // false_type, is_constructible, is_integral, is_same, true_type -#include // declval - -// #include - -// #include - -// #include - - -#include - -// #include - - -namespace nlohmann -{ -namespace detail -{ -template struct make_void -{ - using type = void; -}; -template using void_t = typename make_void::type; -} -} - - -// http://en.cppreference.com/w/cpp/experimental/is_detected -namespace nlohmann -{ -namespace detail -{ -struct nonesuch -{ - nonesuch() = delete; - ~nonesuch() = delete; - nonesuch(nonesuch const&) = delete; - void operator=(nonesuch const&) = delete; -}; - -template class Op, - class... Args> -struct detector -{ - using value_t = std::false_type; - using type = Default; -}; - -template class Op, class... Args> -struct detector>, Op, Args...> -{ - using value_t = std::true_type; - using type = Op; -}; - -template