mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-25 20:48:52 +03:00
Implement signature upload for own master key
This commit is contained in:
parent
7b6fab3373
commit
cd43147b77
4 changed files with 52 additions and 2 deletions
|
@ -341,7 +341,7 @@ if(USE_BUNDLED_MTXCLIENT)
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
MatrixClient
|
MatrixClient
|
||||||
GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
|
GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
|
||||||
GIT_TAG f84611f129b46746a4b586acaba54fc31a303bc6
|
GIT_TAG ad5575bc24089dc385e97d9ace026414b618775c
|
||||||
)
|
)
|
||||||
FetchContent_MakeAvailable(MatrixClient)
|
FetchContent_MakeAvailable(MatrixClient)
|
||||||
else()
|
else()
|
||||||
|
|
|
@ -146,7 +146,7 @@
|
||||||
"name": "mtxclient",
|
"name": "mtxclient",
|
||||||
"sources": [
|
"sources": [
|
||||||
{
|
{
|
||||||
"commit": "f84611f129b46746a4b586acaba54fc31a303bc6",
|
"commit": "ad5575bc24089dc385e97d9ace026414b618775c",
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/Nheko-Reborn/mtxclient.git"
|
"url": "https://github.com/Nheko-Reborn/mtxclient.git"
|
||||||
}
|
}
|
||||||
|
|
|
@ -3591,6 +3591,7 @@ init(const QString &user_id)
|
||||||
qRegisterMetaType<QMap<QString, RoomInfo>>();
|
qRegisterMetaType<QMap<QString, RoomInfo>>();
|
||||||
qRegisterMetaType<std::map<QString, RoomInfo>>();
|
qRegisterMetaType<std::map<QString, RoomInfo>>();
|
||||||
qRegisterMetaType<std::map<QString, mtx::responses::Timeline>>();
|
qRegisterMetaType<std::map<QString, mtx::responses::Timeline>>();
|
||||||
|
qRegisterMetaType<mtx::responses::QueryKeys>();
|
||||||
|
|
||||||
instance_ = std::make_unique<Cache>(user_id);
|
instance_ = std::make_unique<Cache>(user_id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -234,6 +234,55 @@ DeviceVerificationFlow::DeviceVerificationFlow(QObject *,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg.keys == macs.keys) {
|
if (msg.keys == macs.keys) {
|
||||||
|
mtx::requests::KeySignaturesUpload req;
|
||||||
|
if (utils::localUser().toStdString() == this->toClient.to_string()) {
|
||||||
|
// self verification, sign master key with device key, if we
|
||||||
|
// verified it
|
||||||
|
for (const auto &mac : msg.mac) {
|
||||||
|
if (their_keys.master_keys.keys.count(mac.first)) {
|
||||||
|
json j = their_keys.master_keys;
|
||||||
|
j.erase("signatures");
|
||||||
|
j.erase("unsigned");
|
||||||
|
mtx::crypto::CrossSigningKeys master_key = j;
|
||||||
|
master_key
|
||||||
|
.signatures[utils::localUser().toStdString()]
|
||||||
|
["ed25519:" +
|
||||||
|
http::client()->device_id()] =
|
||||||
|
olm::client()->sign_message(j.dump());
|
||||||
|
req.signatures[utils::localUser().toStdString()]
|
||||||
|
[master_key.keys.at(mac.first)] =
|
||||||
|
master_key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TODO(Nico): Sign their device key with self signing key
|
||||||
|
} else {
|
||||||
|
// TODO(Nico): Sign their master key with user signing key
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!req.signatures.empty()) {
|
||||||
|
http::client()->keys_signatures_upload(
|
||||||
|
req,
|
||||||
|
[](const mtx::responses::KeySignaturesUpload &res,
|
||||||
|
mtx::http::RequestErr err) {
|
||||||
|
if (err) {
|
||||||
|
nhlog::net()->error(
|
||||||
|
"failed to upload signatures: {},{}",
|
||||||
|
err->matrix_error.errcode,
|
||||||
|
static_cast<int>(err->status_code));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto &[user_id, tmp] : res.errors)
|
||||||
|
for (const auto &[key_id, e] : tmp)
|
||||||
|
nhlog::net()->error(
|
||||||
|
"signature error for user {} and key "
|
||||||
|
"id {}: {}, {}",
|
||||||
|
user_id,
|
||||||
|
key_id,
|
||||||
|
e.errcode,
|
||||||
|
e.error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
this->isMacVerified = true;
|
this->isMacVerified = true;
|
||||||
this->acceptDevice();
|
this->acceptDevice();
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue