aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/keyverificationsession.cpp15
-rw-r--r--lib/keyverificationsession.h3
2 files changed, 17 insertions, 1 deletions
diff --git a/lib/keyverificationsession.cpp b/lib/keyverificationsession.cpp
index c6b62a83..541ca49b 100644
--- a/lib/keyverificationsession.cpp
+++ b/lib/keyverificationsession.cpp
@@ -249,6 +249,10 @@ void KeyVerificationSession::sendMac()
mac),
m_encrypted);
setState (macReceived ? DONE : WAITINGFORMAC);
+ m_verified = true;
+ if (!m_pendingEdKeyId.isEmpty()) {
+ trustKeys();
+ }
}
void KeyVerificationSession::sendDone()
@@ -387,7 +391,16 @@ void KeyVerificationSession::handleMac(const KeyVerificationMacEvent& event)
return;
}
- m_connection->database()->setSessionVerified(edKeyId);
+ m_pendingEdKeyId = edKeyId;
+
+ if (m_verified) {
+ trustKeys();
+ }
+}
+
+void KeyVerificationSession::trustKeys()
+{
+ m_connection->database()->setSessionVerified(m_pendingEdKeyId);
emit m_connection->sessionVerified(m_remoteUserId, m_remoteDeviceId);
macReceived = true;
diff --git a/lib/keyverificationsession.h b/lib/keyverificationsession.h
index aa0295cb..075ea1e2 100644
--- a/lib/keyverificationsession.h
+++ b/lib/keyverificationsession.h
@@ -125,6 +125,8 @@ private:
bool macReceived = false;
bool m_encrypted;
QStringList m_remoteSupportedMethods;
+ bool m_verified = false;
+ QString m_pendingEdKeyId{};
void handleReady(const KeyVerificationReadyEvent& event);
void handleStart(const KeyVerificationStartEvent& event);
@@ -138,6 +140,7 @@ private:
void setError(Error error);
static QString errorToString(Error error);
static Error stringToError(const QString& error);
+ void trustKeys();
QByteArray macInfo(bool verifying, const QString& key = "KEY_IDS"_ls);
QString calculateMac(const QString& input, bool verifying, const QString& keyId= "KEY_IDS"_ls);