Browse Source

Merge branch 'dev' of https://git.hush.is/hush/SilentDragonLite into sdl-odinzu

pull/33/head
oDinZu 3 years ago
parent
commit
e574663895
  1. 2
      .gitignore
  2. 2
      DEVELOPING.md
  3. 13
      build.sh
  4. 2
      lib/src/lib.rs
  5. 32
      res/libsodium/buildlibsodium.sh
  6. 9
      src/controller.cpp
  7. 71
      src/mainwindow.cpp

2
.gitignore

@ -42,3 +42,5 @@ silentdragonlite_plugin_import.cpp
silentdragonlite_resource.rc silentdragonlite_resource.rc
SilentDragonLite SilentDragonLite
.gdb_history .gdb_history
.*sw?
core

2
DEVELOPING.md

@ -52,7 +52,7 @@ make -j$(nproc) install
``` ```
# Build MXE (Cross-compiled Qt5 for Windows in Linux) # Build MXE (Cross-compiled Qt5 for Windows in Linux)
``` ```
mkdir ~/github && cd ~/github mkdir ~/git && cd ~/git
git clone https://github.com/mxe/mxe.git git clone https://github.com/mxe/mxe.git
cd mxe cd mxe

13
build.sh

@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
# Copyright 2019-2021 The Hush Developers # Copyright 2019-2021 The Hush Developers
# Released under the GPLv3
UNAME=$(uname) UNAME=$(uname)
@ -13,6 +14,18 @@ else
JOBS=1 JOBS=1
fi fi
# check if rustc and cargo are installed, otherwise exit with error
if ! command -v rustc &> /dev/null
then
echo "rustc could not be found. Please install it and try again."
exit 1
fi
if ! command -v cargo &> /dev/null
then
echo "cargo could not be found. Please install it and try again."
exit 1
fi
VERSION=$(cat src/version.h |cut -d\" -f2) VERSION=$(cat src/version.h |cut -d\" -f2)
echo "Compiling SilentDragonLite $VERSION with $JOBS threads..." echo "Compiling SilentDragonLite $VERSION with $JOBS threads..."
CONF=silentdragon-lite.pro CONF=silentdragon-lite.pro

2
lib/src/lib.rs

@ -223,4 +223,4 @@ pub extern fn litelib_rust_free_string(s: *mut c_char) {
if s.is_null() { return } if s.is_null() { return }
CString::from_raw(s) CString::from_raw(s)
}; };
} }

32
res/libsodium/buildlibsodium.sh

@ -1,26 +1,51 @@
#!/bin/bash #!/bin/bash
# Copyright 2019-2021 The Hush developers
# Released under the GPLv3
VERSION=1.0.18
# First thing to do is see if libsodium.a exists in the res folder. If it does, then there's nothing to do # First thing to do is see if libsodium.a exists in the res folder. If it does, then there's nothing to do
if [ -f res/libsodium.a ]; then if [ -f res/libsodium.a ]; then
echo "libsodium $VERSION is already built! Nothing to do"
exit 0 exit 0
fi fi
echo "Building libsodium" echo "Building libsodium $VERSION"
if ! command -v curl &> /dev/null
then
echo "curl could not be found. Please install it and try again."
exit 1
fi
# Go into the lib sodium directory # Go into the lib sodium directory
cd res/libsodium cd res/libsodium
if [ ! -f libsodium-1.0.18.tar.gz ]; then if [ ! -f libsodium-1.0.18.tar.gz ]; then
echo "Downloading libsodium $VERSION"
curl -LO https://github.com/MyHush/libsodium/releases/download/1.0.18/libsodium-1.0.18.tar.gz curl -LO https://github.com/MyHush/libsodium/releases/download/1.0.18/libsodium-1.0.18.tar.gz
fi fi
if [ ! -f libsodium-1.0.18.tar.gz ]; then
echo "Unable to download libsodium $VERSION !!! Aborting"
exit 1
fi
if [ ! -d libsodium-1.0.18 ]; then if [ ! -d libsodium-1.0.18 ]; then
echo "Unpacking libsodium $VERSION"
tar xf libsodium-1.0.18.tar.gz tar xf libsodium-1.0.18.tar.gz
fi fi
if [ ! -d libsodium-1.0.18 ]; then
echo "Unable to unpack libsodium $VERSION !!! Aborting"
exit 1
fi
# Now build it # Now build it
cd libsodium-1.0.18 cd libsodium-1.0.18
echo "Configuring libsodium $VERSION"
LIBS="" ./configure LIBS="" ./configure
make clean make clean
echo "Compiling libsodium $VERSION"
if [[ "$OSTYPE" == "darwin"* ]]; then if [[ "$OSTYPE" == "darwin"* ]]; then
make CFLAGS="-mmacosx-version-min=10.11" CPPFLAGS="-mmacosx-version-min=10.11" -j4 make CFLAGS="-mmacosx-version-min=10.11" CPPFLAGS="-mmacosx-version-min=10.11" -j4
else else
@ -28,5 +53,10 @@ else
fi fi
cd .. cd ..
if [ ! -e libsodium-1.0.18/src/libsodium/.libs/libsodium.a ]; then
echo "Unable to compile libsodium $VERSION !!! Aborting"
exit 1
fi
# copy the library to the parents's res/ folder # copy the library to the parents's res/ folder
cp libsodium-1.0.18/src/libsodium/.libs/libsodium.a ../ cp libsodium-1.0.18/src/libsodium/.libs/libsodium.a ../

9
src/controller.cpp

@ -1083,21 +1083,20 @@ void Controller::refreshTransactions() {
unsigned char tag[crypto_secretstream_xchacha20poly1305_TAG_FINAL]; unsigned char tag[crypto_secretstream_xchacha20poly1305_TAG_FINAL];
crypto_secretstream_xchacha20poly1305_state state; crypto_secretstream_xchacha20poly1305_state state;
/////Our decrypted message is now in decrypted. We need it as QString to render it
/////Only the QString gives weird data, so convert first to std::string
// crypto_secretstream_xchacha20poly1305_keygen(client_rx);
if (crypto_secretstream_xchacha20poly1305_init_pull(&state, header, server_tx) != 0) { if (crypto_secretstream_xchacha20poly1305_init_pull(&state, header, server_tx) != 0) {
/* Invalid header, no need to go any further */ /* Invalid header, no need to go any further */
qDebug() << "refreshTransactions: crypto_secretstream_xchacha20poly1305_init_pull error!"; qDebug() << "refreshTransactions: crypto_secretstream_xchacha20poly1305_init_pull error! Invalid header";
continue; continue;
} }
if (crypto_secretstream_xchacha20poly1305_pull(&state, decrypted, NULL, tag, MESSAGE2, CIPHERTEXT1_LEN, NULL, 0) != 0) { if (crypto_secretstream_xchacha20poly1305_pull(&state, decrypted, NULL, tag, MESSAGE2, CIPHERTEXT1_LEN, NULL, 0) != 0) {
/* Invalid/incomplete/corrupted ciphertext - abort */ /* Invalid/incomplete/corrupted ciphertext - abort */
qDebug() << "refreshTransactions: crypto_secretstream_xchacha20poly1305_pull error!"; qDebug() << "refreshTransactions: crypto_secretstream_xchacha20poly1305_pull error! Invalid ciphertext";
continue; continue;
} }
/////Our decrypted message is now in decrypted. We need it as QString to render it
/////Only the QString gives weird data, so convert first to std::string
std::string decryptedMemo(reinterpret_cast<char*>(decrypted),MESSAGE1_LEN); std::string decryptedMemo(reinterpret_cast<char*>(decrypted),MESSAGE1_LEN);
memodecrypt = QString::fromUtf8( decryptedMemo.data(), decryptedMemo.size()); memodecrypt = QString::fromUtf8( decryptedMemo.data(), decryptedMemo.size());

71
src/mainwindow.cpp

@ -516,16 +516,22 @@ void MainWindow::encryptWallet() {
} }
void MainWindow::removeWalletEncryption() { void MainWindow::removeWalletEncryption() {
qDebug() << __func__ << ": removing wallet encryption";
QDialog d(this); QDialog d(this);
Ui_removeencryption ed; Ui_removeencryption ed;
ed.setupUi(&d); ed.setupUi(&d);
qDebug() << __func__ << ": done with setupUi";
if (fileExists(dirwalletenc) == false) { if (fileExists(dirwalletenc) == false) {
QMessageBox::information(this, tr("Wallet is not encrypted"), QMessageBox::information(this, tr("Wallet is not encrypted"),
tr("Your wallet is not encrypted with a passphrase."), tr("Your wallet is not encrypted with a passphrase."),
QMessageBox::Ok QMessageBox::Ok
); );
qDebug() << __func__ << ": wallet=" << dirwalletenc << " does NOT exist";
return; return;
} else {
qDebug() << __func__ << ": wallet=" << dirwalletenc << " exists";
} }
auto fnPasswordEdited = [=](const QString&) { auto fnPasswordEdited = [=](const QString&) {
@ -545,12 +551,16 @@ void MainWindow::removeWalletEncryption() {
QObject::connect(ed.txtConfirmPassword, &QLineEdit::textChanged, fnPasswordEdited); QObject::connect(ed.txtConfirmPassword, &QLineEdit::textChanged, fnPasswordEdited);
QObject::connect(ed.txtPassword, &QLineEdit::textChanged, fnPasswordEdited); QObject::connect(ed.txtPassword, &QLineEdit::textChanged, fnPasswordEdited);
qDebug() << __func__ << ": connected GUI events";
if (d.exec() == QDialog::Accepted) { if (d.exec() == QDialog::Accepted) {
QString passphraseBlank = 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"); QString passphrase = QString("HUSH3") + passphraseBlank + QString("SDL");
int length = passphrase.length(); int length = passphrase.length();
qDebug() << __func__ << ": Passphrase length = " << length;
char *sequence = NULL; char *sequence = NULL;
sequence = new char[length+1]; sequence = new char[length+1];
strncpy(sequence, passphrase.toUtf8(), length +1); strncpy(sequence, passphrase.toUtf8(), length +1);
@ -561,7 +571,6 @@ void MainWindow::removeWalletEncryption() {
sequence1 = new char[length+1]; sequence1 = new char[length+1];
strncpy(sequence1, passphraseHash.toUtf8(), length+1); strncpy(sequence1, passphraseHash.toUtf8(), length+1);
#define hash ((const unsigned char *) sequence1) #define hash ((const unsigned char *) sequence1)
#define PASSWORD sequence #define PASSWORD sequence
#define KEY_LEN crypto_box_SEEDBYTES #define KEY_LEN crypto_box_SEEDBYTES
@ -571,43 +580,41 @@ void MainWindow::removeWalletEncryption() {
if (crypto_pwhash(key, sizeof key, PASSWORD, strlen(PASSWORD), hash, if (crypto_pwhash(key, sizeof key, PASSWORD, strlen(PASSWORD), hash,
crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, crypto_pwhash_ALG_DEFAULT) != 0) { crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, crypto_pwhash_ALG_DEFAULT) != 0) {
/* out of memory */ /* out of memory */
qDebug() << "crypto_pwhash failed!"; qDebug() << __func__ << ": crypto_pwhash failed! Possibly out of memory";
return; return;
} }
auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation));
auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
QString target_encwallet_file = dirwalletenc; QString target_encwallet_file = dirwalletenc;
QString target_decwallet_file = dirwallet; QString target_decwallet_file = dirwallet;
FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, key);
FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, key);
QFile filencrypted(dirwalletenc); QFile filencrypted(dirwalletenc);
QFile wallet(dirwallet); QFile wallet(dirwallet);
qDebug() << __func__ << ": wallet size=" << wallet.size();
if (wallet.size() > 0) { if (wallet.size() > 0) {
QMessageBox::information(this, tr("Wallet decryption Success"), QMessageBox::information(this, tr("Wallet decryption Success"),
QString("Successfully delete the encryption"), QString("Successfully delete the encryption"),
QMessageBox::Ok QMessageBox::Ok
); );
filencrypted.remove(); filencrypted.remove();
} else { } else {
QMessageBox::critical(this, tr("Wallet Encryption Failed"), QMessageBox::critical(this, tr("Wallet Encryption Failed"),
QString("False password, please try again"), QString("False password, please try again"),
QMessageBox::Ok QMessageBox::Ok
); );
this->removeWalletEncryption(); this->removeWalletEncryption();
} }
} }
} }
void MainWindow::removeWalletEncryptionStartUp() { void MainWindow::removeWalletEncryptionStartUp() {
qDebug() << __func__ << ": removing wallet encryption";
QDialog d(this); QDialog d(this);
Ui_startup ed; Ui_startup ed;
ed.setupUi(&d); ed.setupUi(&d);
@ -652,30 +659,29 @@ void MainWindow::removeWalletEncryptionStartUp() {
unsigned char key[KEY_LEN]; unsigned char key[KEY_LEN];
if (crypto_pwhash if (crypto_pwhash(key, sizeof key, PASSWORD, strlen(PASSWORD), hash,
(key, sizeof key, PASSWORD, strlen(PASSWORD), hash,
crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE,
crypto_pwhash_ALG_DEFAULT) != 0) { crypto_pwhash_ALG_DEFAULT) != 0) {
/* out of memory */ /* out of memory */
} qDebug() << __func__ << ": crypto_pwhash failed! Possibly out of memory";
QString passphraseHash1 = QByteArray(reinterpret_cast<const char*>(key), KEY_LEN).toHex(); return;
DataStore::getChatDataStore()->setPassword(passphraseHash1); }
auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); QString passphraseHash1 = QByteArray(reinterpret_cast<const char*>(key), KEY_LEN).toHex();
DataStore::getChatDataStore()->setPassword(passphraseHash1);
QString target_encwallet_file = dirwalletenc; auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation));
QString target_decwallet_file = dirwallet;
FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, key); QString target_encwallet_file = dirwalletenc;
QString target_decwallet_file = dirwallet;
FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, key);
auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
QFile wallet(dirwallet); QFile wallet(dirwallet);
qDebug() << __func__ << ": wallet size=" << wallet.size();
if (wallet.size() == 0) if (wallet.size() == 0) {
{
QMessageBox::critical(this, tr("Wallet Encryption Failed"), QMessageBox::critical(this, tr("Wallet Encryption Failed"),
QString("false password please try again"), QString("false password please try again"),
QMessageBox::Ok QMessageBox::Ok
@ -684,7 +690,6 @@ void MainWindow::removeWalletEncryptionStartUp() {
}else{} }else{}
}else{ }else{
this->doClosePw(); this->doClosePw();
} }

Loading…
Cancel
Save