Packages
Gleam wrapper for Signal Protocol cryptographic primitives
Current section
Files
Jump to
Current section
Files
src/utils.gleam
import pre_key_bundle
import signal_protocol.{
type IdentityKeyPair, type PreKey, type PreKeyBundle, type SignedPreKey,
}
/// Generates a complete set of keys for a new user.
pub fn generate_user_keys() -> Result(
#(IdentityKeyPair, PreKey, SignedPreKey),
String,
) {
case signal_protocol.generate_identity_key_pair() {
Ok(identity_key_pair) -> {
case signal_protocol.generate_pre_key(1) {
Ok(pre_key) -> {
case
signal_protocol.generate_signed_pre_key(
identity_key_pair.private_key,
1,
)
{
Ok(signed_pre_key) -> {
Ok(#(identity_key_pair, pre_key, signed_pre_key))
}
Error(e) -> Error("Failed to generate signed pre-key: " <> e)
}
}
Error(e) -> Error("Failed to generate pre-key: " <> e)
}
}
Error(e) -> Error("Failed to generate identity key pair: " <> e)
}
}
/// Creates a pre-key bundle from user keys.
pub fn create_user_bundle(
registration_id: Int,
identity_key: BitArray,
pre_key: PreKey,
signed_pre_key: SignedPreKey,
) -> Result(PreKeyBundle, String) {
pre_key_bundle.create(
registration_id,
identity_key,
pre_key,
signed_pre_key,
<<0>>,
// Base key will be generated during session creation
)
}