summary refs log tree commit diff
path: root/src/DeviceVerificationFlow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/DeviceVerificationFlow.cpp')
-rw-r--r--src/DeviceVerificationFlow.cpp81
1 files changed, 42 insertions, 39 deletions
diff --git a/src/DeviceVerificationFlow.cpp b/src/DeviceVerificationFlow.cpp

index 9b260892..2c6e9c1e 100644 --- a/src/DeviceVerificationFlow.cpp +++ b/src/DeviceVerificationFlow.cpp
@@ -13,7 +13,8 @@ DeviceVerificationFlow::DeviceVerificationFlow(QObject *) { timeout = new QTimer(this); timeout->setSingleShot(true); - this->sas = olm::client()->sas_init(); + this->sas = olm::client()->sas_init(); + this->isMacVerified = false; connect(timeout, &QTimer::timeout, this, [this]() { emit timedout(); this->deleteLater(); @@ -134,45 +135,47 @@ DeviceVerificationFlow::DeviceVerificationFlow(QObject *) } } }); - connect(ChatPage::instance(), - &ChatPage::recievedDeviceVerificationMac, - this, - [this](const mtx::events::collections::DeviceEvents &message) { - auto msg = - std::get<mtx::events::DeviceEvent<msgs::KeyVerificationMac>>(message); - if (msg.content.transaction_id == this->transaction_id) { - std::string info = - "MATRIX_KEY_VERIFICATION_MAC" + this->toClient.to_string() + - this->deviceId.toStdString() + - http::client()->user_id().to_string() + - http::client()->device_id() + this->transaction_id; + connect( + ChatPage::instance(), + &ChatPage::recievedDeviceVerificationMac, + this, + [this](const mtx::events::collections::DeviceEvents &message) { + auto msg = std::get<mtx::events::DeviceEvent<msgs::KeyVerificationMac>>(message); + if (msg.content.transaction_id == this->transaction_id) { + std::string info = + "MATRIX_KEY_VERIFICATION_MAC" + this->toClient.to_string() + + this->deviceId.toStdString() + http::client()->user_id().to_string() + + http::client()->device_id() + this->transaction_id; - std::vector<std::string> key_list; - std::string key_string; - for (auto mac : msg.content.mac) { - if (mac.second == - this->sas->calculate_mac(this->device_keys[mac.first], - info + mac.first)) { - key_string += mac.first; - } else { - this->cancelVerification(); - return; - } - } - if (msg.content.keys == - this->sas->calculate_mac(key_string, info + "KEY_IDS")) { - // uncomment this in future to be compatible with the - // MSC2366 this->sendVerificationDone(); and remoeve the - // below line - if (this->isMacVerified == true) - emit this->deviceVerified(); - else - this->isMacVerified = true; - } else { - this->cancelVerification(); - } - } - }); + std::vector<std::string> key_list; + std::string key_string; + for (auto mac : msg.content.mac) { + key_string += mac.first + ","; + if (device_keys[mac.first] != "") { + if (mac.second == + this->sas->calculate_mac(this->device_keys[mac.first], + info + mac.first)) { + } else { + this->cancelVerification(); + return; + } + } + } + key_string = key_string.substr(0, key_string.length() - 1); + if (msg.content.keys == + this->sas->calculate_mac(key_string, info + "KEY_IDS")) { + // uncomment this in future to be compatible with the + // MSC2366 this->sendVerificationDone(); and remove the + // below line + if (this->isMacVerified == true) + emit this->deviceVerified(); + else + this->isMacVerified = true; + } else { + this->cancelVerification(); + } + } + }); connect(ChatPage::instance(), &ChatPage::recievedDeviceVerificationReady, this,