1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00

encrypted db uses core encryption

This commit is contained in:
dubslow 2014-10-17 04:26:31 -05:00
parent 041ed3b998
commit 81003b8523
3 changed files with 8 additions and 52 deletions

View File

@ -44,9 +44,8 @@ HistoryKeeper *HistoryKeeper::getInstance()
if (encrypted) if (encrypted)
{ {
QString key = "plainKey"; // FIXME: ask user about it
path = QDir(Settings::getInstance().getSettingsDirPath()).filePath("qtox_history.encrypted"); path = QDir(Settings::getInstance().getSettingsDirPath()).filePath("qtox_history.encrypted");
dbIntf = new EncryptedDb(path, key); dbIntf = new EncryptedDb(path);
historyInstance = new HistoryKeeper(dbIntf); historyInstance = new HistoryKeeper(dbIntf);
return historyInstance; return historyInstance;

View File

@ -16,6 +16,7 @@
#include "encrypteddb.h" #include "encrypteddb.h"
#include "src/misc/settings.h" #include "src/misc/settings.h"
#include "src/core.h"
#include <tox/toxencryptsave.h> #include <tox/toxencryptsave.h>
@ -23,17 +24,9 @@
#include <QDebug> #include <QDebug>
#include <QSqlError> #include <QSqlError>
EncryptedDb::EncryptedDb(const QString &fname, const QString &key) : EncryptedDb::EncryptedDb(const QString &fname) :
PlainDb(":memory:"), encrFile(fname) PlainDb(":memory:"), encrFile(fname)
{ {
encrkey = new u_int8_t[tox_pass_key_length()];
QByteArray key_ba;
key_ba.append(key);
// tox_derive_key_from_pass(reinterpret_cast<uint8_t*>(key_ba.data()), key_ba.size(), encrkey);
passwd = "test";
qDebug() << QByteArray::fromRawData(reinterpret_cast<char *>(encrkey), tox_pass_key_length()).toBase64();
plainChunkSize = 1024; plainChunkSize = 1024;
encryptedChunkSize = plainChunkSize + tox_pass_encryption_extra_length(); encryptedChunkSize = plainChunkSize + tox_pass_encryption_extra_length();
@ -60,8 +53,7 @@ EncryptedDb::EncryptedDb(const QString &fname, const QString &key) :
EncryptedDb::~EncryptedDb() EncryptedDb::~EncryptedDb()
{ {
encrFile.close(); encrFile.close(); // what if program is killed without being able to clean up?
delete encrkey;
} }
QSqlQuery EncryptedDb::exec(const QString &query) QSqlQuery EncryptedDb::exec(const QString &query)
@ -85,7 +77,7 @@ QList<QString> EncryptedDb::decryptFile()
while (!encrFile.atEnd()) while (!encrFile.atEnd())
{ {
QByteArray encrChunk = encrFile.read(encryptedChunkSize); QByteArray encrChunk = encrFile.read(encryptedChunkSize);
buffer = decrypt(encrChunk); buffer = Core::getInstance()->decryptData(encrChunk);
fileContent += buffer; fileContent += buffer;
} }
@ -114,44 +106,14 @@ void EncryptedDb::appendToEncrypted(const QString &sql)
{ {
QByteArray filledChunk = buffer.left(plainChunkSize); QByteArray filledChunk = buffer.left(plainChunkSize);
encrFile.seek(chunkPosition * encryptedChunkSize); encrFile.seek(chunkPosition * encryptedChunkSize);
encrFile.write(encrypt(filledChunk)); encrFile.write(Core::getInstance()->encryptData(filledChunk));
buffer = buffer.right(buffer.size() - plainChunkSize); buffer = buffer.right(buffer.size() - plainChunkSize);
chunkPosition++; chunkPosition++;
} }
encrFile.seek(chunkPosition * encryptedChunkSize); encrFile.seek(chunkPosition * encryptedChunkSize);
encrFile.write(encrypt(buffer)); encrFile.write(Core::getInstance()->encryptData(buffer));
encrFile.flush(); encrFile.flush();
qDebug() << sql; qDebug() << sql;
} }
QByteArray EncryptedDb::encrypt(QByteArray data)
{
int encrSize = data.size() + tox_pass_encryption_extra_length();
int plainSize = data.size();
uint8_t *out = new u_int8_t[encrSize];
// int state = tox_pass_key_encrypt(reinterpret_cast<uint8_t*>(data.data()), plainSize, encrkey, out);
int state = tox_pass_encrypt(reinterpret_cast<uint8_t*>(data.data()), plainSize,
reinterpret_cast<uint8_t*>(passwd.data()), passwd.size(), out);
qDebug() << state;
QByteArray ret = QByteArray::fromRawData(reinterpret_cast<const char*>(out), encrSize);
return ret;
}
QByteArray EncryptedDb::decrypt(QByteArray data)
{
int encrSize = data.size();
int plainSize = data.size() - tox_pass_encryption_extra_length();
uint8_t *out = new u_int8_t[plainSize];
// int state = tox_pass_key_decrypt(reinterpret_cast<uint8_t*>(data.data()), encrSize, encrkey, out);
int state = tox_pass_decrypt(reinterpret_cast<uint8_t*>(data.data()), encrSize,
reinterpret_cast<uint8_t*>(passwd.data()), passwd.size(), out);
qDebug() << state << encrSize << plainSize;
QByteArray ret = QByteArray::fromRawData(reinterpret_cast<const char*>(out), plainSize);
return ret;
}

View File

@ -25,22 +25,17 @@
class EncryptedDb : public PlainDb class EncryptedDb : public PlainDb
{ {
public: public:
EncryptedDb(const QString& fname, const QString &key); EncryptedDb(const QString& fname);
virtual ~EncryptedDb(); virtual ~EncryptedDb();
virtual QSqlQuery exec(const QString &query); virtual QSqlQuery exec(const QString &query);
virtual bool save(); virtual bool save();
private: private:
QByteArray encrypt(QByteArray data);
QByteArray decrypt(QByteArray data);
QList<QString> decryptFile(); QList<QString> decryptFile();
void appendToEncrypted(const QString &sql); void appendToEncrypted(const QString &sql);
u_int8_t *encrkey;
QFile encrFile; QFile encrFile;
QByteArray passwd;
qint64 plainChunkSize; qint64 plainChunkSize;
qint64 encryptedChunkSize; qint64 encryptedChunkSize;