Skip to content

Commit 7df0399

Browse files
Changed how InboundGroupSession is created
Signed-off-by: Michael Hollister <[email protected]>
1 parent d113e68 commit 7df0399

File tree

1 file changed

+20
-29
lines changed

1 file changed

+20
-29
lines changed

crates/matrix-sdk-crypto/src/gossiping/machine.rs

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -989,8 +989,6 @@ impl GossipMachine {
989989
sender_key: Curve25519PublicKey,
990990
event: &DecryptedForwardedRoomKeyEvent,
991991
) -> Result<Option<InboundGroupSession>, CryptoStoreError> {
992-
use vodozemac::megolm::SessionKey;
993-
994992
let Some(info) = event.room_key_info() else {
995993
warn!(
996994
sender_key = sender_key.to_base64(),
@@ -1005,13 +1003,13 @@ impl GossipMachine {
10051003
else {
10061004
// We did not request this key, so determine if this key was
10071005
// forwarded as a result from a room invite
1008-
let (room_id, session_key, shared_history) = match &event.content {
1006+
let session = match &event.content {
10091007
ForwardedRoomKeyContent::MegolmV1AesSha2(c) => {
1010-
(&c.room_id, &c.session_key, c.shared_history)
1008+
InboundGroupSession::from(c.as_ref())
10111009
}
10121010
#[cfg(feature = "experimental-algorithms")]
10131011
ForwardedRoomKeyContent::MegolmV2AesSha2(c) => {
1014-
(&c.room_id, &c.session_key, c.shared_history)
1012+
InboundGroupSession::from(c.as_ref())
10151013
}
10161014
ForwardedRoomKeyContent::Unknown(_) => {
10171015
warn!(
@@ -1027,32 +1025,25 @@ impl GossipMachine {
10271025
}
10281026
};
10291027

1030-
if shared_history {
1031-
// Content does not indicate level of history visibility, so
1032-
// set it to least permissive for shared history
1033-
let visibility = Some(HistoryVisibility::Shared);
1034-
let session_key = SessionKey::from(session_key);
1035-
1036-
return Ok(Some(InboundGroupSession::new(
1037-
sender_key,
1038-
event.keys.ed25519,
1039-
room_id,
1040-
&session_key,
1041-
event.content.algorithm(),
1028+
if let Some(visibility) = session.history_visibility.as_ref() {
1029+
if matches!(
10421030
visibility,
1043-
)?));
1044-
} else {
1045-
warn!(
1046-
sender_key = ?sender_key,
1047-
room_id = ?info.room_id(),
1048-
session_id = info.session_id(),
1049-
sender_key = ?sender_key,
1050-
algorithm = ?info.algorithm(),
1051-
"Received a forwarded room key that we didn't request",
1052-
);
1053-
1054-
return Ok(None);
1031+
HistoryVisibility::Shared | HistoryVisibility::WorldReadable
1032+
) {
1033+
return Ok(Some(session));
1034+
}
10551035
}
1036+
1037+
warn!(
1038+
sender_key = ?sender_key,
1039+
room_id = ?info.room_id(),
1040+
session_id = info.session_id(),
1041+
sender_key = ?sender_key,
1042+
algorithm = ?info.algorithm(),
1043+
"Received a forwarded room key that we didn't request",
1044+
);
1045+
1046+
return Ok(None);
10561047
};
10571048

10581049
if self.should_accept_forward(&request, sender_key).await? {

0 commit comments

Comments
 (0)