libsignal-protocol-gleam
Gleam wrapper for Signal Protocol NIF with FFI integration to Elixir.
Installation
[dependencies]
libsignal_protocol_gleam = "~> 0.1.0"Usage
import signal_protocol
pub fn main() {
// Generate keys
case signal_protocol.generate_identity_key_pair() {
Ok(identity_pair) -> {
// Create session
case signal_protocol.create_session(identity_pair.public_key, remote_key) {
Ok(session) -> {
// Encrypt/decrypt
case signal_protocol.encrypt_message(session, "Hello") {
Ok(encrypted) -> {
signal_protocol.decrypt_message(session, encrypted)
}
Error(e) -> Error(e)
}
}
Error(e) -> Error(e)
}
}
Error(e) -> Error(e)
}
}API
signal_protocol
generate_identity_key_pair()→Result(IdentityKeyPair, String)generate_pre_key(id: Int)→Result(PreKey, String)generate_signed_pre_key(identity_key: String, id: Int)→Result(SignedPreKey, String)create_session(local: String, remote: String)→Result(Session, String)encrypt_message(session: Session, message: String)→Result(String, String)decrypt_message(session: Session, ciphertext: String)→Result(String, String)
signal_protocol/session
create(local: String, remote: String)→Result(Session, String)send_message(session: Session, message: String)→Result(String, String)receive_message(session: Session, ciphertext: String)→Result(String, String)
signal_protocol/pre_key_bundle
create(reg_id: Int, identity: String, pre_key: PreKey, signed_pre_key: SignedPreKey, base_key: String)→Result(PreKeyBundle, String)parse(bundle: String)→Result(PreKeyBundle, String)verify_signature(bundle: PreKeyBundle)→Result(Nil, String)
signal_protocol/utils
generate_user_keys()→Result(#(IdentityKeyPair, PreKey, SignedPreKey), String)establish_session(...)→Result(#(Session, Session), String)exchange_messages(local: Session, remote: Session, message: String)→Result(#(String, Session, Session), String)
Build
cd wrappers/gleam
gleam buildTest
cd wrappers/gleam
gleam testRequirements
- Gleam 0.37+
- Erlang/OTP 25+
- Elixir SignalProtocol implementation
License
MIT