10 个版本 (6 个重大更新)
0.7.2 | 2024年7月18日 |
---|---|
0.7.0 | 2024年1月5日 |
0.6.0 | 2022年9月28日 |
0.5.0 | 2022年5月11日 |
0.1.0 | 2020年5月26日 |
#110 in 密码学
2,057 每月下载量
用于 11 个crate (5个直接使用)
1.5MB
32K SLoC
一种无网络IO的状态机实现,用于处理Matrix客户端的端到端加密。
用法
如果你只是想用Rust编写Matrix客户端或机器人,你可能需要查找matrix-sdk。
但是,如果你想在现有的Matrix客户端或库中添加端到端加密,请继续阅读。
状态机以推/拉方式工作
- 你将来自Matrix homeserver /sync响应的状态变化和事件推入状态机
- 你从状态机拉取需要发送回homeserver的请求
use std::collections::BTreeMap;
use matrix_sdk_crypto::{EncryptionSyncChanges, OlmMachine, OlmError};
use ruma::{
api::client::sync::sync_events::{v3::ToDevice, DeviceLists},
device_id, user_id,
};
#[tokio::main]
async fn main() -> Result<(), OlmError> {
let alice = user_id!("@alice:example.org");
let machine = OlmMachine::new(&alice, device_id!("DEVICEID")).await;
let changed_devices = DeviceLists::default();
let one_time_key_counts = BTreeMap::default();
let unused_fallback_keys = Some(Vec::new());
let next_batch_token = "T0K3N".to_owned();
// Push changes that the server sent to us in a sync response.
let decrypted_to_device = machine.receive_sync_changes(EncryptionSyncChanges {
to_device_events: vec![],
changed_devices: &changed_devices,
one_time_keys_counts: &one_time_key_counts,
unused_fallback_keys: unused_fallback_keys.as_deref(),
next_batch_token: Some(next_batch_token),
}).await?;
// Pull requests that we need to send out.
let outgoing_requests = machine.outgoing_requests().await?;
// Send the requests here out and call machine.mark_request_as_sent().
Ok(())
}
房间密钥共享算法
下面的决策树显示了此crate决定是否在密钥请求时与请求者共享房间密钥的方式。
Crate功能标志
以下crate功能标志可用
-
qrcode
: 启用QR码生成和读取功能 -
testing
: 提供测试设施和函数,特别是用于集成测试存储实现的。注意:不要在测试之外使用,我们不提供对这些的任何稳定性保证,这些只是辅助工具。如果你发现你需要在这里提供的任何函数在测试之外,请打开一个Github Issue,并告知我们你的使用案例,以便我们考虑。
依赖
~19–26MB
~483K SLoC