crypto: More SAS tests for all the unknown SAS methods.

master
Damir Jelić 2020-08-11 11:05:22 +02:00
parent 8a2d6a4450
commit d5a853f3da
1 changed files with 81 additions and 1 deletions

View File

@ -823,7 +823,13 @@ mod test {
use crate::{Account, Device}; use crate::{Account, Device};
use matrix_sdk_common::{ use matrix_sdk_common::{
events::{key::verification::accept::AcceptMethod, EventContent, ToDeviceEvent}, events::{
key::verification::{
accept::{AcceptMethod, CustomContent},
start::{CustomContent as CustomStartContent, StartMethod},
},
EventContent, ToDeviceEvent,
},
identifiers::{DeviceId, UserId}, identifiers::{DeviceId, UserId},
}; };
@ -920,12 +926,15 @@ mod test {
assert_eq!(alice.get_decimal(), bob.get_decimal()); assert_eq!(alice.get_decimal(), bob.get_decimal());
assert_eq!(alice.get_emoji(), bob.get_emoji()); assert_eq!(alice.get_emoji(), bob.get_emoji());
let bob_decimals = bob.get_decimal();
let bob = bob.confirm(); let bob = bob.confirm();
let event = wrap_to_device_event(bob.user_id(), bob.as_content()); let event = wrap_to_device_event(bob.user_id(), bob.as_content());
let alice = alice.into_mac_received(&event).unwrap(); let alice = alice.into_mac_received(&event).unwrap();
assert!(!alice.get_emoji().is_empty()); assert!(!alice.get_emoji().is_empty());
assert_eq!(alice.get_decimal(), bob_decimals);
let alice = alice.confirm(); let alice = alice.confirm();
let event = wrap_to_device_event(alice.user_id(), alice.as_content()); let event = wrap_to_device_event(alice.user_id(), alice.as_content());
@ -969,4 +978,75 @@ mod test {
.into_accepted(&event) .into_accepted(&event)
.expect_err("Didn't cancel on a invalid sender"); .expect_err("Didn't cancel on a invalid sender");
} }
#[tokio::test]
async fn sas_unknown_sas_method() {
let (alice, bob) = get_sas_pair().await;
let mut event = wrap_to_device_event(bob.user_id(), bob.as_content());
event.sender = UserId::try_from("@malory:example.org").unwrap();
match &mut event.content.method {
AcceptMethod::MSasV1(ref mut c) => {
c.short_authentication_string = vec![];
}
_ => panic!("Unknown accept event content"),
}
alice
.into_accepted(&event)
.expect_err("Didn't cancel on an invalid SAS method");
}
#[tokio::test]
async fn sas_unknown_method() {
let (alice, bob) = get_sas_pair().await;
let mut event = wrap_to_device_event(bob.user_id(), bob.as_content());
event.sender = UserId::try_from("@malory:example.org").unwrap();
event.content.method = AcceptMethod::Custom(CustomContent {
method: "m.sas.custom".to_string(),
fields: vec![].into_iter().collect(),
});
alice
.into_accepted(&event)
.expect_err("Didn't cancel on an unknown SAS method");
}
#[tokio::test]
async fn sas_from_start_unknown_method() {
let alice = Account::new(&alice_id(), &alice_device_id());
let alice_device = Device::from_account(&alice).await;
let bob = Account::new(&bob_id(), &bob_device_id());
let bob_device = Device::from_account(&bob).await;
let alice_sas = SasState::<Created>::new(alice.clone(), bob_device);
let mut start_content = alice_sas.as_content();
match start_content.method {
StartMethod::MSasV1(ref mut c) => {
c.message_authentication_codes = vec![];
}
_ => panic!("Unknown SAS start method"),
}
let event = wrap_to_device_event(alice_sas.user_id(), start_content);
SasState::<Started>::from_start_event(bob.clone(), alice_device.clone(), &event)
.expect_err("Didn't cancel on invalid MAC method");
let mut start_content = alice_sas.as_content();
start_content.method = StartMethod::Custom(CustomStartContent {
method: "m.sas.custom".to_string(),
fields: vec![].into_iter().collect(),
});
let event = wrap_to_device_event(alice_sas.user_id(), start_content);
SasState::<Started>::from_start_event(bob.clone(), alice_device, &event)
.expect_err("Didn't cancel on unknown sas method");
}
} }