Ignore the salt part of the key during decryption
authorKevin Ottens <kevin.ottens@nextcloud.com>
Mon, 10 Aug 2020 09:19:20 +0000 (11:19 +0200)
committerKevin Ottens <kevin.ottens@nextcloud.com>
Mon, 10 Aug 2020 11:13:19 +0000 (13:13 +0200)
Signed-off-by: Kevin Ottens <kevin.ottens@nextcloud.com>
src/libsync/clientsideencryption.cpp
test/testclientsideencryption.cpp

index f78c264d43b00c5e766c5dde5d6ca4947b0bf680..bf0a3050632c115850c2f31c1a78ff44d170b7b8 100644 (file)
@@ -371,11 +371,16 @@ QByteArray decryptPrivateKey(const QByteArray& key, const QByteArray& data) {
     qCInfo(lcCse()) << "decryptStringSymmetric key: " << key;
     qCInfo(lcCse()) << "decryptStringSymmetric data: " << data;
 
-    int sep = data.indexOf('|');
-    qCInfo(lcCse()) << "sep at" << sep;
+    const auto parts = data.split('|');
+    qCInfo(lcCse()) << "found parts:" << parts;
 
-    QByteArray cipherTXT64 = data.left(sep);
-    QByteArray ivB64 = data.right(data.size() - sep - 1);
+    if (parts.size() < 2) {
+        qCInfo(lcCse()) << "Not enough parts found";
+        return QByteArray();
+    }
+
+    QByteArray cipherTXT64 = parts.at(0);
+    QByteArray ivB64 = parts.at(1);
 
     qCInfo(lcCse()) << "decryptStringSymmetric cipherTXT: " << cipherTXT64;
     qCInfo(lcCse()) << "decryptStringSymmetric IV: " << ivB64;
@@ -1133,12 +1138,11 @@ void ClientSideEncryption::decryptPrivateKey(const QByteArray &key) {
             // Todo better place?
             auto pos = key.lastIndexOf('|');
             QByteArray salt = QByteArray::fromBase64(key.mid(pos + 1));
-            auto key2 = key.left(pos);
 
             auto pass = EncryptionHelper::generatePassword(mnemonic, salt);
             qCInfo(lcCse()) << "Generated key:" << pass;
 
-            QByteArray privateKey = EncryptionHelper::decryptPrivateKey(pass, key2);
+            QByteArray privateKey = EncryptionHelper::decryptPrivateKey(pass, key);
             //_privateKey = QSslKey(privateKey, QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
             _privateKey = privateKey;
 
index b439c17ac966a654aaa0397ae36c649e477a2779..b7916c42e1915f3b2853e48fb6c67cf9a92c7295 100644 (file)
@@ -50,8 +50,8 @@ private slots:
         const auto originalSalt = QByteArrayLiteral("baz");
         const auto cipher = EncryptionHelper::encryptPrivateKey(encryptionKey, originalPrivateKey, originalSalt);
 
-        // WHEN (note the salt is not passed, so had to extract by hand)
-        const auto privateKey = EncryptionHelper::decryptPrivateKey(encryptionKey, cipher.left(cipher.lastIndexOf('|')));
+        // WHEN
+        const auto privateKey = EncryptionHelper::decryptPrivateKey(encryptionKey, cipher);
 
         // THEN
         QCOMPARE(privateKey, originalPrivateKey);