From dd0528037d79098067bf794421c59f846be9608e Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Wed, 20 Dec 2017 23:09:28 +0100 Subject: [PATCH] [CSE] Generate a random name for the temporary file --- src/libsync/clientsideencryption.cpp | 16 +++++++++++++++- src/libsync/clientsideencryption.h | 1 + src/libsync/propagateuploadencrypted.cpp | 8 +++++--- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/libsync/clientsideencryption.cpp b/src/libsync/clientsideencryption.cpp index dc1b7b496..3c36501b5 100644 --- a/src/libsync/clientsideencryption.cpp +++ b/src/libsync/clientsideencryption.cpp @@ -65,7 +65,21 @@ namespace { } } -QByteArray EncryptionHelper::generateRandom(int size) { +QByteArray EncryptionHelper::generateRandomString(int size) +{ + const QByteArray possibleCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + + QByteArray randomString(size, '\0'); + for(int i=0; i < size; ++i) + { + int index = qrand() % possibleCharacters.length(); + randomString[i] = possibleCharacters.at(index); + } + return randomString; +} + +QByteArray EncryptionHelper::generateRandom(int size) +{ unsigned char *tmp = (unsigned char *)malloc(sizeof(unsigned char) * size); int ret = RAND_bytes(tmp, size); diff --git a/src/libsync/clientsideencryption.h b/src/libsync/clientsideencryption.h index b5a4e2a2d..7d5810a8d 100644 --- a/src/libsync/clientsideencryption.h +++ b/src/libsync/clientsideencryption.h @@ -28,6 +28,7 @@ QString baseUrl(); class EncryptionHelper { public: + static QByteArray generateRandomString(int size); static QByteArray generateRandom(int size); static QByteArray generatePassword(const QString &wordlist, const QByteArray& salt); static QByteArray encryptPrivateKey( diff --git a/src/libsync/propagateuploadencrypted.cpp b/src/libsync/propagateuploadencrypted.cpp index cfa3da33b..23d412601 100644 --- a/src/libsync/propagateuploadencrypted.cpp +++ b/src/libsync/propagateuploadencrypted.cpp @@ -126,7 +126,7 @@ void PropagateUploadEncrypted::slotFolderEncriptedMetadataReceived(const QJsonDo qDebug() << "Creating the encrypted file metadata helper."; EncryptedFile encryptedFile; encryptedFile.authenticationTag = "NOISE"; // TODO: Remove the noise. - encryptedFile.encryptedFilename = EncryptionHelper::generateRandom(20); + encryptedFile.encryptedFilename = EncryptionHelper::generateRandomString(20); encryptedFile.encryptionKey = EncryptionHelper::generateRandom(16); encryptedFile.fileVersion = 1; encryptedFile.initializationVector = EncryptionHelper::generateRandom(16); @@ -135,10 +135,12 @@ void PropagateUploadEncrypted::slotFolderEncriptedMetadataReceived(const QJsonDo metaData.addEncryptedFile(encryptedFile); qDebug() << "Encrypting the file"; - QFile *input = new QFile(info.absoluteFilePath()); + auto *input = new QFile(info.absoluteFilePath()); //TODO: Perhaps I should use a QTemporaryFile? - QFile *output = new QFile(QDir::tempPath() + encryptedFile.encryptedFilename); + qDebug() << "Creating " << QDir::tempPath() + QDir::separator() + encryptedFile.encryptedFilename; + + auto *output = new QFile(QDir::tempPath() + QDir::separator() + encryptedFile.encryptedFilename); EncryptionHelper::fileEncryption(encryptedFile.encryptionKey, encryptedFile.initializationVector,