9 #ifndef TOR_HS_SERVICE_H 10 #define TOR_HS_SERVICE_H 12 #include "crypto_curve25519.h" 13 #include "crypto_ed25519.h" 22 #include "hs/cell_establish_intro.h" 27 #define HS_SERVICE_DEFAULT_VERSION HS_VERSION_TWO 31 #define HS_SERVICE_NEXT_UPLOAD_TIME_MIN (60 * 60) 32 #define HS_SERVICE_NEXT_UPLOAD_TIME_MAX (120 * 60) 58 uint64_t introduce2_count;
61 uint64_t introduce2_max;
64 time_t time_to_expire;
70 uint32_t circuit_retries;
73 unsigned int circuit_established : 1;
78 replaycache_t *replay_cache;
86 time_t retry_period_started;
89 unsigned int num_circuits_launched;
99 digestmap_t *failed_id;
115 time_t next_upload_time;
123 uint64_t time_period_num;
127 unsigned int missing_intro_points : 1;
144 unsigned int is_identify_key_offline : 1;
160 char *directory_path;
165 uint64_t max_streams_per_rdv_circuit;
169 unsigned int max_streams_close_circuit : 1;
173 unsigned int num_intro_points;
177 unsigned int allow_unknown_ports : 1;
181 unsigned int is_single_onion : 1;
185 unsigned int dir_group_readable : 1;
188 unsigned int is_ephemeral : 1;
196 time_t intro_circ_retry_started_time;
200 unsigned int num_intro_circ_launched;
207 replaycache_t *replay_cache_rend_cookie;
211 time_t next_rotation_time;
218 char onion_address[HS_SERVICE_ADDR_LEN_BASE32 + 1];
245 typedef HT_HEAD(hs_service_ht,
hs_service_t) hs_service_ht;
250 void hs_service_init(
void);
251 void hs_service_free_all(
void);
256 #define hs_service_free(s) FREE_AND_NULL(hs_service_t, hs_service_free_, (s)) 258 unsigned int hs_service_get_num_services(
void);
259 void hs_service_stage_services(
const smartlist_t *service_list);
260 int hs_service_load_all_keys(
void);
261 void hs_service_lists_fnames_for_sandbox(
smartlist_t *file_list,
266 void hs_service_map_has_changed(
void);
267 void hs_service_dir_info_changed(
void);
268 void hs_service_run_scheduled_events(time_t now);
271 const uint8_t *payload,
274 const uint8_t *payload,
283 int max_streams_per_rdv_circuit,
284 int max_streams_close_circuit,
char **address_out);
285 int hs_service_del_ephemeral(
const char *address);
288 void hs_service_upload_desc_to_dir(
const char *encoded_desc,
289 const uint8_t version,
294 #ifdef HS_SERVICE_PRIVATE 296 #ifdef TOR_UNIT_TESTS 298 STATIC
unsigned int get_hs_service_map_size(
void);
299 STATIC
int get_hs_service_staging_list_size(
void);
300 STATIC hs_service_ht *get_hs_service_map(
void);
310 STATIC
void remove_service(hs_service_ht *map,
hs_service_t *service);
311 STATIC
int register_service(hs_service_ht *map,
hs_service_t *service);
315 unsigned int is_legacy);
317 #define service_intro_point_free(ip) \ 318 FREE_AND_NULL(hs_service_intro_point_t, \ 319 service_intro_point_free_, (ip)) 320 STATIC
void service_intro_point_add(digest256map_t *map,
322 STATIC
void service_intro_point_remove(
const hs_service_t *service,
339 STATIC
int can_service_launch_intro_circuit(
hs_service_t *service,
343 STATIC
void run_housekeeping_event(time_t now);
344 STATIC
void rotate_all_descriptors(time_t now);
345 STATIC
void build_all_descriptors(time_t now);
346 STATIC
void update_all_descriptors(time_t now);
347 STATIC
void run_upload_descriptor_event(time_t now);
353 #define service_descriptor_free(d) \ 354 FREE_AND_NULL(hs_service_descriptor_t, \ 355 service_descriptor_free_, (d)) 360 int *service_found_out);
363 write_address_to_file(
const hs_service_t *service,
const char *fname_);
370 int descriptor_changed);
smartlist_t * previous_hsdirs
Definition: hs_service.h:133
Definition: crypto_ed25519.h:39
Definition: hs_service.h:35
Definition: hs_intropoint.h:32
Header file containing common data for the whole HS subsytem.
#define DIGEST_LEN
Definition: crypto_digest.h:22
Definition: crypto_ed25519.h:23
Definition: hs_service.h:137
Definition: hs_descriptor.h:185
STATIC int service_desc_hsdirs_changed(const hs_service_t *service, const hs_service_descriptor_t *desc)
Definition: hs_service.c:2586
Header file for replaycache.c.
Definition: hs_service.h:103
Definition: container.h:18
Definition: hs_ident.h:42
STATIC void upload_descriptor_to_all(const hs_service_t *service, hs_service_descriptor_t *desc)
Definition: hs_service.c:2526
Header file containing circuit and connection identifier data for the whole HS subsytem.
hs_service_add_ephemeral_status_t
Definition: hs_common.h:135
Definition: crypto_curve25519.h:38
Header file for hs_descriptor.c.
Header file for hs_intropoint.c.
STATIC char * encode_desc_rev_counter_for_state(const hs_service_descriptor_t *desc)
Definition: hs_service.c:2334
STATIC void service_desc_schedule_upload(hs_service_descriptor_t *desc, time_t now, int descriptor_changed)
Definition: hs_service.c:1736
Definition: crypto_curve25519.h:24
Definition: crypto_ed25519.h:28
Definition: crypto_rsa.c:41
Definition: hs_service.h:215
STATIC uint64_t check_state_line_for_service_rev_counter(const char *state_line, const ed25519_public_key_t *blinded_pubkey, int *service_found_out)
Definition: hs_service.c:2396
Definition: hs_service.h:192
Definition: hs_service.h:82
Definition: hs_service.h:150