]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
try to resend the public key if it is not on server but on local storage
authorMatthieu Gallien <matthieu.gallien@nextcloud.com>
Thu, 20 Apr 2023 16:54:36 +0000 (18:54 +0200)
committerMatthieu Gallien <matthieu_gallien@yahoo.fr>
Fri, 30 Jun 2023 13:32:03 +0000 (15:32 +0200)
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
src/libsync/clientsideencryption.cpp
src/libsync/clientsideencryption.h

index d680e320fdf030d25faebd1f840a82e0001f8706..3b7211e9bd72aa6bf590c88fde498dc397d0c873 100644 (file)
@@ -1299,11 +1299,12 @@ void ClientSideEncryption::generateKeyPair(const AccountPtr &account)
     _privateKey = key;
 
     qCInfo(lcCse()) << "Keys generated correctly, sending to server.";
-    generateCSR(account, std::move(localKeyPair));
-    writeMnemonic(account, [account, keyPair = std::move(keyPair), output, this]() mutable -> void {writeKeyPair(account, std::move(keyPair), output);});
+    auto csrOutput = generateCSR(account, std::move(localKeyPair));
+    writeMnemonic(account, [account, keyPair = std::move(csrOutput.second), output = std::move(csrOutput.first), this]() mutable -> void {writeKeyPair(account, std::move(keyPair), output);});
 }
 
-QByteArray ClientSideEncryption::generateCSR(AccountPtr account, PKey keyPair)
+std::pair<QByteArray, ClientSideEncryption::PKey> ClientSideEncryption::generateCSR(AccountPtr account,
+                                                                                    PKey keyPair)
 {
     auto result = QByteArray{};
 
@@ -1337,27 +1338,27 @@ QByteArray ClientSideEncryption::generateCSR(AccountPtr account, PKey keyPair)
         ret = X509_NAME_add_entry_by_txt(x509_name, v.first,  MBSTRING_ASC, (const unsigned char*) v.second, -1, -1, 0);
         if (ret != 1) {
             qCInfo(lcCse()) << "Error Generating the Certificate while adding" << v.first << v.second;
-            return result;
+            return {result, std::move(keyPair)};
         }
     }
 
     ret = X509_REQ_set_pubkey(x509_req, keyPair);
     if (ret != 1){
         qCInfo(lcCse()) << "Error setting the public key on the csr";
-        return result;
+        return {result, std::move(keyPair)};
     }
 
     ret = X509_REQ_sign(x509_req, keyPair, EVP_sha1());    // return x509_req->signature->length
     if (ret <= 0){
         qCInfo(lcCse()) << "Error setting the public key on the csr";
-        return result;
+        return {result, std::move(keyPair)};
     }
 
     Bio out;
     ret = PEM_write_bio_X509_REQ(out, x509_req);
     if (ret <= 0){
         qCInfo(lcCse()) << "Error exporting the csr to the BIO";
-        return result;
+        return {result, std::move(keyPair)};
     }
 
     result = BIO2ByteArray(out);
@@ -1369,7 +1370,7 @@ QByteArray ClientSideEncryption::generateCSR(AccountPtr account, PKey keyPair)
         generateMnemonic();
     }
 
-    return result;
+    return {result, std::move(keyPair)};
 }
 
 void ClientSideEncryption::sendSignRequestCSR(AccountPtr account,
@@ -1466,8 +1467,7 @@ void ClientSideEncryption::checkServerHasSavedKeys(AccountPtr account)
         Bio privateKeyBio;
         auto keyPair = PKey::readPublicKey(privateKeyBio);
         auto csrData = generateCSR(account, std::move(keyPair));
-        auto keyPair2 = PKey::readPublicKey(privateKeyBio);
-        sendSignRequestCSR(account, std::move(keyPair2), csrData);
+        sendSignRequestCSR(account, std::move(csrData.second), std::move(csrData.first));
     };
 
     const auto privateKeyOnServerIsValid = [this] () {
index 1a4d75e1f2dc4fa468f61f45ccbde17784a0851d..5b61a9035fb749d72d1bad0919596029353c69c3 100644 (file)
@@ -166,8 +166,8 @@ private slots:
 
 private:
     void generateMnemonic();
-    [[nodiscard]] QByteArray generateCSR(AccountPtr account,
-                                         PKey keyPair);
+    [[nodiscard]] std::pair<QByteArray, PKey> generateCSR(AccountPtr account,
+                                                          PKey keyPair);
 
     void sendSignRequestCSR(AccountPtr account,
                             PKey keyPair,