cgosling
Macros | Typedefs | Enumerations | Functions
cgosling.h File Reference
#include <stdarg.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <assert.h>
Include dependency graph for cgosling.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define GOSLING_HAVE_LEGACY_TOR_PROVIDER   1
 
#define GOSLING_HAVE_MOCK_TOR_PROVIDER   1
 
#define TARGET_ADDRESS_STRING_SIZE   260
 
#define V3_ONION_SERVICE_ID_STRING_LENGTH   56
 
#define V3_ONION_SERVICE_ID_STRING_SIZE   57
 
#define ED25519_PRIVATE_KEYBLOB_BASE64_LENGTH   88
 
#define ED25519_PRIVATE_KEY_KEYBLOB_HEADER_LENGTH   11
 
#define ED25519_PRIVATE_KEY_KEYBLOB_LENGTH   99
 
#define ED25519_PRIVATE_KEY_KEYBLOB_SIZE   100
 
#define X25519_PRIVATE_KEY_BASE64_LENGTH   44
 
#define X25519_PRIVATE_KEY_BASE64_SIZE   45
 
#define X25519_PUBLIC_KEY_BASE32_LENGTH   52
 
#define X25519_PUBLIC_KEY_BASE32_SIZE   53
 

Typedefs

typedef struct gosling_bridge_line gosling_bridge_line
 
typedef struct gosling_context gosling_context
 
typedef struct gosling_ed25519_private_key gosling_ed25519_private_key
 
typedef struct gosling_error gosling_error
 
typedef struct gosling_ip_address gosling_ip_address
 
typedef struct gosling_library gosling_library
 
typedef struct gosling_pluggable_transport_config gosling_pluggable_transport_config
 
typedef struct gosling_proxy_config gosling_proxy_config
 
typedef struct gosling_target_address gosling_target_address
 
typedef struct gosling_tor_provider gosling_tor_provider
 
typedef struct gosling_tor_provider_config gosling_tor_provider_config
 
typedef struct gosling_v3_onion_service_id gosling_v3_onion_service_id
 
typedef struct gosling_x25519_private_key gosling_x25519_private_key
 
typedef struct gosling_x25519_public_key gosling_x25519_public_key
 
typedef size_t gosling_handshake_handle_t
 
typedef int gosling_tcp_socket_t
 
typedef size_t gosling_circuit_token_t
 
typedef void(* gosling_tor_bootstrap_status_received_callback_t) (gosling_context *context, uint32_t progress, const char *tag, size_t tag_length, const char *summary, size_t summary_length)
 
typedef void(* gosling_tor_bootstrap_completed_callback_t) (gosling_context *context)
 
typedef void(* gosling_tor_log_received_callback_t) (gosling_context *context, const char *line, size_t line_length)
 
typedef size_t(* gosling_identity_client_handshake_challenge_response_size_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const uint8_t *challenge_buffer, size_t challenge_buffer_size)
 
typedef void(* gosling_identity_client_handshake_build_challenge_response_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const uint8_t *challenge_buffer, size_t challenge_buffer_size, uint8_t *out_challenge_response_buffer, size_t out_challenge_response_buffer_size)
 
typedef void(* gosling_identity_client_handshake_completed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_v3_onion_service_id *identity_service_id, const gosling_v3_onion_service_id *endpoint_service_id, const char *endpoint_name, size_t endpoint_name_length, const gosling_x25519_private_key *client_auth_private_key)
 
typedef void(* gosling_identity_client_handshake_failed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_error *error)
 
typedef void(* gosling_identity_server_published_callback_t) (gosling_context *context)
 
typedef void(* gosling_identity_server_handshake_started_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle)
 
typedef bool(* gosling_identity_server_handshake_client_allowed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_v3_onion_service_id *client_service_id)
 
typedef bool(* gosling_identity_server_endpoint_supported_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const char *endpoint_name, size_t endpoint_name_length)
 
typedef size_t(* gosling_identity_server_handshake_challenge_size_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle)
 
typedef void(* gosling_identity_server_handshake_build_challenge_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, uint8_t *out_challenge_buffer, size_t out_challenge_buffer_size)
 
typedef bool(* gosling_identity_server_handshake_verify_challenge_response_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const uint8_t *challenge_response_buffer, size_t challenge_response_buffer_size)
 
typedef void(* gosling_identity_server_handshake_completed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_ed25519_private_key *endpoint_private_key, const char *endpoint_name, size_t endpoint_name_length, const gosling_v3_onion_service_id *client_service_id, const gosling_x25519_public_key *client_auth_public_key)
 
typedef void(* gosling_identity_server_handshake_rejected_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, bool client_allowed, bool client_requested_endpoint_valid, bool client_proof_signature_valid, bool client_auth_signature_valid, bool challenge_response_valid)
 
typedef void(* gosling_identity_server_handshake_failed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_error *error)
 
typedef void(* gosling_endpoint_client_handshake_completed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_v3_onion_service_id *endpoint_service_id, const char *channel_name, size_t channel_name_length, gosling_tcp_socket_t stream)
 
typedef void(* gosling_endpoint_client_handshake_failed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_error *error)
 
typedef void(* gosling_endpoint_server_published_callback_t) (gosling_context *context, const gosling_v3_onion_service_id *endpoint_service_id, const char *endpoint_name, size_t endpoint_name_length)
 
typedef void(* gosling_endpoint_server_handshake_started_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle)
 
typedef bool(* gosling_endpoint_server_channel_supported_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_v3_onion_service_id *client_service_id, const char *channel_name, size_t channel_name_length)
 
typedef void(* gosling_endpoint_server_handshake_completed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_v3_onion_service_id *endpoint_service_id, const gosling_v3_onion_service_id *client_service_id, const char *channel_name, size_t channel_name_length, gosling_tcp_socket_t stream)
 
typedef void(* gosling_endpoint_server_handshake_rejected_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, bool client_allowed, bool client_requested_channel_valid, bool client_proof_signature_valid)
 
typedef void(* gosling_endpoint_server_handshake_failed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_error *error)
 

Enumerations

enum  {
  target_address_string_size = 260 , v3_onion_service_id_string_length = 56 , v3_onion_service_id_string_size = 57 , ed25519_private_keyblob_base64_length = 88 ,
  ed25519_private_key_keyblob_header_length = 11 , ed25519_private_key_keyblob_length = 99 , ed25519_private_key_keyblob_size = 100 , x25519_private_key_base64_length = 44 ,
  x25519_private_key_base64_size = 45 , x25519_public_key_base32_length = 52 , x25519_public_key_base32_size = 53
}
 

Functions

void gosling_context_set_tor_bootstrap_status_received_callback (gosling_context *context, gosling_tor_bootstrap_status_received_callback_t callback, gosling_error **error)
 
void gosling_context_set_tor_bootstrap_completed_callback (gosling_context *context, gosling_tor_bootstrap_completed_callback_t callback, gosling_error **error)
 
void gosling_context_set_tor_log_received_callback (gosling_context *context, gosling_tor_log_received_callback_t callback, gosling_error **error)
 
void gosling_context_set_identity_client_challenge_response_size_callback (gosling_context *context, gosling_identity_client_handshake_challenge_response_size_callback_t callback, gosling_error **error)
 
void gosling_context_set_identity_client_build_challenge_response_callback (gosling_context *context, gosling_identity_client_handshake_build_challenge_response_callback_t callback, gosling_error **error)
 
void gosling_context_set_identity_client_handshake_completed_callback (gosling_context *context, gosling_identity_client_handshake_completed_callback_t callback, gosling_error **error)
 
void gosling_context_set_identity_client_handshake_failed_callback (gosling_context *context, gosling_identity_client_handshake_failed_callback_t callback, gosling_error **error)
 
void gosling_context_set_identity_server_published_callback (gosling_context *context, gosling_identity_server_published_callback_t callback, gosling_error **error)
 
void gosling_context_set_identity_server_handshake_started_callback (gosling_context *context, gosling_identity_server_handshake_started_callback_t callback, gosling_error **error)
 
void gosling_context_set_identity_server_client_allowed_callback (gosling_context *context, gosling_identity_server_handshake_client_allowed_callback_t callback, gosling_error **error)
 
void gosling_context_set_identity_server_endpoint_supported_callback (gosling_context *context, gosling_identity_server_endpoint_supported_callback_t callback, gosling_error **error)
 
void gosling_context_set_identity_server_challenge_size_callback (gosling_context *context, gosling_identity_server_handshake_challenge_size_callback_t callback, gosling_error **error)
 
void gosling_context_set_identity_server_build_challenge_callback (gosling_context *context, gosling_identity_server_handshake_build_challenge_callback_t callback, gosling_error **error)
 
void gosling_context_set_identity_server_verify_challenge_response_callback (gosling_context *context, gosling_identity_server_handshake_verify_challenge_response_callback_t callback, gosling_error **error)
 
void gosling_context_set_identity_server_handshake_completed_callback (gosling_context *context, gosling_identity_server_handshake_completed_callback_t callback, gosling_error **error)
 
void gosling_context_set_identity_server_handshake_rejected_callback (gosling_context *context, gosling_identity_server_handshake_rejected_callback_t callback, gosling_error **error)
 
void gosling_context_set_identity_server_handshake_failed_callback (gosling_context *context, gosling_identity_server_handshake_failed_callback_t callback, gosling_error **error)
 
void gosling_context_set_endpoint_client_handshake_completed_callback (gosling_context *context, gosling_endpoint_client_handshake_completed_callback_t callback, gosling_error **error)
 
void gosling_context_set_endpoint_client_handshake_failed_callback (gosling_context *context, gosling_endpoint_client_handshake_failed_callback_t callback, gosling_error **error)
 
void gosling_context_set_endpoint_server_published_callback (gosling_context *context, gosling_endpoint_server_published_callback_t callback, gosling_error **error)
 
void gosling_context_set_endpoint_server_handshake_started_callback (gosling_context *context, gosling_endpoint_server_handshake_started_callback_t callback, gosling_error **error)
 
void gosling_context_set_endpoint_server_channel_supported_callback (gosling_context *context, gosling_endpoint_server_channel_supported_callback_t callback, gosling_error **error)
 
void gosling_context_set_endpoint_server_handshake_completed_callback (gosling_context *context, gosling_endpoint_server_handshake_completed_callback_t callback, gosling_error **error)
 
void gosling_context_set_endpoint_server_handshake_rejected_callback (gosling_context *context, gosling_endpoint_server_handshake_rejected_callback_t callback, gosling_error **error)
 
void gosling_context_set_endpoint_server_handshake_failed_callback (gosling_context *context, gosling_endpoint_server_handshake_failed_callback_t callback, gosling_error **error)
 
void gosling_context_free (gosling_context *in_context)
 
void gosling_context_init (gosling_context **out_context, gosling_tor_provider *in_tor_provider, uint16_t identity_port, uint16_t endpoint_port, const gosling_ed25519_private_key *identity_private_key, gosling_error **error)
 
void gosling_context_bootstrap_tor (gosling_context *context, gosling_error **error)
 
void gosling_context_start_identity_server (gosling_context *context, gosling_error **error)
 
void gosling_context_stop_identity_server (gosling_context *context, gosling_error **error)
 
void gosling_context_start_endpoint_server (gosling_context *context, const gosling_ed25519_private_key *endpoint_private_key, const char *endpoint_name, size_t endpoint_name_length, const gosling_v3_onion_service_id *client_identity, const gosling_x25519_public_key *client_auth_public_key, gosling_error **error)
 
void gosling_context_stop_endpoint_server (gosling_context *context, const gosling_ed25519_private_key *endpoint_private_key, gosling_error **error)
 
gosling_handshake_handle_t gosling_context_begin_identity_handshake (gosling_context *context, const gosling_v3_onion_service_id *identity_service_id, const char *endpoint_name, size_t endpoint_name_length, gosling_error **error)
 
void gosling_context_abort_identity_client_handshake (gosling_context *context, gosling_handshake_handle_t handshake_handle, gosling_error **error)
 
gosling_handshake_handle_t gosling_context_begin_endpoint_handshake (gosling_context *context, const gosling_v3_onion_service_id *endpoint_service_id, const gosling_x25519_private_key *client_auth_private_key, const char *channel_name, size_t channel_name_length, gosling_error **error)
 
void gosling_context_abort_endpoint_client_handshake (gosling_context *context, gosling_handshake_handle_t handshake_handle, gosling_error **error)
 
void gosling_context_poll_events (gosling_context *context, gosling_error **error)
 
void gosling_ed25519_private_key_free (gosling_ed25519_private_key *in_private_key)
 
void gosling_x25519_private_key_free (gosling_x25519_private_key *in_private_key)
 
void gosling_x25519_public_key_free (gosling_x25519_public_key *in_public_key)
 
void gosling_v3_onion_service_id_free (gosling_v3_onion_service_id *in_service_id)
 
void gosling_ed25519_private_key_clone (gosling_ed25519_private_key **out_private_key, const gosling_ed25519_private_key *private_key, gosling_error **error)
 
void gosling_x25519_public_key_clone (gosling_x25519_public_key **out_public_key, const gosling_x25519_public_key *public_key, gosling_error **error)
 
void gosling_x25519_private_key_clone (gosling_x25519_private_key **out_private_key, const gosling_x25519_private_key *private_key, gosling_error **error)
 
void gosling_v3_onion_service_id_clone (gosling_v3_onion_service_id **out_service_id, const gosling_v3_onion_service_id *service_id, gosling_error **error)
 
void gosling_ed25519_private_key_generate (gosling_ed25519_private_key **out_private_key, gosling_error **error)
 
void gosling_ed25519_private_key_from_keyblob (gosling_ed25519_private_key **out_private_key, const char *key_blob, size_t key_blob_length, gosling_error **error)
 
void gosling_ed25519_private_key_to_keyblob (const gosling_ed25519_private_key *private_key, char *out_key_blob, size_t key_blob_size, gosling_error **error)
 
void gosling_x25519_private_key_from_base64 (gosling_x25519_private_key **out_private_key, const char *base64, size_t base64_length, gosling_error **error)
 
void gosling_x25519_private_key_to_base64 (const gosling_x25519_private_key *private_key, char *out_base64, size_t base64_size, gosling_error **error)
 
void gosling_x25519_public_key_from_base32 (gosling_x25519_public_key **out_public_key, const char *base32, size_t base32_length, gosling_error **error)
 
void gosling_x25519_public_key_to_base32 (const gosling_x25519_public_key *public_key, char *out_base32, size_t base32_size, gosling_error **error)
 
void gosling_v3_onion_service_id_from_string (gosling_v3_onion_service_id **out_service_id, const char *service_id_string, size_t service_id_string_length, gosling_error **error)
 
void gosling_v3_onion_service_id_from_ed25519_private_key (gosling_v3_onion_service_id **out_service_id, const gosling_ed25519_private_key *ed25519_private_key, gosling_error **error)
 
void gosling_v3_onion_service_id_to_string (const gosling_v3_onion_service_id *service_id, char *out_service_id_string, size_t service_id_string_size, gosling_error **error)
 
bool gosling_string_is_valid_v3_onion_service_id (const char *service_id_string, size_t service_id_string_length, gosling_error **error)
 
const char * gosling_error_get_message (const gosling_error *error)
 
void gosling_error_clone (gosling_error **out_error, const gosling_error *orig_error, gosling_error **error)
 
void gosling_error_free (gosling_error *error)
 
void gosling_library_init (gosling_library **out_library, gosling_error **error)
 
void gosling_library_free (gosling_library *in_library)
 
void gosling_proxy_config_free (gosling_proxy_config *in_proxy_config)
 
void gosling_pluggable_transport_config_free (gosling_pluggable_transport_config *in_pluggable_transport_config)
 
void gosling_bridge_line_free (gosling_bridge_line *in_bridge_line)
 
void gosling_tor_provider_config_free (gosling_tor_provider_config *in_tor_provider_config)
 
void gosling_tor_provider_free (gosling_tor_provider *in_tor_provider)
 
void gosling_proxy_config_new_socks4 (gosling_proxy_config **out_proxy_config, const gosling_target_address *proxy_address, gosling_error **error)
 
void gosling_proxy_config_new_socks5 (gosling_proxy_config **out_proxy_config, const gosling_target_address *proxy_address, const char *username, size_t username_length, const char *password, size_t password_length, gosling_error **error)
 
void gosling_proxy_config_new_https (gosling_proxy_config **out_proxy_config, const gosling_target_address *proxy_address, const char *username, size_t username_length, const char *password, size_t password_length, gosling_error **error)
 
void gosling_pluggable_transport_config_new (gosling_pluggable_transport_config **out_pluggable_transport_config, const char *transports, size_t transports_length, const char *path_to_binary, size_t path_to_binary_length, gosling_error **error)
 
void gosling_pluggable_transport_config_add_cmdline_option (gosling_pluggable_transport_config *pluggable_transport_config, const char *option, size_t option_length, gosling_error **error)
 
void gosling_bridge_line_from_string (gosling_bridge_line **out_bridge_line, const char *bridge_line, size_t bridge_line_length, gosling_error **error)
 
void gosling_tor_provider_config_new_mock_client_config (gosling_tor_provider_config **out_tor_provider_config, gosling_error **error)
 
void gosling_tor_provider_config_new_bundled_legacy_client_config (gosling_tor_provider_config **out_tor_provider_config, const char *tor_bin_path, size_t tor_bin_path_length, const char *tor_working_directory, size_t tor_working_directory_length, gosling_error **error)
 
void gosling_tor_provider_config_new_system_legacy_client_config (gosling_tor_provider_config **out_tor_provider_config, const gosling_ip_address *tor_socks_host, uint16_t tor_socks_port, const gosling_ip_address *tor_control_host, uint16_t tor_control_port, const char *tor_control_passwd, size_t tor_control_passwd_length, gosling_error **error)
 
void gosling_tor_provider_config_set_proxy_config (gosling_tor_provider_config *tor_provider_config, const gosling_proxy_config *proxy_config, gosling_error **error)
 
void gosling_tor_provider_config_set_allowed_ports (gosling_tor_provider_config *tor_provider_config, const uint16_t *allowed_ports, size_t allowed_ports_count, gosling_error **error)
 
void gosling_tor_provider_config_add_pluggable_transport_config (gosling_tor_provider_config *tor_provider_config, const gosling_pluggable_transport_config *pluggable_transport_config, gosling_error **error)
 
void gosling_tor_provider_config_add_bridge_line (gosling_tor_provider_config *tor_provider_config, const gosling_bridge_line *bridge_line, gosling_error **error)
 
void gosling_tor_provider_from_tor_provider_config (gosling_tor_provider **out_tor_provider, const gosling_tor_provider_config *tor_provider_config, gosling_error **error)
 
void gosling_ip_address_free (gosling_ip_address *in_ip_address)
 
void gosling_target_address_free (gosling_target_address *in_target_address)
 
void gosling_ip_address_clone (gosling_ip_address **out_ip_address, const gosling_ip_address *ip_address, gosling_error **error)
 
void gosling_target_address_clone (gosling_target_address **out_target_address, const gosling_target_address *target_address, gosling_error **error)
 
void gosling_context_connect (gosling_context *context, gosling_tcp_socket_t *out_tcp_socket, const gosling_target_address *target_address, gosling_circuit_token_t circuit_token, gosling_error **error)
 
void gosling_ip_address_from_ipv4 (gosling_ip_address **out_ip_address, uint8_t a, uint8_t b, uint8_t c, uint8_t d, gosling_error **error)
 
void gosling_ip_address_from_ipv6 (gosling_ip_address **out_ip_address, uint16_t a, uint16_t b, uint16_t c, uint16_t d, uint16_t e, uint16_t f, uint16_t g, uint16_t h, gosling_error **error)
 
void gosling_target_address_from_ip_address (gosling_target_address **out_target_address, const gosling_ip_address *ip_address, uint16_t port, gosling_error **error)
 
void gosling_target_address_from_domain (gosling_target_address **out_target_address, const char *domain, size_t domain_length, uint16_t port, gosling_error **error)
 
void gosling_target_address_from_v3_onion_service_id (gosling_target_address **out_target_address, const gosling_v3_onion_service_id *service_id, uint16_t port, gosling_error **error)
 
void gosling_target_address_from_string (gosling_target_address **out_target_address, const char *target_address, size_t target_address_length, gosling_error **error)
 
void gosling_target_address_to_string (const gosling_target_address *target_address, char *out_target_address_string, size_t target_address_string_size, gosling_error **error)
 
gosling_circuit_token_t gosling_context_generate_circuit_token (gosling_context *context, gosling_error **error)
 
void gosling_context_release_circuit_token (gosling_context *context, gosling_circuit_token_t circuit_token, gosling_error **error)
 

Macro Definition Documentation

◆ ED25519_PRIVATE_KEY_KEYBLOB_HEADER_LENGTH

#define ED25519_PRIVATE_KEY_KEYBLOB_HEADER_LENGTH   11

The number of bytes needed to store the keyblob header

◆ ED25519_PRIVATE_KEY_KEYBLOB_LENGTH

#define ED25519_PRIVATE_KEY_KEYBLOB_LENGTH   99

The number of bytes needed to store ed25519 private keyblob as an ASCII c-string (not including a null terminator)

◆ ED25519_PRIVATE_KEY_KEYBLOB_SIZE

#define ED25519_PRIVATE_KEY_KEYBLOB_SIZE   100

The number of bytes needed to store ed25519 private keyblob as an ASCII c-string (including a null terminator)

◆ ED25519_PRIVATE_KEYBLOB_BASE64_LENGTH

#define ED25519_PRIVATE_KEYBLOB_BASE64_LENGTH   88

The number of bytes needed to store base64 encoded ed25519 private key as an ASCII c-string (not including null-terminator)

◆ GOSLING_HAVE_LEGACY_TOR_PROVIDER

#define GOSLING_HAVE_LEGACY_TOR_PROVIDER   1

Defined if cgosling is built with arti-client tor-provider support Defined if cgosling is built with legacy tor-provider support

◆ GOSLING_HAVE_MOCK_TOR_PROVIDER

#define GOSLING_HAVE_MOCK_TOR_PROVIDER   1

Defined if cgosling is built with mock tor-provider support

◆ TARGET_ADDRESS_STRING_SIZE

#define TARGET_ADDRESS_STRING_SIZE   260

The maximum number of bytes needed to store a target address in the format domainname:port (including null-terminator) Maximum length of a human-readbale domain name is 253 bytes (per RFC 1035) see: https://stackoverflow.com/a/32294443 Maximum length of the :port section is 6 bytes null-terminator is 1 byte

◆ V3_ONION_SERVICE_ID_STRING_LENGTH

#define V3_ONION_SERVICE_ID_STRING_LENGTH   56

The number of bytes needed to store onion service id as an ASCII c-string (not including null-terminator)

◆ V3_ONION_SERVICE_ID_STRING_SIZE

#define V3_ONION_SERVICE_ID_STRING_SIZE   57

The number of bytes needed to store onion service id as an ASCII c-string (including null-terminator)

◆ X25519_PRIVATE_KEY_BASE64_LENGTH

#define X25519_PRIVATE_KEY_BASE64_LENGTH   44

The number of bytes needed to store base64 encoded x25519 private key as an ASCII c-string (not including null-terminator)

◆ X25519_PRIVATE_KEY_BASE64_SIZE

#define X25519_PRIVATE_KEY_BASE64_SIZE   45

The number of bytes needed to store base64 encoded x25519 private key as an ASCII c-string (including a null terminator)

◆ X25519_PUBLIC_KEY_BASE32_LENGTH

#define X25519_PUBLIC_KEY_BASE32_LENGTH   52

The number of bytes needed to store base32 encoded x25519 public key as an ASCII c-string (not including null-terminator)

◆ X25519_PUBLIC_KEY_BASE32_SIZE

#define X25519_PUBLIC_KEY_BASE32_SIZE   53

The number of bytes needed to store base32 encoded x25519 public key as an ASCII c-string (including a null terminator)

Typedef Documentation

◆ gosling_bridge_line

Bridge line to use with particular pluggable-transport when connecting to the tor network

◆ gosling_circuit_token_t

typedef size_t gosling_circuit_token_t

A stream isolation token

◆ gosling_context

A context object associated with a single peer identity

◆ gosling_ed25519_private_key

An ed25519 private key used to create a v3 onion service

◆ gosling_endpoint_client_handshake_completed_callback_t

typedef void(* gosling_endpoint_client_handshake_completed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_v3_onion_service_id *endpoint_service_id, const char *channel_name, size_t channel_name_length, gosling_tcp_socket_t stream)

The function pointer type for the endpoint client handshake completed callback. This callback is called when the client successfully connects to an endpoint server.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
endpoint_service_idthe onion service id of the endpoint server the client has connected to
channel_namethe null-terminated name of the channel name requested by the the client
channel_name_lengththe number of chars in channel_name not including the null-terminator
streamos-specific tcp socket handle associated with the connection to the endpoint server

◆ gosling_endpoint_client_handshake_failed_callback_t

typedef void(* gosling_endpoint_client_handshake_failed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_error *error)

The function pointer type for the endpoint client handshake handshake failed callback. This callback is called when a client's endpoint handshake fails.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
errorerror associated with this failure

◆ gosling_endpoint_server_channel_supported_callback_t

typedef bool(* gosling_endpoint_server_channel_supported_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_v3_onion_service_id *client_service_id, const char *channel_name, size_t channel_name_length)

The function pointer type of the endpoint server channel supported callback. This callback is called when the server needs to determine if the client's requested channel is supported. The result of this callback partially determines if an incoming endpoint client handshake request is possible to complete.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
client_service_idthe onion service id of the connected endpoint client
channel_namea null-terminated ASCII string containing the name of the endpoint being requested
channel_name_lengththe number of chars in endpoint_name, not including the null-terminator
Returns
true if the server can handle requests for the requested channel, false otherwise

◆ gosling_endpoint_server_handshake_completed_callback_t

typedef void(* gosling_endpoint_server_handshake_completed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_v3_onion_service_id *endpoint_service_id, const gosling_v3_onion_service_id *client_service_id, const char *channel_name, size_t channel_name_length, gosling_tcp_socket_t stream)

The function pointer type for the endpoint server handshake completed callback. This callback is called when an endpoint server completes a handshake with an endpoint client.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
endpoint_service_idthe onion service id of the endpoint server the endpoint client has connected to
client_service_idthe onion service id of the connected endpoint client
channel_namethe null-terminated name of the channel requested by the client
channel_name_lengththe number of chars in channel_name not including the null-terminator
streamos-specific tcp socket handle associated with the connection to the endpoint client

◆ gosling_endpoint_server_handshake_failed_callback_t

typedef void(* gosling_endpoint_server_handshake_failed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_error *error)

The function pointer type for the endpoint server handshake handshake failed callback. This callback is called when a server's endpoint handshake fails.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
errorerror associated with this failure

◆ gosling_endpoint_server_handshake_rejected_callback_t

typedef void(* gosling_endpoint_server_handshake_rejected_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, bool client_allowed, bool client_requested_channel_valid, bool client_proof_signature_valid)

The function pointer type of the endpoint server handshake rejected callback. This callback is called whenever the endpoint server has rejected an endpoint client's handshake.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
client_allowedtrue if requesting client is allowed, false otherwies
client_requested_channel_validtrue if requesting client requested a valid endpoint, false otherwise
client_proof_signature_validtrue if the requesting client properly signed the endpoint proof, false otherwise

◆ gosling_endpoint_server_handshake_started_callback_t

typedef void(* gosling_endpoint_server_handshake_started_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle)

The function pointer type of the endpoint server handshake started callback. This callback is called whenever the endpoint server is initially connected to.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with

◆ gosling_endpoint_server_published_callback_t

typedef void(* gosling_endpoint_server_published_callback_t) (gosling_context *context, const gosling_v3_onion_service_id *endpoint_service_id, const char *endpoint_name, size_t endpoint_name_length)

The function pointer type for the endpoint server published callback. This callbcak is called whenever the onion service of the indicated endpoint server associted with the given context is published and should be reachable by clients.

Parameters
contextthe context associated with this event
endpoint_service_idthe onion service id of the published endpoint server
endpoint_namethe null-terminated name of the endpoint server published
endpoint_name_lengththe number of chars in endpoint_name string not including the null-terminator

◆ gosling_error

typedef struct gosling_error gosling_error

A wrapper object containing an error message

◆ gosling_handshake_handle_t

A handle for an in-progress identity handhskae

◆ gosling_identity_client_handshake_build_challenge_response_callback_t

typedef void(* gosling_identity_client_handshake_build_challenge_response_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const uint8_t *challenge_buffer, size_t challenge_buffer_size, uint8_t *out_challenge_response_buffer, size_t out_challenge_response_buffer_size)

The function pointer type for the identity client handshake build challlenge response callback. This callback is called when a client is ready to build a challenge response object.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
challenge_bufferthe source buffer containing a BSON document received from the identity server to serve as an endpoint request challenge
challenge_buffer_sizethe number of bytes in challenge_buffer
out_challenge_response_bufferthe destination buffer for the callback to write a BSON document representing the endpoint request challenge response object
out_challenge_response_buffer_sizethe number of bytes allocated in out_challenge_response_buffer

◆ gosling_identity_client_handshake_challenge_response_size_callback_t

typedef size_t(* gosling_identity_client_handshake_challenge_response_size_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const uint8_t *challenge_buffer, size_t challenge_buffer_size)

The function pointer type for the client handshake challenge response size callback. This callback is called when a client needs to know how much memory to allocate for a challenge response.

Parameters
contextthe context associated with this event
handshake_handlepointer to the client handshake handle this callback invocation is associated with; null if no client handshake init callback was provided
challenge_bufferthe source buffer containing a BSON document received from the identity server to serve as an endpoint request challenge
challenge_buffer_sizethe number of bytes in challenge_buffer
Returns
the number of bytes required to store the challenge response object

◆ gosling_identity_client_handshake_completed_callback_t

typedef void(* gosling_identity_client_handshake_completed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_v3_onion_service_id *identity_service_id, const gosling_v3_onion_service_id *endpoint_service_id, const char *endpoint_name, size_t endpoint_name_length, const gosling_x25519_private_key *client_auth_private_key)

The function pointer type for the identity client handshake completed callback. This callback is called whenever the client successfully completes a handshake with an identity server and is granted access to an endpoint server.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
identity_service_idthe onion service id of the identity server the client has successfully completed a hadshake with
endpoint_service_idthe onion service id of the endpoint server the client now has access to
endpoint_namethe null-terminated name of the provided endpoint server
endpoint_name_lengththe number of chars in endpoint_name string not including the null-terminator
client_auth_private_keythe client's x25519 private required to connect to the provided endpoint server

◆ gosling_identity_client_handshake_failed_callback_t

typedef void(* gosling_identity_client_handshake_failed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_error *error)

The function pointer type for the identity client handshake handshake failed callback. This callback is called when a client's identity handshake fails.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
errorerror associated with this failure

◆ gosling_identity_server_endpoint_supported_callback_t

typedef bool(* gosling_identity_server_endpoint_supported_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const char *endpoint_name, size_t endpoint_name_length)

The function pointer type of the identity server endpoint supported callback. This callback is called when the server needs to determine if the client's requested endpoint is supported. The result of this callback partially determines if an incoming client handshake request is possible to complete.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
endpoint_namea null-terminated ASCII string containing the name of the endpoint being requested
endpoint_name_lengththe number of chars in endpoint_name, not including the null-terminator
Returns
true if the server can handle requests for the requested endpoint, false otherwise

◆ gosling_identity_server_handshake_build_challenge_callback_t

typedef void(* gosling_identity_server_handshake_build_challenge_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, uint8_t *out_challenge_buffer, size_t out_challenge_buffer_size)

The function pointer type for the server handshake build challenge callback. This callback is called when a server needs to build a challenge object.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
out_challenge_bufferthe destination buffer for the callback to write a BSON document representing the endpoint request challenge object
out_challenge_buffer_sizethe number of bytes allocated in out_challenge_buffer

◆ gosling_identity_server_handshake_challenge_size_callback_t

typedef size_t(* gosling_identity_server_handshake_challenge_size_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle)

The function pointer type for the server handshake challenge size callback. This callback is called when a server needs to know how much memory to allocate for a challenge.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
Returns
the number of bytes required to store the challenge object

◆ gosling_identity_server_handshake_client_allowed_callback_t

typedef bool(* gosling_identity_server_handshake_client_allowed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_v3_onion_service_id *client_service_id)

The function pointer type of the identity server handshake client allowed callback. The result of this callback partially determines if an incoming client handshake request is possible to complete. For instance an implementation of this function completed.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
client_service_idthe v3 onion service id of the connected client
Returns
true if the server wants to allow the requesting client to connect client may complete the handshake, false otherwise

◆ gosling_identity_server_handshake_completed_callback_t

typedef void(* gosling_identity_server_handshake_completed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_ed25519_private_key *endpoint_private_key, const char *endpoint_name, size_t endpoint_name_length, const gosling_v3_onion_service_id *client_service_id, const gosling_x25519_public_key *client_auth_public_key)

The function pointer type for the identity server handshake completed callback. This callback is called whenever the identity server has successfully completed a handshake with and granted to a connecting identity client.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
endpoint_private_keythe ed25519 private key of the endpoint server to host for the client
endpoint_namethe null-terminated name of the new endpoint server
endpoint_name_lengththe length of the endpoint_name string not including the null-terminator
client_service_idthe onion service id of the client we have granted access to
client_auth_public_keythe x25519 public key to use to encrypt the endpoint server's service descriptor as provided by the connecting client

◆ gosling_identity_server_handshake_failed_callback_t

typedef void(* gosling_identity_server_handshake_failed_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const gosling_error *error)

The function pointer type for the identity server handshake handshake failed callback. This callback is called when a server's identity handshake fails.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
errorerror associated with this failure

◆ gosling_identity_server_handshake_rejected_callback_t

typedef void(* gosling_identity_server_handshake_rejected_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, bool client_allowed, bool client_requested_endpoint_valid, bool client_proof_signature_valid, bool client_auth_signature_valid, bool challenge_response_valid)

The function pointer type of the identity server handshake rejected callback. This callback is called whenever the identity server has rejected an identity client's handshake.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
client_allowedtrue if requesting client is allowed, false otherwies
client_requested_endpoint_validtrue if requesting client requested a valid endpoint, false otherwise
client_proof_signature_validtrue if the requesting client properly signed the identity proof, false otherwise
client_auth_signature_validtrue if the requesting client properly signed the authorization proof, false othewise
challenge_response_validtrue if the requesting client's challenge response was accepted by the server, false otherwise

◆ gosling_identity_server_handshake_started_callback_t

typedef void(* gosling_identity_server_handshake_started_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle)

The function pointer type of the identity server handshake started callback. This callback is called whenever the identity server is initially connected to.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with

◆ gosling_identity_server_handshake_verify_challenge_response_callback_t

typedef bool(* gosling_identity_server_handshake_verify_challenge_response_callback_t) (gosling_context *context, gosling_handshake_handle_t handshake_handle, const uint8_t *challenge_response_buffer, size_t challenge_response_buffer_size)

The function poointer type for the server handshake verify challenge response callback. This callback is called when a server needs to verify a challenge response object.

Parameters
contextthe context associated with this event
handshake_handlethe handshake handle this callback is associated with
challenge_response_buffera buffer containing the BSON document representing the endpoint request challenge response object
challenge_response_buffer_sizethe number of bytes in challenge_response_buffer
Returns
the result of the challenge response verification

◆ gosling_identity_server_published_callback_t

typedef void(* gosling_identity_server_published_callback_t) (gosling_context *context)

The function pointer type for the identity server published callback. This callback is called whenever the onion service of the identity server associated with the given context is published and should be reachable by clients.

Parameters
contextthe context associated with this event

◆ gosling_ip_address

An internet socket address, either IPv4 or IPv6

◆ gosling_library

A handle for the gosling library

◆ gosling_pluggable_transport_config

Pluggable transports settings object used by tor provider to launch pluggable-transports

◆ gosling_proxy_config

Proxy settings object used by tor provider to connect to the tor network

◆ gosling_target_address

An endpoint to connect to over tor

◆ gosling_tcp_socket_t

typedef int gosling_tcp_socket_t

A native TCP socket handle

◆ gosling_tor_bootstrap_completed_callback_t

typedef void(* gosling_tor_bootstrap_completed_callback_t) (gosling_context *context)

The function pointer type for the tor boootstrap completed callback. This callback is called when the context's tor daemon's bootstrap process has completed.

Parameters
contextthe context associated with this event

◆ gosling_tor_bootstrap_status_received_callback_t

typedef void(* gosling_tor_bootstrap_status_received_callback_t) (gosling_context *context, uint32_t progress, const char *tag, size_t tag_length, const char *summary, size_t summary_length)

The function pointer type for the tor bootstrap status received callback. This callback is called when context's tor daemon's bootstrap status has progressed.

Parameters
contextthe context associated with this event
progressan unsigned integer from 0 to 100 indicating the current completion perentage of the context's bootstrap process
tagthe null-terminated short name of the current bootstrap stage
tag_lengththe number of chrs in tag not including any null-terminator
summarythe null-terminated description of the current bootstra stage
summary_lengththe number of chars in summary not including the null-terminator

◆ gosling_tor_log_received_callback_t

typedef void(* gosling_tor_log_received_callback_t) (gosling_context *context, const char *line, size_t line_length)

The function pointer type for the tor log received callback. This callback is called whenever the context's tor daemon prints new log lines.

Parameters
contextthe context associated with this event
linethe null-terminated received log line
line_lengththe number of chars in line not including the null-terminator

◆ gosling_tor_provider

A tor provider object used by a context to connect to the tor network

◆ gosling_tor_provider_config

A tor provider config object used to construct a tor provider

◆ gosling_v3_onion_service_id

A v3 onion service id

◆ gosling_x25519_private_key

An x25519 private key used to decrypt v3 onion service descriptors

◆ gosling_x25519_public_key

An x25519 public key used to encrypt v3 onoin service descriptors

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

All of the gosling-related constants defined as an enum

Enumerator
target_address_string_size 

The maximum number of bytes needed to store a target address in the format domainname:port (including null-terminator) Maximum length of a human-readbale domain name is 253 bytes (per RFC 1035) see: https://stackoverflow.com/a/32294443 Maximum length of the :port section is 6 bytes null-terminator is 1 byte

v3_onion_service_id_string_length 

The number of bytes needed to store onion service id as an ASCII c-string (not including null-terminator)

v3_onion_service_id_string_size 

The number of bytes needed to store onion service id as an ASCII c-string (including null-terminator)

ed25519_private_keyblob_base64_length 

The number of bytes needed to store base64 encoded ed25519 private key as an ASCII c-string (not including null-terminator)

ed25519_private_key_keyblob_header_length 

The number of bytes needed to store the keyblob header

ed25519_private_key_keyblob_length 

The number of bytes needed to store ed25519 private keyblob as an ASCII c-string (not including a null terminator)

ed25519_private_key_keyblob_size 

The number of bytes needed to store ed25519 private keyblob as an ASCII c-string (including a null terminator)

x25519_private_key_base64_length 

The number of bytes needed to store base64 encoded x25519 private key as an ASCII c-string (not including null-terminator)

x25519_private_key_base64_size 

The number of bytes needed to store base64 encoded x25519 private key as an ASCII c-string (including a null terminator)

x25519_public_key_base32_length 

The number of bytes needed to store base32 encoded x25519 public key as an ASCII c-string (not including null-terminator)

x25519_public_key_base32_size 

The number of bytes needed to store base32 encoded x25519 public key as an ASCII c-string (including a null terminator)

Function Documentation

◆ gosling_bridge_line_free()

void gosling_bridge_line_free ( gosling_bridge_line in_bridge_line)

Frees a gosling_bridge_line

Parameters
in_bridge_linethe bridge line object to free

◆ gosling_bridge_line_from_string()

void gosling_bridge_line_from_string ( gosling_bridge_line **  out_bridge_line,
const char *  bridge_line,
size_t  bridge_line_length,
gosling_error **  error 
)

Construct bridge line from string

Parameters
out_bridge_linereturned bridge line object
bridge_linea bridge address to connect to using a pluggable-transport. For more information, see: https://tb-manual.torproject.org/bridges/
bridge_line_lengthnumber of characters in bridge_line, not counting any null-terminator
errorfilled on error

◆ gosling_context_abort_endpoint_client_handshake()

void gosling_context_abort_endpoint_client_handshake ( gosling_context context,
gosling_handshake_handle_t  handshake_handle,
gosling_error **  error 
)

Abort an in-progress endpoint client handshake

Parameters
contextthe context associated with the endpoint client handshake handle
handshake_handlethe handle associated with the identity client handshake
errorfilled on error

◆ gosling_context_abort_identity_client_handshake()

void gosling_context_abort_identity_client_handshake ( gosling_context context,
gosling_handshake_handle_t  handshake_handle,
gosling_error **  error 
)

Abort an in-progress identity client handshake

Parameters
contextthe context associated with the identity client handshake handle
handshake_handlethe handle associated with the identity client handshake
errorfilled on error

◆ gosling_context_begin_endpoint_handshake()

gosling_handshake_handle_t gosling_context_begin_endpoint_handshake ( gosling_context context,
const gosling_v3_onion_service_id endpoint_service_id,
const gosling_x25519_private_key client_auth_private_key,
const char *  channel_name,
size_t  channel_name_length,
gosling_error **  error 
)

Connect to and begin a handshake to request a channel from the given endpoint server

Parameters
contextthe context which will be opening the channel
endpoint_service_idthe endpoint server to open a channel to
client_auth_private_keythe x25519 clienth authorization key needed to decrypt the endpoint server's onion service descriptor
channel_namethe ascii-encoded name of the channel to open
channel_name_lengththe number of chars in channel name not including any null-terminator
errorfilled on error

◆ gosling_context_begin_identity_handshake()

gosling_handshake_handle_t gosling_context_begin_identity_handshake ( gosling_context context,
const gosling_v3_onion_service_id identity_service_id,
const char *  endpoint_name,
size_t  endpoint_name_length,
gosling_error **  error 
)

Connect to and begin a handshake to request an endpoint from the given identity server

Parameters
contextthe context to request an endpoint server for
identity_service_idthe service id of the identity server we want to request an endpoint server from
endpoint_namethe name of the endpoint server to request
endpoint_name_lengththe number of chars in endpoin_name not including any null-terminator
errorfilled on error

◆ gosling_context_bootstrap_tor()

void gosling_context_bootstrap_tor ( gosling_context context,
gosling_error **  error 
)

Connect a gosling_context to the tor network

Parameters
contextthe gosling context object to connect to the tor network
errorfilled on error

◆ gosling_context_connect()

void gosling_context_connect ( gosling_context context,
gosling_tcp_socket_t out_tcp_socket,
const gosling_target_address target_address,
gosling_circuit_token_t  circuit_token,
gosling_error **  error 
)

Connect to a target address using the provided gosling context's tor provider.

Parameters
contextthe context to use to connect with
out_tcp_socketreturned connected tcp socket
target_addressthe destination address to connect to
circuit_tokenthe circuit isolation token
errorfilled on error

◆ gosling_context_free()

void gosling_context_free ( gosling_context in_context)

Frees a gosling_context object

Parameters
in_contextthe context object to free

◆ gosling_context_generate_circuit_token()

gosling_circuit_token_t gosling_context_generate_circuit_token ( gosling_context context,
gosling_error **  error 
)

Generate a circuit token to isolate connect calls

Parameters
contextthe context to use to connect with
errorfilled on error

◆ gosling_context_init()

void gosling_context_init ( gosling_context **  out_context,
gosling_tor_provider in_tor_provider,
uint16_t  identity_port,
uint16_t  endpoint_port,
const gosling_ed25519_private_key identity_private_key,
gosling_error **  error 
)

Initialize a gosling context.

Parameters
out_contextreturned initialied gosling context
in_tor_providerthe tor client implementation to use; this function consumes the tor_provider and it may not be re-used in subsequent gosling_* calls, and it does not need to be freed
identity_portthe tor virtual port the identity server listens on
endpoint_portthe tor virtual port endpoint servers listen on
identity_private_keythe e25519 private key used to start th identity server's onion service
errorfilled on error

◆ gosling_context_poll_events()

void gosling_context_poll_events ( gosling_context context,
gosling_error **  error 
)

Update the internal gosling context state and process event callbacks

Parameters
contextthe context object we are updating
errorfilled on error

◆ gosling_context_release_circuit_token()

void gosling_context_release_circuit_token ( gosling_context context,
gosling_circuit_token_t  circuit_token,
gosling_error **  error 
)

Release a context's circuit token.

Parameters
contextthe context to use to connect with
circuit_tokencircuit token to destroy
errorfilled on error

◆ gosling_context_set_endpoint_client_handshake_completed_callback()

void gosling_context_set_endpoint_client_handshake_completed_callback ( gosling_context context,
gosling_endpoint_client_handshake_completed_callback_t  callback,
gosling_error **  error 
)

Set the endpoint client handshake completed callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_endpoint_client_handshake_failed_callback()

void gosling_context_set_endpoint_client_handshake_failed_callback ( gosling_context context,
gosling_endpoint_client_handshake_failed_callback_t  callback,
gosling_error **  error 
)

Set the endpoint client handshake failed callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_endpoint_server_channel_supported_callback()

void gosling_context_set_endpoint_server_channel_supported_callback ( gosling_context context,
gosling_endpoint_server_channel_supported_callback_t  callback,
gosling_error **  error 
)

Set the endpoint server handshake started callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_endpoint_server_handshake_completed_callback()

void gosling_context_set_endpoint_server_handshake_completed_callback ( gosling_context context,
gosling_endpoint_server_handshake_completed_callback_t  callback,
gosling_error **  error 
)

Set the endpoint server channel request completed callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_endpoint_server_handshake_failed_callback()

void gosling_context_set_endpoint_server_handshake_failed_callback ( gosling_context context,
gosling_endpoint_server_handshake_failed_callback_t  callback,
gosling_error **  error 
)

Set the endpoint server channel request completed callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_endpoint_server_handshake_rejected_callback()

void gosling_context_set_endpoint_server_handshake_rejected_callback ( gosling_context context,
gosling_endpoint_server_handshake_rejected_callback_t  callback,
gosling_error **  error 
)

Set the endpoint server channel request completed callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_endpoint_server_handshake_started_callback()

void gosling_context_set_endpoint_server_handshake_started_callback ( gosling_context context,
gosling_endpoint_server_handshake_started_callback_t  callback,
gosling_error **  error 
)

Set the endpoint server handshake started callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_endpoint_server_published_callback()

void gosling_context_set_endpoint_server_published_callback ( gosling_context context,
gosling_endpoint_server_published_callback_t  callback,
gosling_error **  error 
)

Set the endpoint server published callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_identity_client_build_challenge_response_callback()

void gosling_context_set_identity_client_build_challenge_response_callback ( gosling_context context,
gosling_identity_client_handshake_build_challenge_response_callback_t  callback,
gosling_error **  error 
)

Sets the identity client build challenge response callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_identity_client_challenge_response_size_callback()

void gosling_context_set_identity_client_challenge_response_size_callback ( gosling_context context,
gosling_identity_client_handshake_challenge_response_size_callback_t  callback,
gosling_error **  error 
)

Sets the identity challenge challenge response size callback for the specified context

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_identity_client_handshake_completed_callback()

void gosling_context_set_identity_client_handshake_completed_callback ( gosling_context context,
gosling_identity_client_handshake_completed_callback_t  callback,
gosling_error **  error 
)

Set the identity client handshake completed callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_identity_client_handshake_failed_callback()

void gosling_context_set_identity_client_handshake_failed_callback ( gosling_context context,
gosling_identity_client_handshake_failed_callback_t  callback,
gosling_error **  error 
)

Set the identity client handshake failed callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_identity_server_build_challenge_callback()

void gosling_context_set_identity_server_build_challenge_callback ( gosling_context context,
gosling_identity_server_handshake_build_challenge_callback_t  callback,
gosling_error **  error 
)

Sets the identity server build challenge callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on erro

◆ gosling_context_set_identity_server_challenge_size_callback()

void gosling_context_set_identity_server_challenge_size_callback ( gosling_context context,
gosling_identity_server_handshake_challenge_size_callback_t  callback,
gosling_error **  error 
)

Sets the identity server challenge size callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on erro

◆ gosling_context_set_identity_server_client_allowed_callback()

void gosling_context_set_identity_server_client_allowed_callback ( gosling_context context,
gosling_identity_server_handshake_client_allowed_callback_t  callback,
gosling_error **  error 
)

Sets the identity server client allowed callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_identity_server_endpoint_supported_callback()

void gosling_context_set_identity_server_endpoint_supported_callback ( gosling_context context,
gosling_identity_server_endpoint_supported_callback_t  callback,
gosling_error **  error 
)

Sets the identity server endpoint supported callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_identity_server_handshake_completed_callback()

void gosling_context_set_identity_server_handshake_completed_callback ( gosling_context context,
gosling_identity_server_handshake_completed_callback_t  callback,
gosling_error **  error 
)

Set the identity server request completed callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_identity_server_handshake_failed_callback()

void gosling_context_set_identity_server_handshake_failed_callback ( gosling_context context,
gosling_identity_server_handshake_failed_callback_t  callback,
gosling_error **  error 
)

Set the identity server request failed callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_identity_server_handshake_rejected_callback()

void gosling_context_set_identity_server_handshake_rejected_callback ( gosling_context context,
gosling_identity_server_handshake_rejected_callback_t  callback,
gosling_error **  error 
)

Set the identity server request rejeced callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_identity_server_handshake_started_callback()

void gosling_context_set_identity_server_handshake_started_callback ( gosling_context context,
gosling_identity_server_handshake_started_callback_t  callback,
gosling_error **  error 
)

Set the identity server handshake started callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_identity_server_published_callback()

void gosling_context_set_identity_server_published_callback ( gosling_context context,
gosling_identity_server_published_callback_t  callback,
gosling_error **  error 
)

Set the identity server published callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_identity_server_verify_challenge_response_callback()

void gosling_context_set_identity_server_verify_challenge_response_callback ( gosling_context context,
gosling_identity_server_handshake_verify_challenge_response_callback_t  callback,
gosling_error **  error 
)

Sets the identity server verify challenge response callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on erro

◆ gosling_context_set_tor_bootstrap_completed_callback()

void gosling_context_set_tor_bootstrap_completed_callback ( gosling_context context,
gosling_tor_bootstrap_completed_callback_t  callback,
gosling_error **  error 
)

Set the tor bootstrap completed callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_tor_bootstrap_status_received_callback()

void gosling_context_set_tor_bootstrap_status_received_callback ( gosling_context context,
gosling_tor_bootstrap_status_received_callback_t  callback,
gosling_error **  error 
)

Set the tor bootstrap status received callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_set_tor_log_received_callback()

void gosling_context_set_tor_log_received_callback ( gosling_context context,
gosling_tor_log_received_callback_t  callback,
gosling_error **  error 
)

Sets the tor log received callback for the specified context.

Parameters
contextthe context to register the callback to
callbackthe callback to register
errorfilled on error

◆ gosling_context_start_endpoint_server()

void gosling_context_start_endpoint_server ( gosling_context context,
const gosling_ed25519_private_key endpoint_private_key,
const char *  endpoint_name,
size_t  endpoint_name_length,
const gosling_v3_onion_service_id client_identity,
const gosling_x25519_public_key client_auth_public_key,
gosling_error **  error 
)

Start an endpoint server so the confirmed contact may connect

Parameters
contextthe gosling context with the given endpoint to start
endpoint_private_keythe ed25519 private key needed to start the endpoint onion service
endpoint_namethe ascii-encoded name of the endpoint server
endpoint_name_lengththe number of chars in endpoint name not including any null-terminator
client_identitythe v3 onion service id of the gosling client associated with this endpoint
client_auth_public_keythe x25519 public key used to encrypt the onion service descriptor
errorfilled on error

◆ gosling_context_start_identity_server()

void gosling_context_start_identity_server ( gosling_context context,
gosling_error **  error 
)

Start the identity server so that clients may request endpoints

Parameters
contextthe gosling context whose identity server to start
errorfilled on error

◆ gosling_context_stop_endpoint_server()

void gosling_context_stop_endpoint_server ( gosling_context context,
const gosling_ed25519_private_key endpoint_private_key,
gosling_error **  error 
)

Stops an endpoint server

Parameters
contextthe gosling context associated with the endpoint server
endpoint_private_keythe ed25519 private key associated with the endpoint server to stop
errorfilled on erro

◆ gosling_context_stop_identity_server()

void gosling_context_stop_identity_server ( gosling_context context,
gosling_error **  error 
)

Stop the identity server so clients can no longer request endpoints

Parameters
contextthe gosling context whose identity server to stop
errorfilled on error

◆ gosling_ed25519_private_key_clone()

void gosling_ed25519_private_key_clone ( gosling_ed25519_private_key **  out_private_key,
const gosling_ed25519_private_key private_key,
gosling_error **  error 
)

Copy method for gosling_ed25519_private_key

Parameters
out_private_keyreturned copy
private_keyoriginal to copy
errorfliled on error

◆ gosling_ed25519_private_key_free()

void gosling_ed25519_private_key_free ( gosling_ed25519_private_key in_private_key)

Frees a gosling_ed25519_private_key object

Parameters
in_private_keythe private key to free

◆ gosling_ed25519_private_key_from_keyblob()

void gosling_ed25519_private_key_from_keyblob ( gosling_ed25519_private_key **  out_private_key,
const char *  key_blob,
size_t  key_blob_length,
gosling_error **  error 
)

Conversion method for converting the KeyBlob string returned by ADD_ONION command into a gosling_ed25519_private_key

Parameters
out_private_keyreturned ed25519 private key
key_bloban ed25519 KeyBlob string in the form "ED25519-V3:abcd1234..."
key_blob_lengthnumber of chars in key_blob not including any null-terminator
errorfilled on error

◆ gosling_ed25519_private_key_generate()

void gosling_ed25519_private_key_generate ( gosling_ed25519_private_key **  out_private_key,
gosling_error **  error 
)

Creation method for securely generating a new gosling_ed25510_private_key

Parameters
out_private_keyreturned generated ed25519 private key
errorfilled on error

◆ gosling_ed25519_private_key_to_keyblob()

void gosling_ed25519_private_key_to_keyblob ( const gosling_ed25519_private_key private_key,
char *  out_key_blob,
size_t  key_blob_size,
gosling_error **  error 
)

Conversion method for converting an ed25519 private key to a null- terminated KeyBlob string for use with ADD_ONION command

Parameters
private_keythe private key to encode
out_key_blobbuffer to be filled with ed25519 KeyBlob in the form "ED25519-V3:abcd1234...\0"
key_blob_sizesize of out_key_blob buffer in bytes, must be at least 100 characters (99 for string + 1 for null-terminator)
errorfilled on error

◆ gosling_error_clone()

void gosling_error_clone ( gosling_error **  out_error,
const gosling_error orig_error,
gosling_error **  error 
)

Copy method for gosling_error

Parameters
out_errorreturned copy
orig_errororiginal to copy
errorfilled on error

◆ gosling_error_free()

void gosling_error_free ( gosling_error error)

Frees gosling_error and invalidates any message strings returned by gosling_error_get_message() from the given error object.

Parameters
errorthe error object to free

◆ gosling_error_get_message()

const char* gosling_error_get_message ( const gosling_error error)

Get error message from gosling_error

Parameters
errorthe error object to get the message from
Returns
null-terminated string with error message whose lifetime is tied to the source

◆ gosling_ip_address_clone()

void gosling_ip_address_clone ( gosling_ip_address **  out_ip_address,
const gosling_ip_address ip_address,
gosling_error **  error 
)

Copy method for gosling_ip_address

Parameters
out_ip_addressreturned copy
ip_addressoriginal to copy
errorfilled on error

◆ gosling_ip_address_free()

void gosling_ip_address_free ( gosling_ip_address in_ip_address)

Frees a gosling_ip_address object

Parameters
in_ip_addressthe ip address to free

◆ gosling_ip_address_from_ipv4()

void gosling_ip_address_from_ipv4 ( gosling_ip_address **  out_ip_address,
uint8_t  a,
uint8_t  b,
uint8_t  c,
uint8_t  d,
gosling_error **  error 
)

Create ip address from four ipv4 octets.

Parameters
out_ip_addressreturned ip address
afirst octet
bsecond octet
cthird octet
dfourth octet
errorfilled on error

◆ gosling_ip_address_from_ipv6()

void gosling_ip_address_from_ipv6 ( gosling_ip_address **  out_ip_address,
uint16_t  a,
uint16_t  b,
uint16_t  c,
uint16_t  d,
uint16_t  e,
uint16_t  f,
uint16_t  g,
uint16_t  h,
gosling_error **  error 
)

Create target address from eight ipv6 16-bit sgements

Parameters
out_ip_addressreturned ip address
afirst segment
bsecond segment
cthird segment
dfourth segment
efifth segment
fsixth segment
gseventh segment
heigth segment
errorfilled on error

◆ gosling_library_free()

void gosling_library_free ( gosling_library in_library)

Frees all resources associated with the Gosling library. No-op if the library is not initialized or if it has already been freed

Parameters
in_librarygosling library handle to free

◆ gosling_library_init()

void gosling_library_init ( gosling_library **  out_library,
gosling_error **  error 
)

Initializes the Gosling library. This function must be called before using any of the other Gosling functions.

Parameters
out_libraryreturned gosling library handle
errorfilled on error

◆ gosling_pluggable_transport_config_add_cmdline_option()

void gosling_pluggable_transport_config_add_cmdline_option ( gosling_pluggable_transport_config pluggable_transport_config,
const char *  option,
size_t  option_length,
gosling_error **  error 
)

Add a command-line option to be used when launching the pluggable-transport

Parameters
pluggable_transport_configthe pluggable-transport ocnfig object to update
optioncmd-line option or flag to pass to the pluggable-transport on launch
option_lengthnumber of characters in option, not counting any null- terminator
errorfilled on error

◆ gosling_pluggable_transport_config_free()

void gosling_pluggable_transport_config_free ( gosling_pluggable_transport_config in_pluggable_transport_config)

Frees a gosling_pluggable_transport_config

Parameters
in_pluggable_transport_configthe pluggable-transport object to free

◆ gosling_pluggable_transport_config_new()

void gosling_pluggable_transport_config_new ( gosling_pluggable_transport_config **  out_pluggable_transport_config,
const char *  transports,
size_t  transports_length,
const char *  path_to_binary,
size_t  path_to_binary_length,
gosling_error **  error 
)

Create a new pluggable-transport config object

Parameters
out_pluggable_transport_configreturned pluggable-transport object
transportscomma-delimited list of transports this pluggable-transport supports
transports_lengthnumber of characters in transports, not counting any null-terminator
path_to_binarypath to the pluggable-transport binary, either absolute or relative to the tor daemon process
path_to_binary_lengthnumber of characters in path_to_binary, not counting any null-terminator
errorfilled on error

◆ gosling_proxy_config_free()

void gosling_proxy_config_free ( gosling_proxy_config in_proxy_config)

Frees a gosling_proxy_config

Parameters
in_proxy_configthe proxy config object to free

◆ gosling_proxy_config_new_https()

void gosling_proxy_config_new_https ( gosling_proxy_config **  out_proxy_config,
const gosling_target_address proxy_address,
const char *  username,
size_t  username_length,
const char *  password,
size_t  password_length,
gosling_error **  error 
)

Create a https proxy definition

Parameters
out_proxy_configreturned proxy config object
proxy_addressthe host address of the proxy, must not be an onion service
usernameusername to authenticate with https proxy
username_lengthnumber of characters in username, not counting any null- terminator
passwordpassword to authenticate with https proxy
password_lengthnumber of characters in username, not counting any null- terminator
errorfilled on error

◆ gosling_proxy_config_new_socks4()

void gosling_proxy_config_new_socks4 ( gosling_proxy_config **  out_proxy_config,
const gosling_target_address proxy_address,
gosling_error **  error 
)

Create a socks4 proxy definition

Parameters
out_proxy_configreturned proxy config object
proxy_addressthe host address of the proxy, must not be an onion service
errorfilled on error

◆ gosling_proxy_config_new_socks5()

void gosling_proxy_config_new_socks5 ( gosling_proxy_config **  out_proxy_config,
const gosling_target_address proxy_address,
const char *  username,
size_t  username_length,
const char *  password,
size_t  password_length,
gosling_error **  error 
)

Create a socks5 proxy definition

Parameters
out_proxy_configreturned proxy config object
proxy_addressthe host address of the proxy, must not be an onion service
usernameusername to authenticate with socks5 proxy
username_lengthnumber of characters in username, not counting any null- terminator
passwordpassword to authenticate with socks5 proxy
password_lengthnumber of characters in username, not counting any null- terminator
errorfilled on error

◆ gosling_string_is_valid_v3_onion_service_id()

bool gosling_string_is_valid_v3_onion_service_id ( const char *  service_id_string,
size_t  service_id_string_length,
gosling_error **  error 
)

Checks if a service id string is valid per tor rend spec: https://gitweb.torproject.org/torspec.git/tree/rend-spec-v3.txt

Parameters
service_id_stringstring containing the v3 service id to be validated
service_id_string_lengththe number of chars in service_id_string not including any null-terminator; must be V3_ONION_SERVICE_ID_STRING_LENGTH (56)
errorfilled on error

◆ gosling_target_address_clone()

void gosling_target_address_clone ( gosling_target_address **  out_target_address,
const gosling_target_address target_address,
gosling_error **  error 
)

Copy method for gosling_target_address

Parameters
out_target_addressreturned copy
target_addressoriginal to copy
errorfilled on error

◆ gosling_target_address_free()

void gosling_target_address_free ( gosling_target_address in_target_address)

Frees a gosling_target_address object

Parameters
in_target_addressthe target address to free

◆ gosling_target_address_from_domain()

void gosling_target_address_from_domain ( gosling_target_address **  out_target_address,
const char *  domain,
size_t  domain_length,
uint16_t  port,
gosling_error **  error 
)

Create target address from domain and port. The resulting target address is in the format domain:port

Parameters
out_target_addressreturned target address
domainthe target domain
domain_lengththe number of chars in domain not including any null-terminator
portthe target port
errorfilled on error

◆ gosling_target_address_from_ip_address()

void gosling_target_address_from_ip_address ( gosling_target_address **  out_target_address,
const gosling_ip_address ip_address,
uint16_t  port,
gosling_error **  error 
)

Create target address from an ip address and a port.

Parameters
out_target_addressreturned target address
ip_addresstarget ip address
porttarget port
errorfilled on error

◆ gosling_target_address_from_string()

void gosling_target_address_from_string ( gosling_target_address **  out_target_address,
const char *  target_address,
size_t  target_address_length,
gosling_error **  error 
)

Create target address from some string representation

Parameters
out_target_addressreturned target address
target_addressserialised target address
target_address_lengththe number of chars in string not including any null-terminator
errorfilled on error

◆ gosling_target_address_from_v3_onion_service_id()

void gosling_target_address_from_v3_onion_service_id ( gosling_target_address **  out_target_address,
const gosling_v3_onion_service_id service_id,
uint16_t  port,
gosling_error **  error 
)

Create target address from onion service id and port.

Parameters
out_target_addressreturned target address
service_idthe target onion service id
portthe target port
errorfilled on error

◆ gosling_target_address_to_string()

void gosling_target_address_to_string ( const gosling_target_address target_address,
char *  out_target_address_string,
size_t  target_address_string_size,
gosling_error **  error 
)

Write target address to null-terminated string

Parameters
target_addressthe target address to write
out_target_address_stringbuffer to be filled with string
target_address_string_sizesize of the out_string buffer in bytes. The maximum required size is 262 bytes.
errorfilled on error

◆ gosling_tor_provider_config_add_bridge_line()

void gosling_tor_provider_config_add_bridge_line ( gosling_tor_provider_config tor_provider_config,
const gosling_bridge_line bridge_line,
gosling_error **  error 
)

Add a bridge line to a tor provider config. A tor provider config does not need to support bridge lines, so this function may fail as a result. The currently supported tor provider configs are:

  • Legacy Bundled Client

This function may be called multiple times allowing a tor provider config to be configured with multiple bridge lines.

Parameters
tor_provider_configthe tor provider config to update
bridge_linethe bridge lin to add to the tor provider config
errorfilled on error

◆ gosling_tor_provider_config_add_pluggable_transport_config()

void gosling_tor_provider_config_add_pluggable_transport_config ( gosling_tor_provider_config tor_provider_config,
const gosling_pluggable_transport_config pluggable_transport_config,
gosling_error **  error 
)

Add a pluggable-transport config to a tor provider config. A tor provider config does not need to support pluggable-transport configuration, so this function may fail as a result. The currently supported tor provider configs are:

  • Legacy Bundled Client

This function may be called multiple times allowing a tor provider config to be configured with multiple pluggable-transports.

Parameters
tor_provider_configthe tor provider config to update
pluggable_transport_configthe pluggable-transport config to add to the tor provider config; must not be null
errorfilled on error

◆ gosling_tor_provider_config_free()

void gosling_tor_provider_config_free ( gosling_tor_provider_config in_tor_provider_config)

Frees a gosling_tor_provider_config

Parameters
in_tor_provider_configthe tor provider config object to free

◆ gosling_tor_provider_config_new_bundled_legacy_client_config()

void gosling_tor_provider_config_new_bundled_legacy_client_config ( gosling_tor_provider_config **  out_tor_provider_config,
const char *  tor_bin_path,
size_t  tor_bin_path_length,
const char *  tor_working_directory,
size_t  tor_working_directory_length,
gosling_error **  error 
)

Create a tor provider config to build a bundled legacy tor daemon.

Parameters
out_tor_provider_configreturned tor provider config
tor_bin_paththe file system path to the tor binary; if this is null the tor executable found in the system PATH variable is used
tor_bin_path_lengththe number of chars in tor_bin_path not including any null terminator
tor_working_directorythe file system path to store tor's data
tor_working_directory_lengththe number of chars in tor_working_directory not including any null-terminator
errorfilled on error

◆ gosling_tor_provider_config_new_mock_client_config()

void gosling_tor_provider_config_new_mock_client_config ( gosling_tor_provider_config **  out_tor_provider_config,
gosling_error **  error 
)

Create a tor provider config to build a mock no-internet tor provider for testing.

Parameters
out_tor_provider_configreturned tor provider
errorfilled on error

◆ gosling_tor_provider_config_new_system_legacy_client_config()

void gosling_tor_provider_config_new_system_legacy_client_config ( gosling_tor_provider_config **  out_tor_provider_config,
const gosling_ip_address tor_socks_host,
uint16_t  tor_socks_port,
const gosling_ip_address tor_control_host,
uint16_t  tor_control_port,
const char *  tor_control_passwd,
size_t  tor_control_passwd_length,
gosling_error **  error 
)

Create a tor provider config to build a system legacy tor daemon

Parameters
out_tor_provider_configreturned tor provider config
tor_socks_hosttor daemon socks server host
tor_socks_porttor daemon socks server port
tor_control_hosttor daemon control host
tor_control_porttor daemon control port
tor_control_passwdauthentication password
tor_control_passwd_lengththe number of chars in tor_control_password not including any null-terminator
errorfilled on error

◆ gosling_tor_provider_config_set_allowed_ports()

void gosling_tor_provider_config_set_allowed_ports ( gosling_tor_provider_config tor_provider_config,
const uint16_t *  allowed_ports,
size_t  allowed_ports_count,
gosling_error **  error 
)

Set a tor provider config's allowed ports list. A tor provider config does not need to support a port allow-list, so this function may fail as a result. The currently supported tor provider configs are:

  • Legacy Bundled Client
Parameters
tor_provider_configthe tor provider config to update
allowed_portsan array of ports the local system's firewall allows connections to; must not be null
allowed_ports_countthe number of ports in the allowed_ports array; must not be 0
errorfilled on error

◆ gosling_tor_provider_config_set_proxy_config()

void gosling_tor_provider_config_set_proxy_config ( gosling_tor_provider_config tor_provider_config,
const gosling_proxy_config proxy_config,
gosling_error **  error 
)

Set a tor provider config's proxy configuration. A tor provider config does not need to support proxy configuration, so this function may fail as a result. The currently supported tor provider configs are:

  • Legacy Bundled Client
Parameters
tor_provider_configthe tor provider config to update
proxy_configthe proxy configuration to use; must not be null
errorfilled on error

◆ gosling_tor_provider_free()

void gosling_tor_provider_free ( gosling_tor_provider in_tor_provider)

Frees a gosling_tor_provider object

Parameters
in_tor_providerthe tor provider object to free

◆ gosling_tor_provider_from_tor_provider_config()

void gosling_tor_provider_from_tor_provider_config ( gosling_tor_provider **  out_tor_provider,
const gosling_tor_provider_config tor_provider_config,
gosling_error **  error 
)

Create a tor provider from the provided tor provider config.

Parameters
out_tor_providerreturned tor provider
tor_provider_configtor provider configuration
errorfilled on error

◆ gosling_v3_onion_service_id_clone()

void gosling_v3_onion_service_id_clone ( gosling_v3_onion_service_id **  out_service_id,
const gosling_v3_onion_service_id service_id,
gosling_error **  error 
)

Copy method for gosling_v3_onion_service_id

Parameters
out_service_idreturned copy
service_idoriginal to copy
errorfliled on error

◆ gosling_v3_onion_service_id_free()

void gosling_v3_onion_service_id_free ( gosling_v3_onion_service_id in_service_id)

Frees a gosling_v3_onion_service_id object

Parameters
in_service_idthe service id object to free

◆ gosling_v3_onion_service_id_from_ed25519_private_key()

void gosling_v3_onion_service_id_from_ed25519_private_key ( gosling_v3_onion_service_id **  out_service_id,
const gosling_ed25519_private_key ed25519_private_key,
gosling_error **  error 
)

Conversion method for converting an ed25519 private key into a gosling_v3_onion_service_id object

Parameters
out_service_idreturned service id object
ed25519_private_keyan e25519 private key
errorfilled on error

◆ gosling_v3_onion_service_id_from_string()

void gosling_v3_onion_service_id_from_string ( gosling_v3_onion_service_id **  out_service_id,
const char *  service_id_string,
size_t  service_id_string_length,
gosling_error **  error 
)

Conversion method for converting a v3 onion service string into a gosling_v3_onion_service_id object

Parameters
out_service_idreturned service id object
service_id_stringa v3 onion service id string
service_id_string_lengththe number of chars in service_id_string not including any null-terminator
errorfilled on error

◆ gosling_v3_onion_service_id_to_string()

void gosling_v3_onion_service_id_to_string ( const gosling_v3_onion_service_id service_id,
char *  out_service_id_string,
size_t  service_id_string_size,
gosling_error **  error 
)

Conversion method for converting v3 onion service id to a null-terminated string

Parameters
service_idthe service id to encode
out_service_id_stringbuffer to be filled with x25519 key encoded as base32
service_id_string_sizesize of out_service_id_string buffer in bytes, must be at least 57 characters (56 for string + 1 for null-terminator)
errorfilled on error

◆ gosling_x25519_private_key_clone()

void gosling_x25519_private_key_clone ( gosling_x25519_private_key **  out_private_key,
const gosling_x25519_private_key private_key,
gosling_error **  error 
)

Copy method for gosling_x25519_private_key

Parameters
out_private_keyreturned copy
private_keyoriginal to copy
errorfliled on error

◆ gosling_x25519_private_key_free()

void gosling_x25519_private_key_free ( gosling_x25519_private_key in_private_key)

Frees a gosling_x25519_private_key object

Parameters
in_private_keythe private key to free

◆ gosling_x25519_private_key_from_base64()

void gosling_x25519_private_key_from_base64 ( gosling_x25519_private_key **  out_private_key,
const char *  base64,
size_t  base64_length,
gosling_error **  error 
)

Conversion method for converting a base64-encoded string used by the ONION_CLIENT_AUTH_ADD command into a gosling_x25519_private_key

Parameters
out_private_keyreturned x25519 private key
base64an x25519 private key encoded as a base64 string
base64_lengththe number of chars in base64 not including any null-terminator
errorfilled on error

◆ gosling_x25519_private_key_to_base64()

void gosling_x25519_private_key_to_base64 ( const gosling_x25519_private_key private_key,
char *  out_base64,
size_t  base64_size,
gosling_error **  error 
)

Conversion method for converting an x25519 private key to a null- terminated base64 string for use with ONION_CLIENT_AUTH_ADD command

Parameters
private_keythe private key to encode
out_base64buffer to be filled with x25519 key encoded as base64
base64_sizesize of out_base64 buffer in bytes, must be at least 45 characters (44 for string + 1 for null-terminator)
errorfilled on error

◆ gosling_x25519_public_key_clone()

void gosling_x25519_public_key_clone ( gosling_x25519_public_key **  out_public_key,
const gosling_x25519_public_key public_key,
gosling_error **  error 
)

Copy method for gosling_x25519_public_key

Parameters
out_public_keyreturned copy
public_keyoriginal to copy
errorfliled on error

◆ gosling_x25519_public_key_free()

void gosling_x25519_public_key_free ( gosling_x25519_public_key in_public_key)

Frees a gosling_x25519_public_key object

Parameters
in_public_keythe public key to free

◆ gosling_x25519_public_key_from_base32()

void gosling_x25519_public_key_from_base32 ( gosling_x25519_public_key **  out_public_key,
const char *  base32,
size_t  base32_length,
gosling_error **  error 
)

Conversion method for converting a base32-encoded string used by the ADD_ONION command into a gosling_x25519_public_key

Parameters
out_public_keyreturned x25519 public key
base32an x25519 public key encoded as a base32 string
base32_lengththe number of chars in base32 not including any null-terminator
errorfilled on error

◆ gosling_x25519_public_key_to_base32()

void gosling_x25519_public_key_to_base32 ( const gosling_x25519_public_key public_key,
char *  out_base32,
size_t  base32_size,
gosling_error **  error 
)

Conversion method for converting an x25519 public key to a null- terminated base64 string for use with ADD_ONION command

Parameters
public_keythe public key to encode
out_base32buffer to be filled with x25519 key encoded as base32
base32_sizesize of out_base32 buffer in bytes, must be at least 53 characters (52 for string + 1 for null-terminator)
errorfilled on error