crypto: Test the Olm encryption.
parent
b6c9358d14
commit
4df6099125
|
@ -1380,6 +1380,10 @@ mod test {
|
||||||
use crate::api::r0::keys;
|
use crate::api::r0::keys;
|
||||||
use crate::crypto::machine::{OlmMachine, OneTimeKeys};
|
use crate::crypto::machine::{OlmMachine, OneTimeKeys};
|
||||||
use crate::crypto::Device;
|
use crate::crypto::Device;
|
||||||
|
use crate::events::{
|
||||||
|
to_device::{AnyToDeviceEvent, ToDeviceEncrypted},
|
||||||
|
EventType,
|
||||||
|
};
|
||||||
use crate::identifiers::{DeviceId, UserId};
|
use crate::identifiers::{DeviceId, UserId};
|
||||||
|
|
||||||
use http::Response;
|
use http::Response;
|
||||||
|
@ -1459,6 +1463,29 @@ mod test {
|
||||||
(alice, bob, otk)
|
(alice, bob, otk)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn get_machine_pair_with_session() -> (OlmMachine, OlmMachine) {
|
||||||
|
let (mut alice, bob, one_time_keys) = get_machine_pair().await;
|
||||||
|
|
||||||
|
let mut bob_keys = BTreeMap::new();
|
||||||
|
|
||||||
|
let one_time_key = one_time_keys.iter().nth(0).unwrap();
|
||||||
|
let mut keys = BTreeMap::new();
|
||||||
|
keys.insert(one_time_key.0.clone(), one_time_key.1.clone());
|
||||||
|
bob_keys.insert(bob.device_id.clone(), keys);
|
||||||
|
|
||||||
|
let mut one_time_keys = BTreeMap::new();
|
||||||
|
one_time_keys.insert(bob.user_id.clone(), bob_keys);
|
||||||
|
|
||||||
|
let response = keys::claim_keys::Response {
|
||||||
|
failures: BTreeMap::new(),
|
||||||
|
one_time_keys,
|
||||||
|
};
|
||||||
|
|
||||||
|
alice.receive_keys_claim_response(&response).await.unwrap();
|
||||||
|
|
||||||
|
(alice, bob)
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn create_olm_machine() {
|
async fn create_olm_machine() {
|
||||||
let machine = OlmMachine::new(&user_id(), DEVICE_ID).unwrap();
|
let machine = OlmMachine::new(&user_id(), DEVICE_ID).unwrap();
|
||||||
|
@ -1669,7 +1696,7 @@ mod test {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_key_claiming() {
|
async fn test_session_creation() {
|
||||||
let (mut alice_machine, bob_machine, one_time_keys) = get_machine_pair().await;
|
let (mut alice_machine, bob_machine, one_time_keys) = get_machine_pair().await;
|
||||||
|
|
||||||
let mut bob_keys = BTreeMap::new();
|
let mut bob_keys = BTreeMap::new();
|
||||||
|
@ -1701,4 +1728,42 @@ mod test {
|
||||||
|
|
||||||
assert!(!session.lock().await.is_empty())
|
assert!(!session.lock().await.is_empty())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_olm_encryption() {
|
||||||
|
let (mut alice, mut bob) = get_machine_pair_with_session().await;
|
||||||
|
|
||||||
|
let session = alice
|
||||||
|
.store
|
||||||
|
.get_sessions(bob.account.identity_keys().curve25519())
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.unwrap()
|
||||||
|
.lock()
|
||||||
|
.await[0]
|
||||||
|
.clone();
|
||||||
|
|
||||||
|
let bob_device = alice
|
||||||
|
.store
|
||||||
|
.get_device(&bob.user_id, &bob.device_id)
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let event = ToDeviceEncrypted {
|
||||||
|
sender: alice.user_id.clone(),
|
||||||
|
content: alice
|
||||||
|
.olm_encrypt(session, &bob_device, EventType::Dummy, json!({}))
|
||||||
|
.await
|
||||||
|
.unwrap(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let event = bob.decrypt_to_device_event(&event).await.unwrap();
|
||||||
|
|
||||||
|
if let AnyToDeviceEvent::Dummy(e) = event.deserialize().unwrap() {
|
||||||
|
assert_eq!(e.sender, alice.user_id);
|
||||||
|
} else {
|
||||||
|
panic!("Event had the wrong type");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue