const auto deletePrivateKeyJob = createDeleteJob(user + e2e_private);
const auto deleteCertJob = createDeleteJob(user + e2e_cert);
const auto deleteMnemonicJob = createDeleteJob(user + e2e_mnemonic);
+ const auto deletePublicKeyJob = createDeleteJob(user + e2e_public);
connect(deletePrivateKeyJob, &DeletePasswordJob::finished, this, &ClientSideEncryption::handlePrivateKeyDeleted);
connect(deleteCertJob, &DeletePasswordJob::finished, this, &ClientSideEncryption::handleCertificateDeleted);
connect(deleteMnemonicJob, &DeletePasswordJob::finished, this, &ClientSideEncryption::handleMnemonicDeleted);
+ connect(deletePublicKeyJob, &DeletePasswordJob::finished, this, &ClientSideEncryption::handlePublicKeyDeleted);
deletePrivateKeyJob->start();
deleteCertJob->start();
deleteMnemonicJob->start();
checkAllSensitiveDataDeleted();
}
+void ClientSideEncryption::handlePublicKeyDeleted(const QKeychain::Job * const incoming)
+{
+ const auto error = incoming->error();
+ if (error != QKeychain::NoError && error != QKeychain::EntryNotFound) {
+ qCWarning(lcCse) << "Public key could not be deleted:" << incoming->errorString();
+ return;
+ }
+
+ qCDebug(lcCse) << "Public key successfully deleted from keychain. Clearing.";
+ _publicKey = QByteArray();
+ Q_EMIT publicKeyDeleted();
+ checkAllSensitiveDataDeleted();
+}
+
bool ClientSideEncryption::sensitiveDataRemaining() const
{
return !_privateKey.isEmpty() || !_certificate.isNull() || !_mnemonic.isEmpty();
void ClientSideEncryption::checkServerHasSavedKeys(AccountPtr account)
{
const auto keyIsNotOnServer = [account, this] () {
- qCInfo(lcCse) << "server is missing keys. upload is necessary";
-
- Bio publicKeyBio;
- const auto publicKeyData = _publicKey.toPem();
- BIO_write(publicKeyBio, publicKeyData.constData(), publicKeyData.size());
- auto publicKey = PKey::readPublicKey(publicKeyBio);
-
- Bio privateKeyBio;
- BIO_write(privateKeyBio, _privateKey.constData(), _privateKey.size());
- auto privateKey = PKey::readPrivateKey(privateKeyBio);
+ qCInfo(lcCse) << "server is missing keys. deleting local keys";
- auto csrData = generateCSR(account, std::move(publicKey), std::move(privateKey));
- sendSignRequestCSR(account, std::move(csrData.second), std::move(csrData.first));
+ forgetSensitiveData(account);
};
const auto privateKeyOnServerIsValid = [this] () {
void privateKeyDeleted();
void certificateDeleted();
void mnemonicDeleted();
+ void publicKeyDeleted();
public slots:
void initialize(const OCC::AccountPtr &account);
void handlePrivateKeyDeleted(const QKeychain::Job* const incoming);
void handleCertificateDeleted(const QKeychain::Job* const incoming);
void handleMnemonicDeleted(const QKeychain::Job* const incoming);
+ void handlePublicKeyDeleted(const QKeychain::Job* const incoming);
void checkAllSensitiveDataDeleted();
void getPrivateKeyFromServer(const OCC::AccountPtr &account);