mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-22 11:00:48 +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(
|
||||
MatrixClient
|
||||
GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
|
||||
GIT_TAG f84611f129b46746a4b586acaba54fc31a303bc6
|
||||
GIT_TAG ad5575bc24089dc385e97d9ace026414b618775c
|
||||
)
|
||||
FetchContent_MakeAvailable(MatrixClient)
|
||||
else()
|
||||
|
|
|
@ -146,7 +146,7 @@
|
|||
"name": "mtxclient",
|
||||
"sources": [
|
||||
{
|
||||
"commit": "f84611f129b46746a4b586acaba54fc31a303bc6",
|
||||
"commit": "ad5575bc24089dc385e97d9ace026414b618775c",
|
||||
"type": "git",
|
||||
"url": "https://github.com/Nheko-Reborn/mtxclient.git"
|
||||
}
|
||||
|
|
|
@ -3591,6 +3591,7 @@ init(const QString &user_id)
|
|||
qRegisterMetaType<QMap<QString, RoomInfo>>();
|
||||
qRegisterMetaType<std::map<QString, RoomInfo>>();
|
||||
qRegisterMetaType<std::map<QString, mtx::responses::Timeline>>();
|
||||
qRegisterMetaType<mtx::responses::QueryKeys>();
|
||||
|
||||
instance_ = std::make_unique<Cache>(user_id);
|
||||
}
|
||||
|
|
|
@ -234,6 +234,55 @@ DeviceVerificationFlow::DeviceVerificationFlow(QObject *,
|
|||
}
|
||||
|
||||
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->acceptDevice();
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue