[CSE] Mobe fileEncryption to a static function

and I'll move all of those to a namespace latter.
This commit is contained in:
Tomaz Canabrava 2017-12-20 22:28:01 +01:00
parent 20198c5c7b
commit 3760b86e07
2 changed files with 15 additions and 44 deletions

View file

@ -1272,20 +1272,10 @@ bool ClientSideEncryption::isFolderEncrypted(const QString& path) {
return (*it); return (*it);
} }
FileEncryptionJob::FileEncryptionJob(const QByteArray &key, const QByteArray &iv, void EncryptionHelper::fileEncryption(const QByteArray &key, const QByteArray &iv, QFile *input, QFile *output)
QPointer<QFile> input, QPointer<QFile> output, QObject *parent)
: QObject(parent),
_key(key),
_iv(iv),
_input(input),
_output(output)
{ {
} input->open(QIODevice::ReadOnly);
output->open(QIODevice::WriteOnly);
void FileEncryptionJob::start()
{
_input->open(QIODevice::ReadOnly);
_output->open(QIODevice::WriteOnly);
// Init // Init
EVP_CIPHER_CTX *ctx; EVP_CIPHER_CTX *ctx;
@ -1305,13 +1295,13 @@ void FileEncryptionJob::start()
EVP_CIPHER_CTX_set_padding(ctx, 0); EVP_CIPHER_CTX_set_padding(ctx, 0);
/* Set IV length. */ /* Set IV length. */
if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, _iv.size(), NULL)) { if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, iv.size(), NULL)) {
qCInfo(lcCse()) << "Could not set iv length"; qCInfo(lcCse()) << "Could not set iv length";
exit(-1); exit(-1);
} }
/* Initialise key and IV */ /* Initialise key and IV */
if(!EVP_EncryptInit_ex(ctx, NULL, NULL, (const unsigned char *)_key.constData(), (const unsigned char *)_iv.constData())) { if(!EVP_EncryptInit_ex(ctx, NULL, NULL, (const unsigned char *)key.constData(), (const unsigned char *)iv.constData())) {
qCInfo(lcCse()) << "Could not set key and iv"; qCInfo(lcCse()) << "Could not set key and iv";
exit(-1); exit(-1);
} }
@ -1320,8 +1310,8 @@ void FileEncryptionJob::start()
int len = 0; int len = 0;
int total_len = 0; int total_len = 0;
while(!_input->atEnd()) { while(!input->atEnd()) {
QByteArray data = _input->read(1024); QByteArray data = input->read(1024);
if (data.size() == 0) { if (data.size() == 0) {
qCInfo(lcCse()) << "Could not read data from file"; qCInfo(lcCse()) << "Could not read data from file";
@ -1333,7 +1323,7 @@ void FileEncryptionJob::start()
exit(-1); exit(-1);
} }
_output->write((char *)out, len); output->write((char *)out, len);
total_len += len; total_len += len;
} }
@ -1341,7 +1331,7 @@ void FileEncryptionJob::start()
qCInfo(lcCse()) << "Could finalize encryption"; qCInfo(lcCse()) << "Could finalize encryption";
exit(-1); exit(-1);
} }
_output->write((char *)out, len); output->write((char *)out, len);
total_len += len; total_len += len;
/* Get the tag */ /* Get the tag */
@ -1351,16 +1341,14 @@ void FileEncryptionJob::start()
exit(-1); exit(-1);
} }
_output->write((char *)tag, 16); output->write((char *)tag, 16);
free(out); free(out);
free(tag); free(tag);
EVP_CIPHER_CTX_free(ctx); EVP_CIPHER_CTX_free(ctx);
_input->close(); input->close();
_output->close(); output->close();
emit finished(_output);
} }
FileDecryptionJob::FileDecryptionJob(QByteArray &key, QByteArray &iv, QFile *input, QFile *output, QObject *parent) FileDecryptionJob::FileDecryptionJob(QByteArray &key, QByteArray &iv, QFile *input, QFile *output, QObject *parent)

View file

@ -59,6 +59,9 @@ public:
); );
static QByteArray BIO2ByteArray(BIO *b); static QByteArray BIO2ByteArray(BIO *b);
static void fileEncryption(const QByteArray &key, const QByteArray &iv,
QFile *input, QFile *output);
}; };
class ClientSideEncryption : public QObject { class ClientSideEncryption : public QObject {
@ -157,26 +160,6 @@ private:
QVector<QPair<QString, QString>> _sharing; QVector<QPair<QString, QString>> _sharing;
}; };
class FileEncryptionJob : public QObject
{
Q_OBJECT
public:
FileEncryptionJob(const QByteArray &key, const QByteArray &iv,
QPointer<QFile> input, QPointer<QFile> output, QObject *parent = 0);
public slots:
void start();
signals:
void finished(QFile *output);
private:
QByteArray _key;
QByteArray _iv;
QPointer<QFile> _input;
QPointer<QFile> _output;
};
class FileDecryptionJob : public QObject class FileDecryptionJob : public QObject
{ {
Q_OBJECT Q_OBJECT