From 15f3e2acaeb047e0b23782c32c89f9419bcab92d Mon Sep 17 00:00:00 2001 From: Matthieu Gallien Date: Fri, 7 Apr 2023 16:24:57 +0200 Subject: [PATCH] backup private key early Signed-off-by: Matthieu Gallien --- src/libsync/clientsideencryption.cpp | 23 +++++++++++++++++++++++ src/libsync/clientsideencryption.h | 2 ++ 2 files changed, 25 insertions(+) diff --git a/src/libsync/clientsideencryption.cpp b/src/libsync/clientsideencryption.cpp index 5889ef94d..f8c4243b0 100644 --- a/src/libsync/clientsideencryption.cpp +++ b/src/libsync/clientsideencryption.cpp @@ -1292,6 +1292,9 @@ void ClientSideEncryption::generateCSR(const AccountPtr &account, PKey keyPair) qCInfo(lcCse()) << "Returning the certificate"; qCInfo(lcCse()) << output; + writeMnemonic(account); + writeKeyPair(account); + sendSignRequestCSR(account, std::move(keyPair), output); } @@ -1326,6 +1329,26 @@ void ClientSideEncryption::sendSignRequestCSR(const AccountPtr &account, PKey ke job->start(); } +bool ClientSideEncryption::writeKeyPair(const AccountPtr &account, + const PKey &keyPair) +{ + const QString kck = AbstractCredentials::keychainKey( + account->url().toString(), + account->credentials()->user() + e2e_private, + account->id() + ); + + auto *job = new WritePasswordJob(Theme::instance()->appName()); + job->setInsecureFallback(false); + job->setKey(kck); + job->setBinaryData(_privateKey); + connect(job, &WritePasswordJob::finished, [](Job *incoming) { + Q_UNUSED(incoming); + qCInfo(lcCse()) << "Private key stored in keychain"; + }); + job->start(); +} + void ClientSideEncryption::encryptPrivateKey(const AccountPtr &account) { QStringList list = WordList::getRandomWords(12); diff --git a/src/libsync/clientsideencryption.h b/src/libsync/clientsideencryption.h index 4d074c965..a9138b13d 100644 --- a/src/libsync/clientsideencryption.h +++ b/src/libsync/clientsideencryption.h @@ -166,6 +166,8 @@ private slots: private: void generateCSR(const AccountPtr &account, PKey keyPair); void sendSignRequestCSR(const AccountPtr &account, PKey keyPair, const QByteArray &csrContent); + [[nodiscard]] bool writeKeyPair(const AccountPtr &account, + const PKey &keyPair); [[nodiscard]] bool checkPublicKeyValidity(const AccountPtr &account) const; [[nodiscard]] bool checkServerPublicKeyValidity(const QByteArray &serverPublicKeyString) const; -- 2.39.5