Merge branch 'dev' of https://git.hush.is/hush/SilentDragonLite into sdl-odinzu
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -42,3 +42,5 @@ silentdragonlite_plugin_import.cpp
|
||||
silentdragonlite_resource.rc
|
||||
SilentDragonLite
|
||||
.gdb_history
|
||||
.*sw?
|
||||
core
|
||||
|
||||
@@ -52,7 +52,7 @@ make -j$(nproc) install
|
||||
```
|
||||
# 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
|
||||
cd mxe
|
||||
|
||||
|
||||
13
build.sh
13
build.sh
@@ -1,5 +1,6 @@
|
||||
#!/bin/bash
|
||||
# Copyright 2019-2021 The Hush Developers
|
||||
# Released under the GPLv3
|
||||
|
||||
UNAME=$(uname)
|
||||
|
||||
@@ -13,6 +14,18 @@ else
|
||||
JOBS=1
|
||||
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)
|
||||
echo "Compiling SilentDragonLite $VERSION with $JOBS threads..."
|
||||
CONF=silentdragon-lite.pro
|
||||
|
||||
@@ -223,4 +223,4 @@ pub extern fn litelib_rust_free_string(s: *mut c_char) {
|
||||
if s.is_null() { return }
|
||||
CString::from_raw(s)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,26 +1,51 @@
|
||||
#!/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
|
||||
if [ -f res/libsodium.a ]; then
|
||||
echo "libsodium $VERSION is already built! Nothing to do"
|
||||
exit 0
|
||||
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
|
||||
cd res/libsodium
|
||||
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
|
||||
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
|
||||
echo "Unpacking libsodium $VERSION"
|
||||
tar xf libsodium-1.0.18.tar.gz
|
||||
fi
|
||||
|
||||
if [ ! -d libsodium-1.0.18 ]; then
|
||||
echo "Unable to unpack libsodium $VERSION !!! Aborting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Now build it
|
||||
cd libsodium-1.0.18
|
||||
echo "Configuring libsodium $VERSION"
|
||||
LIBS="" ./configure
|
||||
make clean
|
||||
|
||||
echo "Compiling libsodium $VERSION"
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
make CFLAGS="-mmacosx-version-min=10.11" CPPFLAGS="-mmacosx-version-min=10.11" -j4
|
||||
else
|
||||
@@ -28,5 +53,10 @@ else
|
||||
fi
|
||||
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
|
||||
cp libsodium-1.0.18/src/libsodium/.libs/libsodium.a ../
|
||||
|
||||
@@ -1083,21 +1083,20 @@ void Controller::refreshTransactions() {
|
||||
unsigned char tag[crypto_secretstream_xchacha20poly1305_TAG_FINAL];
|
||||
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) {
|
||||
/* 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;
|
||||
}
|
||||
|
||||
if (crypto_secretstream_xchacha20poly1305_pull(&state, decrypted, NULL, tag, MESSAGE2, CIPHERTEXT1_LEN, NULL, 0) != 0) {
|
||||
/* Invalid/incomplete/corrupted ciphertext - abort */
|
||||
qDebug() << "refreshTransactions: crypto_secretstream_xchacha20poly1305_pull error!";
|
||||
qDebug() << "refreshTransactions: crypto_secretstream_xchacha20poly1305_pull error! Invalid ciphertext";
|
||||
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);
|
||||
|
||||
memodecrypt = QString::fromUtf8( decryptedMemo.data(), decryptedMemo.size());
|
||||
|
||||
@@ -516,16 +516,22 @@ void MainWindow::encryptWallet() {
|
||||
}
|
||||
|
||||
void MainWindow::removeWalletEncryption() {
|
||||
qDebug() << __func__ << ": removing wallet encryption";
|
||||
QDialog d(this);
|
||||
Ui_removeencryption ed;
|
||||
ed.setupUi(&d);
|
||||
|
||||
qDebug() << __func__ << ": done with setupUi";
|
||||
|
||||
if (fileExists(dirwalletenc) == false) {
|
||||
QMessageBox::information(this, tr("Wallet is not encrypted"),
|
||||
tr("Your wallet is not encrypted with a passphrase."),
|
||||
QMessageBox::Ok
|
||||
);
|
||||
qDebug() << __func__ << ": wallet=" << dirwalletenc << " does NOT exist";
|
||||
return;
|
||||
} else {
|
||||
qDebug() << __func__ << ": wallet=" << dirwalletenc << " exists";
|
||||
}
|
||||
|
||||
auto fnPasswordEdited = [=](const QString&) {
|
||||
@@ -545,12 +551,16 @@ void MainWindow::removeWalletEncryption() {
|
||||
QObject::connect(ed.txtConfirmPassword, &QLineEdit::textChanged, fnPasswordEdited);
|
||||
QObject::connect(ed.txtPassword, &QLineEdit::textChanged, fnPasswordEdited);
|
||||
|
||||
qDebug() << __func__ << ": connected GUI events";
|
||||
|
||||
if (d.exec() == QDialog::Accepted) {
|
||||
QString passphraseBlank = ed.txtPassword->text(); // data comes from user inputs
|
||||
QString passphrase = QString("HUSH3") + passphraseBlank + QString("SDL");
|
||||
|
||||
int length = passphrase.length();
|
||||
|
||||
qDebug() << __func__ << ": Passphrase length = " << length;
|
||||
|
||||
char *sequence = NULL;
|
||||
sequence = new char[length+1];
|
||||
strncpy(sequence, passphrase.toUtf8(), length +1);
|
||||
@@ -561,7 +571,6 @@ void MainWindow::removeWalletEncryption() {
|
||||
sequence1 = new char[length+1];
|
||||
strncpy(sequence1, passphraseHash.toUtf8(), length+1);
|
||||
|
||||
|
||||
#define hash ((const unsigned char *) sequence1)
|
||||
#define PASSWORD sequence
|
||||
#define KEY_LEN crypto_box_SEEDBYTES
|
||||
@@ -571,43 +580,41 @@ void MainWindow::removeWalletEncryption() {
|
||||
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 */
|
||||
qDebug() << "crypto_pwhash failed!";
|
||||
return;
|
||||
qDebug() << __func__ << ": crypto_pwhash failed! Possibly out of memory";
|
||||
return;
|
||||
}
|
||||
|
||||
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, key);
|
||||
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, key);
|
||||
|
||||
QFile filencrypted(dirwalletenc);
|
||||
QFile wallet(dirwallet);
|
||||
QFile filencrypted(dirwalletenc);
|
||||
QFile wallet(dirwallet);
|
||||
|
||||
qDebug() << __func__ << ": wallet size=" << wallet.size();
|
||||
|
||||
if (wallet.size() > 0) {
|
||||
QMessageBox::information(this, tr("Wallet decryption Success"),
|
||||
QString("Successfully delete the encryption"),
|
||||
QMessageBox::Ok
|
||||
);
|
||||
|
||||
filencrypted.remove();
|
||||
|
||||
} else {
|
||||
|
||||
QMessageBox::critical(this, tr("Wallet Encryption Failed"),
|
||||
QString("False password, please try again"),
|
||||
QMessageBox::Ok
|
||||
);
|
||||
this->removeWalletEncryption();
|
||||
this->removeWalletEncryption();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::removeWalletEncryptionStartUp() {
|
||||
qDebug() << __func__ << ": removing wallet encryption";
|
||||
QDialog d(this);
|
||||
Ui_startup ed;
|
||||
ed.setupUi(&d);
|
||||
@@ -652,30 +659,29 @@ void MainWindow::removeWalletEncryptionStartUp() {
|
||||
|
||||
unsigned char key[KEY_LEN];
|
||||
|
||||
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) {
|
||||
/* out of memory */
|
||||
}
|
||||
QString passphraseHash1 = QByteArray(reinterpret_cast<const char*>(key), KEY_LEN).toHex();
|
||||
DataStore::getChatDataStore()->setPassword(passphraseHash1);
|
||||
/* out of memory */
|
||||
qDebug() << __func__ << ": crypto_pwhash failed! Possibly out of memory";
|
||||
return;
|
||||
}
|
||||
|
||||
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;
|
||||
QString target_decwallet_file = dirwallet;
|
||||
auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation));
|
||||
|
||||
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));
|
||||
QFile wallet(dirwallet);
|
||||
qDebug() << __func__ << ": wallet size=" << wallet.size();
|
||||
|
||||
|
||||
auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
|
||||
QFile wallet(dirwallet);
|
||||
|
||||
if (wallet.size() == 0)
|
||||
{
|
||||
|
||||
if (wallet.size() == 0) {
|
||||
QMessageBox::critical(this, tr("Wallet Encryption Failed"),
|
||||
QString("false password please try again"),
|
||||
QMessageBox::Ok
|
||||
@@ -684,7 +690,6 @@ void MainWindow::removeWalletEncryptionStartUp() {
|
||||
}else{}
|
||||
|
||||
}else{
|
||||
|
||||
this->doClosePw();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user