diff --git a/src/DeviceVerificationFlow.cpp b/src/DeviceVerificationFlow.cpp index 97f4259..4350a90 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(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 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 d70374d..70b5d9b 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;