#signaling #end-to-end #e2e #signaling-server #cryptography #saltyrtc

saltyrtc-client

异步 SaltyRTC 客户端实现,适用于 Rust

10 个不稳定版本 (4 个破坏性更新)

0.9.0 2022年9月27日
0.8.0-rc.22022年2月17日
0.7.0 2021年2月15日
0.6.0 2018年9月6日
0.5.0-beta.32018年6月1日

#3 in #e2e

Download history 10/week @ 2024-07-01 69/week @ 2024-07-29

每月69 次下载

MIT/Apache

350KB
7K SLoC

saltyrtc-client-rs

CircleCI Join our chat on Gitter

异步 SaltyRTC 客户端实现,适用于 Rust。

⚠️ 注意: SaltyRTC 客户端库处于维护模式。它们仍将接收错误修复和常规维护,但如果您想开始使用这些库,请做好在某个时间点接管维护的准备。(如果您有兴趣维护这些库,请告诉我们,我们的电子邮件在 README 中的“安全”部分。)

SaltyRTC 是一个端到端加密的信令协议。它允许您自由选择一系列信令任务,例如设置 WebRTC 或 ORTC 点对点连接,或使用基于 WebSocket 的信令服务器作为中继。SaltyRTC 对所有可行的新和自定义信令任务都完全开放。

文档

测试

设置

集成测试目前期望一个 SaltyRTC 服务器 实例在 localhost:8765 上运行。

首先,为 localhost 创建一个测试证书。

openssl req \
   -newkey rsa:1024 \
   -x509 \
   -nodes \
   -keyout saltyrtc.key \
   -new \
   -out saltyrtc.crt \
   -subj /CN=localhost \
   -reqexts SAN \
   -extensions SAN \
   -config <(cat /etc/ssl/openssl.cnf \
     <(printf '[SAN]\nsubjectAltName=DNS:localhost')) \
   -sha256 \
   -days 1825

创建带有依赖项的 Python 虚拟环境

python3 -m virtualenv venv
venv/bin/pip install saltyrtc.server[logging]

最后,使用以下测试永久密钥启动服务器

export SALTYRTC_SERVER_PERMANENT_KEY=0919b266ce1855419e4066fc076b39855e728768e3afa773105edd2e37037c20 # Public: 09a59a5fa6b45cb07638a3a6e347ce563a948b756fd22f9527465f7c79c2a864
venv/bin/saltyrtc-server -v 5 serve -p 8765 \
    -sc saltyrtc.crt -sk saltyrtc.key \
    -k $SALTYRTC_SERVER_PERMANENT_KEY

在运行客户端测试之前,将 saltyrtc.crt 文件符号链接到您的 saltyrtc-client-rs 目录。

单元测试

要运行测试套件

cargo test

模糊测试

要运行模糊测试,首先安装 cargo-fuzz

cargo install cargo-fuzz

然后针对目标运行模糊器

cargo +nightly fuzz run <target>

您可以使用 cargo fuzz list 列出所有目标。

示例客户端

examples/chat/main.rs 中有一个示例聊天客户端。您可以将其作为发起者或响应者调用。请注意,您需要在系统上安装 libncurses 才能使聊天示例正常工作。

如果您以发起者的身份启动聊天,信令路径和身份验证令牌将随机生成并打印出来

$ cargo run --example chat -- initiator
INFO:saltyrtc_client::crypto: Generating new key pair
INFO:saltyrtc_client::crypto: Generating new auth token

******************************
Connecting as Initiator

Signaling path: f637d7fff53defe8db111b17b2c445f7888a83c13dc40d7ff8449f700910f01f
Auth token: 0e94b54a49e4ec7f4398ec9bec5d4359cca810f7eca31704e6c0afadd54a7818

To connect with a peer:
cargo run --example chat -- responder \
    --path f637d7fff53defe8db111b17b2c445f7888a83c13dc40d7ff8449f700910f01f \
    --auth-token 0e94b54a49e4ec7f4398ec9bec5d4359cca810f7eca31704e6c0afadd54a7818
******************************

INFO:saltyrtc_client: Connected to server as Initiator
...

只需将命令复制到输出后半部分的其他终端中,即可作为响应者连接到发起者。

要查看所有选项,请使用以下命令:cargo run --example chat -- initiator --helpcargo run --example chat -- responder --help

聊天示例将日志记录到名为 chat.<角色>.log 的文件中。

注意:当前测试期望有一个运行在 localhost:8765SaltyRTC 服务器 实例。

Msgpack 调试

如果您启用了 msgpack-debugging 编译标志,您将获得所有解码消息的直接 msgpack 分析 URL,这些消息在您的 TRACE 级别日志中。

cargo build --features 'msgpack-debugging'

您可以在编译时使用 MSGPACK_DEBUG_URL 环境变量来自定义该 URL 前缀。这是默认 URL

MSGPACK_DEBUG_URL='https://msgpack.dbrgn.ch/#base64='

发布签名

发布提交和标签使用 Threema 签名密钥E7ADD9914E260E8B35DFB50665FDE935573ACDA6)签名。

FFI

您可以在本源存储库的 ffi 子目录中找到 C FFI 绑定。

注意:当前的 FFI 绑定不完整,并由 rust-lang/rust#36342 阻塞。

依赖项修补

以下是在 Cargo.toml 中的推荐修补程序,用于解决传递依赖中的问题

[patch.crates-io]
traitobject = { git = "https://github.com/philip-peterson/destructure_traitobject", rev = "d49b0af9087b3b7848d19d5baae43948ebc7fb9d" }

许可证

根据您的选择,许可方式如下

贡献

除非您明确表示,否则您提交的任何有意包含在本作品中的贡献,根据 Apache-2.0 许可证定义,应按上述方式双许可,而无需任何附加条款或条件。

依赖项

~13–24MB
~370K SLoC