Radix Relay
Hybrid mesh communications with Signal Protocol encryption
Loading...
Searching...
No Matches
signal_bridge.hpp
Go to the documentation of this file.
1#pragma once
2
4#include <cstdint>
5#include <signal_types/signal_types.hpp>
6#include <string>
7#include <vector>
8
9namespace radix_relay::concepts {
10
17template<typename T>
18concept signal_bridge = requires(T bridge,
19 const std::string &rdx,
20 const std::string &alias,
21 const std::string &bundle,
22 const std::string &version,
23 const std::string &content,
24 const std::vector<uint8_t> &bytes,
25 const std::string &subscription_id,
26 uint32_t timestamp,
27 std::uint64_t since_timestamp,
28 std::uint32_t pre_key_id,
29 std::uint32_t signed_pre_key_id,
30 std::uint32_t kyber_pre_key_id) {
31 // Identity and session management
32 { bridge.get_node_fingerprint() } -> std::convertible_to<std::string>;
33 { bridge.list_contacts() } -> std::convertible_to<std::vector<radix_relay::core::contact_info>>;
34
35 // Message encryption/decryption
36 { bridge.encrypt_message(rdx, bytes) } -> std::convertible_to<std::vector<uint8_t>>;
37 { bridge.decrypt_message(rdx, bytes) } -> std::convertible_to<radix_relay::signal::decryption_result>;
38
39 // Session establishment
40 { bridge.add_contact_and_establish_session_from_base64(bundle, alias) } -> std::convertible_to<std::string>;
41
42 // Bundle generation
43 { bridge.generate_prekey_bundle_announcement(version) } -> std::convertible_to<radix_relay::signal::bundle_info>;
44 { bridge.generate_empty_bundle_announcement(version) } -> std::convertible_to<std::string>;
45 { bridge.extract_rdx_from_bundle_base64(bundle) } -> std::convertible_to<std::string>;
46
47 // Contact management
48 { bridge.assign_contact_alias(rdx, alias) } -> std::same_as<void>;
49 { bridge.lookup_contact(alias) } -> std::convertible_to<radix_relay::core::contact_info>;
50
51 // Nostr signing
52 { bridge.create_and_sign_encrypted_message(rdx, content, timestamp, version) } -> std::convertible_to<std::string>;
53 { bridge.sign_nostr_event(content) } -> std::convertible_to<std::string>;
54
55 // Nostr subscription
56 { bridge.create_subscription_for_self(subscription_id, since_timestamp) } -> std::convertible_to<std::string>;
57 { bridge.update_last_message_timestamp(since_timestamp) } -> std::same_as<void>;
58
59 // Key maintenance
60 { bridge.perform_key_maintenance() } -> std::convertible_to<radix_relay::signal::key_maintenance_result>;
61 { bridge.record_published_bundle(pre_key_id, signed_pre_key_id, kyber_pre_key_id) } -> std::same_as<void>;
62};
63
64}// namespace radix_relay::concepts
Concept defining the interface for Signal Protocol cryptographic operations.