A work-in-progress towards a Signal client for xous.
The basic idea is to save all msg directly to the PDDB, and for the UI to traverse a subset of the msg's in the PDDB.
- develop xous tls library to manage the explicit trust of CA Certificates
- confirm tls connection Precursor <=> chat.signal..org [ xous shellchat
wlan on
net tls probe chat.signal.org
net tls test chat.signal.org
] - confirm websocket connection Precursor <=> chat.signal.org
- develop xous chat library to provide a UI to interact with a Dialogue of Posts stored in the PDDB
- resurvey Whisperfish, signal-cli & gurk for useful stuff (see useful below)
- link a Precursor to an existing Signal account
- sync messages with an individual recipient
- send a new message to an individual recipient
- register a Precursor as a Signal device
- enable Signal groups
- libsignal contains platform-agnostic APIs used by the official Signal clients and servers, written in Rust, and released under AGPL 3.0.
- The Whisperfish project is a helpful working example of a Signal client developed in Rust on the official Signal libsignal API. Unfortunately Whisperfish has a
tokio
dependency. See also libsignal-service-rs and Presage - There is also Signal-Desktop signal-cli and gurk
- A basic xous websocket with tls support is available to connect with Signal servers.
- xous supports qr-codes to facilitate device registration
- xous supports png image processing but the websocket would need to be extended to present as a
Reader
.
xous has only limited libc support
Running cargo tree -e no-build -e no-dev
over libsignal
and extracted the libc dependencies gives
device-transfer v0.1.0 (/libsignal/rust/device-transfer)
├── boring v2.1.0 (https://github.com/signalapp/boring?branch=libsignal#3809a7e1)
│ └── libc v0.2.144
└── libc v0.2.144
libsignal-protocol v0.1.0 (/libsignal/rust/protocol)
├── curve25519-dalek v3.2.1 (https://github.com/signalapp/curve25519-dalek?branch=lizard2#4f0aa665)
│ ├── rand_core v0.5.1
│ │ └── getrandom v0.1.16
│ │ └── libc v0.2.144
├── pqcrypto-kyber v0.7.6
│ ├── libc v0.2.144
│ ├── pqcrypto-internals v0.2.4
│ │ ├── getrandom v0.2.9
│ │ │ └── libc v0.2.144
│ │ └── libc v0.2.144
├── rand v0.7.3
│ ├── libc v0.2.144
- device transfer can probably be re-implemented without too much fuss
- curve25519-dalek ... getrandom
- pqcrypto-kyber appears to be used only in tests
- rand boils down to
use rand::{Rng, thread_rng, rngs::OsRng, prelude::*, distributions::Uniform, prelude::{Rng, ThreadRng}, RngCore, seq::SliceRandom}
Hopefully the getrandom
and rand
dependencies are covered by the xous libc rand implementation.