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;
|