@@ -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