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 密码学

Download history 517/week @ 2024-04-27 564/week @ 2024-05-04 791/week @ 2024-05-11 739/week @ 2024-05-18 587/week @ 2024-05-25 518/week @ 2024-06-01 435/week @ 2024-06-08 609/week @ 2024-06-15 484/week @ 2024-06-22 352/week @ 2024-06-29 265/week @ 2024-07-06 568/week @ 2024-07-13 527/week @ 2024-07-20 500/week @ 2024-07-27 430/week @ 2024-08-03 497/week @ 2024-08-10

2,057 每月下载量
用于 11 个crate (5个直接使用)

Apache-2.0

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