Radix Relay
Hybrid mesh communications with Signal Protocol encryption
Loading...
Searching...
No Matches
radix_relay::signal::bridge Class Reference

C++ wrapper for the Rust Signal Protocol implementation. More...

#include <signal_bridge.hpp>

Public Member Functions

 bridge (const std::filesystem::path &bridge_db)
 Constructs a Signal bridge with database path.
 
 bridge (rust::Box< SignalBridge > signal_bridge)
 Constructs a Signal bridge from existing Rust implementation.
 
 bridge (const bridge &)=delete
 
auto operator= (const bridge &) -> bridge &=delete
 
 bridge (bridge &&)=default
 
auto operator= (bridge &&) -> bridge &=default
 
 ~bridge ()=default
 
auto get_node_fingerprint () const -> std::string
 Returns this node's RDX fingerprint.
 
auto list_contacts () const -> std::vector< core::contact_info >
 Lists all known contacts.
 
auto encrypt_message (const std::string &rdx, const std::vector< uint8_t > &bytes) const -> std::vector< uint8_t >
 Encrypts a message for a peer.
 
auto decrypt_message (const std::string &rdx, const std::vector< uint8_t > &bytes) const -> decryption_result
 Decrypts an incoming message.
 
auto add_contact_and_establish_session_from_base64 (const std::string &bundle, const std::string &alias) const -> std::string
 Establishes a session from a prekey bundle.
 
auto extract_rdx_from_bundle_base64 (const std::string &bundle_base64) const -> std::string
 Extracts RDX fingerprint from a prekey bundle.
 
auto generate_prekey_bundle_announcement (const std::string &version) const -> bundle_info
 Generates a signed prekey bundle announcement.
 
auto generate_empty_bundle_announcement (const std::string &version) const -> std::string
 Generates an empty bundle announcement for unpublishing.
 
auto assign_contact_alias (const std::string &rdx, const std::string &alias) const -> void
 Assigns an alias to a contact.
 
auto create_and_sign_encrypted_message (const std::string &rdx, const std::string &content, uint32_t timestamp, const std::string &version) const -> std::string
 Creates and signs a Nostr encrypted message event.
 
auto lookup_contact (const std::string &alias) const -> core::contact_info
 Looks up a contact by RDX fingerprint or alias.
 
auto sign_nostr_event (const std::string &event_json) const -> std::string
 Signs a Nostr event with node's private key.
 
auto create_subscription_for_self (const std::string &subscription_id, std::uint64_t since_timestamp=0) const -> std::string
 Creates a Nostr subscription filter for messages to this node.
 
auto update_last_message_timestamp (std::uint64_t timestamp) const -> void
 Updates the timestamp of the last received message.
 
auto perform_key_maintenance () const -> key_maintenance_result
 Performs periodic key maintenance and rotation.
 
auto record_published_bundle (std::uint32_t pre_key_id, std::uint32_t signed_pre_key_id, std::uint32_t kyber_pre_key_id) const -> void
 Records published prekey bundle to track used keys.
 
auto get_conversations (bool include_archived) const -> std::vector< conversation >
 Retrieves all conversations ordered by most recent message.
 
auto get_conversation_messages (const std::string &rdx_fingerprint, std::uint32_t limit, std::uint32_t offset) const -> std::vector< stored_message >
 Retrieves messages from a conversation with pagination.
 
auto mark_conversation_read (const std::string &rdx_fingerprint) const -> void
 Marks all messages in a conversation as read.
 
auto delete_message (std::int64_t message_id) const -> void
 Deletes a specific message from history.
 
auto delete_conversation (const std::string &rdx_fingerprint) const -> void
 Deletes an entire conversation and all its messages.
 
auto get_unread_count (const std::string &rdx_fingerprint) const -> std::uint32_t
 Gets the number of unread messages in a conversation.
 

Detailed Description

C++ wrapper for the Rust Signal Protocol implementation.

Provides Signal Protocol operations including encryption/decryption, key management, session establishment, and Nostr integration.

Definition at line 20 of file signal_bridge.hpp.

Constructor & Destructor Documentation

◆ bridge() [1/4]

radix_relay::signal::bridge::bridge ( const std::filesystem::path &  bridge_db)
inlineexplicit

Constructs a Signal bridge with database path.

Parameters
bridge_dbPath to Signal Protocol database

Definition at line 28 of file signal_bridge.hpp.

◆ bridge() [2/4]

radix_relay::signal::bridge::bridge ( rust::Box< SignalBridge >  signal_bridge)
inlineexplicit

Constructs a Signal bridge from existing Rust implementation.

Parameters
signal_bridgeRust SignalBridge instance

Definition at line 37 of file signal_bridge.hpp.

◆ bridge() [3/4]

radix_relay::signal::bridge::bridge ( const bridge )
delete

◆ bridge() [4/4]

radix_relay::signal::bridge::bridge ( bridge &&  )
default

◆ ~bridge()

radix_relay::signal::bridge::~bridge ( )
default

Member Function Documentation

◆ add_contact_and_establish_session_from_base64()

auto radix_relay::signal::bridge::add_contact_and_establish_session_from_base64 ( const std::string &  bundle,
const std::string &  alias 
) const -> std::string

Establishes a session from a prekey bundle.

Parameters
bundleBase64-encoded prekey bundle
aliasOptional alias for the contact
Returns
RDX fingerprint of the peer

◆ assign_contact_alias()

auto radix_relay::signal::bridge::assign_contact_alias ( const std::string &  rdx,
const std::string &  alias 
) const -> void

Assigns an alias to a contact.

Parameters
rdxContact's RDX fingerprint
aliasUser-friendly alias

◆ create_and_sign_encrypted_message()

auto radix_relay::signal::bridge::create_and_sign_encrypted_message ( const std::string &  rdx,
const std::string &  content,
uint32_t  timestamp,
const std::string &  version 
) const -> std::string

Creates and signs a Nostr encrypted message event.

Parameters
rdxRecipient's RDX fingerprint or Nostr pubkey
contentHex-encoded encrypted content
timestampUnix timestamp
versionProtocol version string
Returns
Signed Nostr event JSON

◆ create_subscription_for_self()

auto radix_relay::signal::bridge::create_subscription_for_self ( const std::string &  subscription_id,
std::uint64_t  since_timestamp = 0 
) const -> std::string

Creates a Nostr subscription filter for messages to this node.

Parameters
subscription_idSubscription identifier
since_timestampOptional timestamp to filter messages since
Returns
REQ message JSON

◆ decrypt_message()

auto radix_relay::signal::bridge::decrypt_message ( const std::string &  rdx,
const std::vector< uint8_t > &  bytes 
) const -> decryption_result

Decrypts an incoming message.

Parameters
rdxSender's RDX fingerprint or Nostr pubkey (peer hint)
bytesEncrypted message bytes
Returns
Decryption result with plaintext and metadata

◆ delete_conversation()

auto radix_relay::signal::bridge::delete_conversation ( const std::string &  rdx_fingerprint) const -> void

Deletes an entire conversation and all its messages.

Parameters
rdx_fingerprintContact's RDX fingerprint

◆ delete_message()

auto radix_relay::signal::bridge::delete_message ( std::int64_t  message_id) const -> void

Deletes a specific message from history.

Parameters
message_idDatabase ID of the message to delete

◆ encrypt_message()

auto radix_relay::signal::bridge::encrypt_message ( const std::string &  rdx,
const std::vector< uint8_t > &  bytes 
) const -> std::vector< uint8_t >

Encrypts a message for a peer.

Parameters
rdxRecipient's RDX fingerprint or Nostr pubkey
bytesPlaintext message bytes
Returns
Encrypted message bytes

◆ extract_rdx_from_bundle_base64()

auto radix_relay::signal::bridge::extract_rdx_from_bundle_base64 ( const std::string &  bundle_base64) const -> std::string

Extracts RDX fingerprint from a prekey bundle.

Parameters
bundle_base64Base64-encoded prekey bundle
Returns
RDX fingerprint

◆ generate_empty_bundle_announcement()

auto radix_relay::signal::bridge::generate_empty_bundle_announcement ( const std::string &  version) const -> std::string

Generates an empty bundle announcement for unpublishing.

Parameters
versionProtocol version string
Returns
Signed empty bundle announcement JSON

◆ generate_prekey_bundle_announcement()

auto radix_relay::signal::bridge::generate_prekey_bundle_announcement ( const std::string &  version) const -> bundle_info

Generates a signed prekey bundle announcement.

Parameters
versionProtocol version string
Returns
Bundle information with announcement JSON and prekey IDs

◆ get_conversation_messages()

auto radix_relay::signal::bridge::get_conversation_messages ( const std::string &  rdx_fingerprint,
std::uint32_t  limit,
std::uint32_t  offset 
) const -> std::vector< stored_message >

Retrieves messages from a conversation with pagination.

Parameters
rdx_fingerprintContact's RDX fingerprint
limitMaximum number of messages to retrieve
offsetNumber of messages to skip (for pagination)
Returns
Vector of stored messages ordered newest first

◆ get_conversations()

auto radix_relay::signal::bridge::get_conversations ( bool  include_archived) const -> std::vector< conversation >

Retrieves all conversations ordered by most recent message.

Parameters
include_archivedWhether to include archived conversations
Returns
Vector of conversations with metadata

◆ get_node_fingerprint()

auto radix_relay::signal::bridge::get_node_fingerprint ( ) const -> std::string

Returns this node's RDX fingerprint.

Returns
Hex-encoded SHA-256 hash of node's identity public key

◆ get_unread_count()

auto radix_relay::signal::bridge::get_unread_count ( const std::string &  rdx_fingerprint) const -> std::uint32_t

Gets the number of unread messages in a conversation.

Parameters
rdx_fingerprintContact's RDX fingerprint
Returns
Number of unread messages

◆ list_contacts()

auto radix_relay::signal::bridge::list_contacts ( ) const -> std::vector< core::contact_info >

Lists all known contacts.

Returns
Vector of contact information structs

◆ lookup_contact()

auto radix_relay::signal::bridge::lookup_contact ( const std::string &  alias) const -> core::contact_info

Looks up a contact by RDX fingerprint or alias.

Parameters
aliasContact identifier (RDX fingerprint or user alias)
Returns
Contact information
Exceptions
std::runtime_errorif contact not found

◆ mark_conversation_read()

auto radix_relay::signal::bridge::mark_conversation_read ( const std::string &  rdx_fingerprint) const -> void

Marks all messages in a conversation as read.

Parameters
rdx_fingerprintContact's RDX fingerprint

◆ operator=() [1/2]

auto radix_relay::signal::bridge::operator= ( bridge &&  ) -> bridge &=default
default

◆ operator=() [2/2]

auto radix_relay::signal::bridge::operator= ( const bridge ) -> bridge &=delete
delete

◆ perform_key_maintenance()

auto radix_relay::signal::bridge::perform_key_maintenance ( ) const -> key_maintenance_result

Performs periodic key maintenance and rotation.

Returns
Result indicating which keys were rotated

◆ record_published_bundle()

auto radix_relay::signal::bridge::record_published_bundle ( std::uint32_t  pre_key_id,
std::uint32_t  signed_pre_key_id,
std::uint32_t  kyber_pre_key_id 
) const -> void

Records published prekey bundle to track used keys.

Parameters
pre_key_idOne-time prekey ID
signed_pre_key_idSigned prekey ID
kyber_pre_key_idKyber prekey ID

◆ sign_nostr_event()

auto radix_relay::signal::bridge::sign_nostr_event ( const std::string &  event_json) const -> std::string

Signs a Nostr event with node's private key.

Parameters
event_jsonUnsigned event JSON
Returns
Signed event JSON with id and sig fields

◆ update_last_message_timestamp()

auto radix_relay::signal::bridge::update_last_message_timestamp ( std::uint64_t  timestamp) const -> void

Updates the timestamp of the last received message.

Parameters
timestampUnix timestamp

The documentation for this class was generated from the following file: