Move the private key salt handling in its own function
authorKevin Ottens <kevin.ottens@nextcloud.com>
Mon, 10 Aug 2020 09:26:52 +0000 (11:26 +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
src/libsync/clientsideencryption.h
test/testclientsideencryption.cpp

index bf0a3050632c115850c2f31c1a78ff44d170b7b8..76017ec9cdcdf5aa5aab1c4ea8ad94d1990cc67e 100644 (file)
@@ -448,6 +448,19 @@ QByteArray decryptPrivateKey(const QByteArray& key, const QByteArray& data) {
     return QByteArray::fromBase64(result);
 }
 
+QByteArray extractPrivateKeySalt(const QByteArray &data)
+{
+    const auto parts = data.split('|');
+    qCInfo(lcCse()) << "found parts:" << parts;
+
+    if (parts.size() < 3) {
+        qCInfo(lcCse()) << "Not enough parts found";
+        return QByteArray();
+    }
+
+    return QByteArray::fromBase64(parts.at(2));
+}
+
 QByteArray decryptStringSymmetric(const QByteArray& key, const QByteArray& data) {
     qCInfo(lcCse()) << "decryptStringSymmetric key: " << key;
     qCInfo(lcCse()) << "decryptStringSymmetric data: " << data;
@@ -1135,9 +1148,7 @@ void ClientSideEncryption::decryptPrivateKey(const QByteArray &key) {
             qCInfo(lcCse()) << "mnemonic:" << mnemonic;
 
             // split off salt
-            // Todo better place?
-            auto pos = key.lastIndexOf('|');
-            QByteArray salt = QByteArray::fromBase64(key.mid(pos + 1));
+            const auto salt = EncryptionHelper::extractPrivateKeySalt(key);
 
             auto pass = EncryptionHelper::generatePassword(mnemonic, salt);
             qCInfo(lcCse()) << "Generated key:" << pass;
index cbfc2a6c0e6c265d0c991f82a767f636231ccf58..13ec980432008c2aac250ad113d89e032d80864e 100644 (file)
@@ -38,6 +38,7 @@ namespace EncryptionHelper {
             const QByteArray& key,
             const QByteArray& data
     );
+    OWNCLOUDSYNC_EXPORT QByteArray extractPrivateKeySalt(const QByteArray &data);
     OWNCLOUDSYNC_EXPORT QByteArray encryptStringSymmetric(
             const QByteArray& key,
             const QByteArray& data
index b7916c42e1915f3b2853e48fb6c67cf9a92c7295..91ecb0da8feec543ae8d400d09cf3783bc672cc5 100644 (file)
@@ -52,9 +52,11 @@ private slots:
 
         // WHEN
         const auto privateKey = EncryptionHelper::decryptPrivateKey(encryptionKey, cipher);
+        const auto salt = EncryptionHelper::extractPrivateKeySalt(cipher);
 
         // THEN
         QCOMPARE(privateKey, originalPrivateKey);
+        QCOMPARE(salt, originalSalt);
     }
 
     void shouldSymmetricEncryptStrings()