summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2020-10-08 18:30:31 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2020-10-08 18:30:31 +0200
commit8ec76daedac7419f6ba5eb1f2edf00a6d551f752 (patch)
tree57ec52a5ac9bd2ed01b3cd5ff094dae9bc550067 /src
parentTry to please the CI gods (diff)
downloadnheko-8ec76daedac7419f6ba5eb1f2edf00a6d551f752.tar.xz
Send master key in verification flow (if we trust it)
Diffstat (limited to 'src')
-rw-r--r--src/DeviceVerificationFlow.cpp23
-rw-r--r--src/DeviceVerificationFlow.h3
2 files changed, 26 insertions, 0 deletions
diff --git a/src/DeviceVerificationFlow.cpp b/src/DeviceVerificationFlow.cpp
index 97f42592..4350a90b 100644
--- a/src/DeviceVerificationFlow.cpp
+++ b/src/DeviceVerificationFlow.cpp
@@ -57,6 +57,25 @@ DeviceVerificationFlow::DeviceVerificationFlow(QObject *,
                   this->their_keys = res;
           });
 
+        ChatPage::instance()->query_keys(
+          http::client()->user_id().to_string(),
+          [this](const UserKeyCache &res, mtx::http::RequestErr err) {
+                  if (err) {
+                          nhlog::net()->warn("failed to query device keys: {},{}",
+                                             err->matrix_error.errcode,
+                                             static_cast<int>(err->status_code));
+                          return;
+                  }
+
+                  if (res.master_keys.keys.empty())
+                          return;
+
+                  if (auto status =
+                        cache::verificationStatus(http::client()->user_id().to_string());
+                      status && status->user_verified)
+                          this->our_trusted_master_key = res.master_keys.keys.begin()->second;
+          });
+
         if (model) {
                 connect(this->model_,
                         &TimelineModel::updateFlowEventId,
@@ -655,6 +674,10 @@ DeviceVerificationFlow::sendVerificationMac()
         std::map<std::string, std::string> key_list;
         key_list["ed25519:" + http::client()->device_id()] = olm::client()->identity_keys().ed25519;
 
+        // send our master key, if we trust it
+        if (!this->our_trusted_master_key.empty())
+                key_list["ed25519:" + our_trusted_master_key] = our_trusted_master_key;
+
         mtx::events::msg::KeyVerificationMac req =
           key_verification_mac(sas.get(),
                                http::client()->user_id(),
diff --git a/src/DeviceVerificationFlow.h b/src/DeviceVerificationFlow.h
index d70374d9..70b5d9b3 100644
--- a/src/DeviceVerificationFlow.h
+++ b/src/DeviceVerificationFlow.h
@@ -185,6 +185,9 @@ private:
         mtx::identifiers::User toClient;
         QString deviceId;
 
+        // public part of our master key, when trusted or empty
+        std::string our_trusted_master_key;
+
         mtx::events::msg::SASMethods method = mtx::events::msg::SASMethods::Emoji;
         QTimer *timeout                     = nullptr;
         sas_ptr sas;