BaileysEx.Signal.Curve (baileys_ex v0.1.0-alpha.9)

Copy Markdown View Source

Signal-specific Curve25519 helpers matching the Baileys Curve contract.

This module keeps the native surface narrow by delegating X25519 agreement to BaileysEx.Crypto and XEdDSA signing/verification to BaileysEx.Native.XEdDSA.

Summary

Functions

Generate a Curve25519 key pair for Signal session and pre-key usage.

Prefix a 32-byte public key with the Signal version byte.

Derive a shared X25519 secret from a private key and peer public key.

Sign a payload with a Curve25519 private key using XEdDSA.

Generate a signed pre-key payload matching Baileys signedKeyPair.

Verify a XEdDSA signature against either a raw or Signal-prefixed public key.

Types

key_error()

@type key_error() ::
  :invalid_private_key | :invalid_public_key | :invalid_identity_key

key_pair()

@type key_pair() :: BaileysEx.Crypto.key_pair()

signed_key_pair()

@type signed_key_pair() :: %{
  key_pair: key_pair(),
  signature: binary(),
  key_id: non_neg_integer()
}

Functions

generate_key_pair(opts \\ [])

@spec generate_key_pair(keyword()) :: key_pair()

Generate a Curve25519 key pair for Signal session and pre-key usage.

generate_signal_pub_key(arg1)

@spec generate_signal_pub_key(binary()) ::
  {:ok, binary()} | {:error, :invalid_public_key}

Prefix a 32-byte public key with the Signal version byte.

Already-prefixed keys are returned unchanged.

shared_key(private_key, public_key)

@spec shared_key(binary(), binary()) :: {:ok, binary()} | {:error, key_error()}

Derive a shared X25519 secret from a private key and peer public key.

Accepts either raw 32-byte public keys or the 33-byte Signal-prefixed form.

sign(private_key, message)

@spec sign(binary(), binary()) :: {:ok, binary()} | {:error, :invalid_private_key}

Sign a payload with a Curve25519 private key using XEdDSA.

signed_key_pair(identity_key_pair, key_id, opts \\ [])

@spec signed_key_pair(map(), non_neg_integer(), keyword()) ::
  {:ok, signed_key_pair()} | {:error, key_error()}

Generate a signed pre-key payload matching Baileys signedKeyPair.

verify(public_key, message, signature)

@spec verify(binary(), binary(), binary()) :: boolean()

Verify a XEdDSA signature against either a raw or Signal-prefixed public key.