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

index f4cb2209..1d86b4d7 100644 --- a/src/Olm.cpp +++ b/src/Olm.cpp
@@ -500,12 +500,14 @@ handle_key_request_message(const mtx::events::DeviceEvent<mtx::events::msg::KeyR } // Check that the requested session_id and the one we have saved match. - const auto session = cache::getOutboundMegolmSession(req.content.room_id); - if (req.content.session_id != session.data.session_id) { - nhlog::crypto()->warn("session id of retrieved session doesn't match the request: " - "requested({}), ours({})", - req.content.session_id, - session.data.session_id); + MegolmSessionIndex index{}; + index.room_id = req.content.room_id; + index.session_id = req.content.session_id; + index.sender_key = olm::client()->identity_keys().curve25519; + + const auto session = cache::getInboundMegolmSession(index); + if (!session) { + nhlog::crypto()->warn("No session with id {} in db", req.content.session_id); return; } @@ -523,13 +525,14 @@ handle_key_request_message(const mtx::events::DeviceEvent<mtx::events::msg::KeyR return; } + auto session_key = mtx::crypto::export_session(session); // // Prepare the m.room_key event. // auto payload = json{{"algorithm", "m.megolm.v1.aes-sha2"}, {"room_id", req.content.room_id}, {"session_id", req.content.session_id}, - {"session_key", session.data.session_key}}; + {"session_key", session_key}}; send_megolm_key_to_device(req.sender, req.content.requesting_device_id, payload); }