{"id":19635144,"url":"https://github.com/saltyrtc/saltyrtc-client-rs","last_synced_at":"2025-04-28T07:32:01.573Z","repository":{"id":27642961,"uuid":"105045053","full_name":"saltyrtc/saltyrtc-client-rs","owner":"saltyrtc","description":"SaltyRTC Rust implementation.","archived":false,"fork":false,"pushed_at":"2023-09-13T16:42:08.000Z","size":669,"stargazers_count":34,"open_issues_count":13,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-21T05:20:38.444Z","etag":null,"topics":["client","rust","saltyrtc","signaling"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/saltyrtc.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-09-27T16:56:26.000Z","updated_at":"2024-06-02T14:22:43.000Z","dependencies_parsed_at":"2024-11-11T12:24:25.377Z","dependency_job_id":"48755ee9-aa1a-43dd-a104-3bb729a2653e","html_url":"https://github.com/saltyrtc/saltyrtc-client-rs","commit_stats":{"total_commits":438,"total_committers":3,"mean_commits":146.0,"dds":0.3264840182648402,"last_synced_commit":"e8689830dba1b0346c87f3dd31d2dbbe62a9c159"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saltyrtc%2Fsaltyrtc-client-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saltyrtc%2Fsaltyrtc-client-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saltyrtc%2Fsaltyrtc-client-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saltyrtc%2Fsaltyrtc-client-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/saltyrtc","download_url":"https://codeload.github.com/saltyrtc/saltyrtc-client-rs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251271317,"owners_count":21562524,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client","rust","saltyrtc","signaling"],"created_at":"2024-11-11T12:24:00.819Z","updated_at":"2025-04-28T07:32:00.906Z","avatar_url":"https://github.com/saltyrtc.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# saltyrtc-client-rs\n\n[![CircleCI][circle-ci-badge]][circle-ci]\n[![Join our chat on Gitter](https://badges.gitter.im/saltyrtc/Lobby.svg)](https://gitter.im/saltyrtc/Lobby)\n\nAsynchronous [SaltyRTC][saltyrtc] client implementation for Rust.\n\n\u003e :warning: **Note:** The SaltyRTC client libraries are in maintenance mode.\n\u003e They will still receive bugfixes and regular maintenance, but if you want to\n\u003e start using these libraries, be prepared that you will need to take over\n\u003e maintenance at some point in time. (If you are interested in maintaining the\n\u003e libraries, please let us know, our e-mails are in the README, section\n\u003e \"Security\".)\n\nSaltyRTC is an end-to-end encrypted signalling protocol. It offers to freely\nchoose from a range of signalling tasks, such as setting up a WebRTC or ORTC\npeer-to-peer connection, or using the WebSocket based signaling server as a\nrelay. SaltyRTC is completely open to new and custom signalling tasks for\neverything feasible.\n\n[Docs](https://docs.rs/saltyrtc-client)\n\n\n## Testing\n\n### Setup\n\nThe integration tests currently expect a [SaltyRTC Server][server] instance to\nrun on `localhost:8765`.\n\nFirst, create a test certificate for localhost.\n\n    openssl req \\\n       -newkey rsa:1024 \\\n       -x509 \\\n       -nodes \\\n       -keyout saltyrtc.key \\\n       -new \\\n       -out saltyrtc.crt \\\n       -subj /CN=localhost \\\n       -reqexts SAN \\\n       -extensions SAN \\\n       -config \u003c(cat /etc/ssl/openssl.cnf \\\n         \u003c(printf '[SAN]\\nsubjectAltName=DNS:localhost')) \\\n       -sha256 \\\n       -days 1825\n\nCreate a Python virtualenv with dependencies:\n\n    python3 -m virtualenv venv\n    venv/bin/pip install saltyrtc.server[logging]\n\nFinally, start the server with the following test permanent key:\n\n    export SALTYRTC_SERVER_PERMANENT_KEY=0919b266ce1855419e4066fc076b39855e728768e3afa773105edd2e37037c20 # Public: 09a59a5fa6b45cb07638a3a6e347ce563a948b756fd22f9527465f7c79c2a864\n    venv/bin/saltyrtc-server -v 5 serve -p 8765 \\\n        -sc saltyrtc.crt -sk saltyrtc.key \\\n        -k $SALTYRTC_SERVER_PERMANENT_KEY\n\nBefore you run the client tests, symlink the `saltyrtc.crt` file into your\n`saltyrtc-client-rs` directory.\n\n### Unit Tests\n\nTo run the testsuite:\n\n    cargo test\n\n### Fuzz Testing\n\nTo run fuzz tests, first install cargo-fuzz:\n\n    cargo install cargo-fuzz\n\nThen run the fuzzer against a target:\n\n    cargo +nightly fuzz run \u003ctarget\u003e\n\nYou can list all targets with `cargo fuzz list`.\n\n\n## Example Client\n\nThere is an example chat client at `examples/chat/main.rs`. You can invoke it\nboth as initiator or responder. Note that you need to have libncurses installed\non your system for the chat example to work.\n\nIf you start the chat as initiator, the signaling path and auth token will be\nrandomly generated and printed:\n\n    $ cargo run --example chat -- initiator\n    INFO:saltyrtc_client::crypto: Generating new key pair\n    INFO:saltyrtc_client::crypto: Generating new auth token\n\n    ******************************\n    Connecting as Initiator\n\n    Signaling path: f637d7fff53defe8db111b17b2c445f7888a83c13dc40d7ff8449f700910f01f\n    Auth token: 0e94b54a49e4ec7f4398ec9bec5d4359cca810f7eca31704e6c0afadd54a7818\n\n    To connect with a peer:\n    cargo run --example chat -- responder \\\n        --path f637d7fff53defe8db111b17b2c445f7888a83c13dc40d7ff8449f700910f01f \\\n        --auth-token 0e94b54a49e4ec7f4398ec9bec5d4359cca810f7eca31704e6c0afadd54a7818\n    ******************************\n\n    INFO:saltyrtc_client: Connected to server as Initiator\n    ...\n\nSimply copy that command in the second half of the output to another terminal\nto connect to the initiator with a responder.\n\nTo see all options, use `cargo run --example chat -- initiator --help` and\n`cargo run --example chat -- responder --help`.\n\nThe chat example will log to a file called `chat.\u003crole\u003e.log`.\n\n**Note:** The tests currently expect a [SaltyRTC Server][server] instance to\nrun on `localhost:8765`.\n\n\n## Msgpack Debugging\n\nIf you enable the `msgpack-debugging` compile flag, you'll get direct msgpack\nanalysis URLs for all decoded messages in your `TRACE` level logs.\n\n    cargo build --features 'msgpack-debugging'\n\nYou can customize that URL prefix at compile time using the `MSGPACK_DEBUG_URL`\nenv var. This is the default URL:\n\n    MSGPACK_DEBUG_URL='https://msgpack.dbrgn.ch/#base64='\n\n\n## Release Signatures\n\nRelease commits and tags are signed with the\n[Threema signing key](https://keybase.io/threema)\n(`E7ADD9914E260E8B35DFB50665FDE935573ACDA6`).\n\n\n## FFI\n\nYou can find C FFI bindings in the `ffi` subdirectory of this source repository.\n\n**Note:** The FFI bindings are currently incomplete and blocked by\n[rust-lang/rust#36342](https://github.com/rust-lang/rust/issues/36342).\n\n\n## Dependency Patching\n\nThe following patches in `Cargo.toml` are recommended to solve problems in\ntransitive dependencies:\n\n```toml\n[patch.crates-io]\ntraitobject = { git = \"https://github.com/philip-peterson/destructure_traitobject\", rev = \"d49b0af9087b3b7848d19d5baae43948ebc7fb9d\" }\n```\n\n\n## License\n\nLicensed under either of\n\n * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or\n   http://www.apache.org/licenses/LICENSE-2.0)\n * MIT license ([LICENSE-MIT](LICENSE-MIT) or\n   http://opensource.org/licenses/MIT) at your option.\n\n\n### Contributing\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall\nbe dual licensed as above, without any additional terms or conditions.\n\n\n\u003c!-- Links --\u003e\n[saltyrtc]: https://saltyrtc.org/\n[server]: https://github.com/saltyrtc/saltyrtc-server-python/\n\n\u003c!-- Badges --\u003e\n[circle-ci]: https://circleci.com/gh/saltyrtc/saltyrtc-client-rs/tree/master\n[circle-ci-badge]: https://circleci.com/gh/saltyrtc/saltyrtc-client-rs/tree/master.svg?style=shield\n[github]: https://github.com/saltyrtc/saltyrtc-client-rs\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaltyrtc%2Fsaltyrtc-client-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaltyrtc%2Fsaltyrtc-client-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaltyrtc%2Fsaltyrtc-client-rs/lists"}