From 7e83f0591b130175965a357bd78bd3d456a499d3 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Wed, 20 Dec 2017 22:32:38 +0100 Subject: [PATCH] [CSE] Create the Encrypted File on Disk --- src/libsync/propagateuploadencrypted.cpp | 39 +++++++++++++++++++++++- src/libsync/propagateuploadencrypted.h | 4 +++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/libsync/propagateuploadencrypted.cpp b/src/libsync/propagateuploadencrypted.cpp index 25d164420..cfa3da33b 100644 --- a/src/libsync/propagateuploadencrypted.cpp +++ b/src/libsync/propagateuploadencrypted.cpp @@ -7,6 +7,8 @@ #include #include #include +#include +#include namespace OCC { @@ -111,9 +113,44 @@ void PropagateUploadEncrypted::slotFolderEncriptedMetadataReceived(const QJsonDo { qDebug() << "Metadata Received, Preparing it for the new file." << json.toVariant(); + // Encrypt File! FolderMetadata metaData(_propagator->account(), json.toJson(QJsonDocument::Compact)); - qDebug() << "Unlockign folder because I didn't finished the metadata yet."; + QFileInfo info(_item->_file); + + //Todo: Move this to the MetadataHandler. + /* This should actually first verify if we don't have this file on the metadata already + * and construct this code if there isn't. + */ + + qDebug() << "Creating the encrypted file metadata helper."; + EncryptedFile encryptedFile; + encryptedFile.authenticationTag = "NOISE"; // TODO: Remove the noise. + encryptedFile.encryptedFilename = EncryptionHelper::generateRandom(20); + encryptedFile.encryptionKey = EncryptionHelper::generateRandom(16); + encryptedFile.fileVersion = 1; + encryptedFile.initializationVector = EncryptionHelper::generateRandom(16); + encryptedFile.metadataKey = 1; + encryptedFile.originalFilename = info.fileName(); + metaData.addEncryptedFile(encryptedFile); + + qDebug() << "Encrypting the file"; + QFile *input = new QFile(info.absoluteFilePath()); + + //TODO: Perhaps I should use a QTemporaryFile? + QFile *output = new QFile(QDir::tempPath() + encryptedFile.encryptedFilename); + + EncryptionHelper::fileEncryption(encryptedFile.encryptionKey, + encryptedFile.initializationVector, + input, output); + + + qDebug() << "Removing Temporary File Temporarely"; + output->remove(); + input->deleteLater(); + output->deleteLater(); + + qDebug() << "Unlockign folder because I didn't finished the metadata yet."; auto *unlockJob = new UnlockEncryptFolderApiJob(_propagator->account(), _folderId, _folderToken, this); connect(unlockJob, &UnlockEncryptFolderApiJob::success, this, &PropagateUploadEncrypted::slotUnlockEncryptedFolderSuccess); connect(unlockJob, &UnlockEncryptFolderApiJob::error, this, &PropagateUploadEncrypted::slotUnlockEncryptedFolderError); diff --git a/src/libsync/propagateuploadencrypted.h b/src/libsync/propagateuploadencrypted.h index 38d747e0b..979a514af 100644 --- a/src/libsync/propagateuploadencrypted.h +++ b/src/libsync/propagateuploadencrypted.h @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include "owncloudpropagator.h" @@ -57,6 +59,8 @@ private: bool _currentLockingInProgress; QByteArray _folderToken; QByteArray _folderId; + QByteArray _generatedKey; + QByteArray _generatedIv; };