9 #ifndef TOR_HS_COMMON_H 10 #define TOR_HS_COMMON_H 15 #include "ed25519_cert.h" 19 #define HS_VERSION_TWO 2 21 #define HS_VERSION_THREE 3 23 #define HS_VERSION_MIN HS_VERSION_TWO 24 #define HS_VERSION_MAX HS_VERSION_THREE 27 #define NUM_INTRO_POINTS_DEFAULT 3 29 #define NUM_INTRO_POINTS_MAX 10 32 #define NUM_INTRO_POINTS_EXTRA 2 35 #define INTRO_CIRC_RETRY_PERIOD (60*5) 38 #define MAX_INTRO_CIRCS_PER_PERIOD 10 41 #define MAX_REND_FAILURES 1 44 #define MAX_REND_TIMEOUT 30 47 #define ESTABLISH_INTRO_SIG_PREFIX "Tor establish-intro cell v1" 50 #define HS_TIME_PERIOD_LENGTH_DEFAULT 1440 52 #define HS_TIME_PERIOD_LENGTH_MIN 30 54 #define HS_TIME_PERIOD_LENGTH_MAX (60 * 24 * 10) 57 #define HS_SERVICE_ADDR_CHECKSUM_PREFIX ".onion checksum" 59 #define HS_SERVICE_ADDR_CHECKSUM_PREFIX_LEN \ 60 (sizeof(HS_SERVICE_ADDR_CHECKSUM_PREFIX) - 1) 65 #define HS_SERVICE_ADDR_CHECKSUM_INPUT_LEN \ 66 (HS_SERVICE_ADDR_CHECKSUM_PREFIX_LEN + ED25519_PUBKEY_LEN + sizeof(uint8_t)) 68 #define HS_SERVICE_ADDR_CHECKSUM_LEN_USED 2 73 #define HS_SERVICE_ADDR_LEN \ 74 (ED25519_PUBKEY_LEN + HS_SERVICE_ADDR_CHECKSUM_LEN_USED + sizeof(uint8_t)) 77 #define HS_SERVICE_ADDR_LEN_BASE32 \ 78 (CEIL_DIV(HS_SERVICE_ADDR_LEN * 8, 5)) 81 #define HS_TIME_PERIOD_LENGTH_DEFAULT 1440 83 #define HS_TIME_PERIOD_LENGTH_MIN 30 85 #define HS_TIME_PERIOD_LENGTH_MAX (60 * 24 * 10) 87 #define HS_TIME_PERIOD_ROTATION_OFFSET (12 * 60) 91 #define HS_KEYBLIND_NONCE_PREFIX "key-blind" 92 #define HS_KEYBLIND_NONCE_PREFIX_LEN (sizeof(HS_KEYBLIND_NONCE_PREFIX) - 1) 93 #define HS_KEYBLIND_NONCE_LEN \ 94 (HS_KEYBLIND_NONCE_PREFIX_LEN + sizeof(uint64_t) + sizeof(uint64_t)) 97 #define HS_CREDENTIAL_PREFIX "credential" 98 #define HS_CREDENTIAL_PREFIX_LEN (sizeof(HS_CREDENTIAL_PREFIX) - 1) 99 #define HS_SUBCREDENTIAL_PREFIX "subcredential" 100 #define HS_SUBCREDENTIAL_PREFIX_LEN (sizeof(HS_SUBCREDENTIAL_PREFIX) - 1) 103 #define HS_INDEX_PREFIX "store-at-idx" 104 #define HS_INDEX_PREFIX_LEN (sizeof(HS_INDEX_PREFIX) - 1) 107 #define HSDIR_INDEX_PREFIX "node-idx" 108 #define HSDIR_INDEX_PREFIX_LEN (sizeof(HSDIR_INDEX_PREFIX) - 1) 111 #define HS_SRV_DISASTER_PREFIX "shared-random-disaster" 112 #define HS_SRV_DISASTER_PREFIX_LEN (sizeof(HS_SRV_DISASTER_PREFIX) - 1) 115 #define HS_DEFAULT_HSDIR_N_REPLICAS 2 117 #define HS_DEFAULT_HSDIR_SPREAD_STORE 4 119 #define HS_DEFAULT_HSDIR_SPREAD_FETCH 3 124 #define HS_LEGACY_RENDEZVOUS_CELL_SIZE \ 125 (REND_COOKIE_LEN + DH_KEY_LEN + DIGEST_LEN) 129 HS_AUTH_KEY_TYPE_LEGACY = 1,
130 HS_AUTH_KEY_TYPE_ED25519 = 2,
131 } hs_auth_key_type_t;
148 uint16_t virtual_port;
150 unsigned int is_unix_addr:1;
156 char unix_addr[FLEXIBLE_ARRAY_MEMBER];
160 void hs_free_all(
void);
164 int hs_check_service_private_dir(
const char *username,
const char *path,
165 unsigned int dir_group_readable,
166 unsigned int create);
169 char *hs_path_from_filename(
const char *directory,
const char *filename);
172 int hs_address_is_valid(
const char *address);
174 uint8_t *checksum_out, uint8_t *version_out);
177 const uint8_t *secret,
size_t secret_len,
178 uint64_t time_period_num,
181 const uint8_t *secret,
size_t secret_len,
182 uint64_t time_period_num,
184 int hs_service_requires_uptime_circ(
const smartlist_t *ports);
187 #define rend_data_free(data) \ 188 FREE_AND_NULL(rend_data_t, rend_data_free_, (data)) 190 rend_data_t *rend_data_client_create(
const char *onion_address,
194 rend_data_t *rend_data_service_create(
const char *onion_address,
195 const char *pk_digest,
196 const uint8_t *cookie,
198 const char *rend_data_get_address(
const rend_data_t *rend_data);
199 const char *rend_data_get_desc_id(
const rend_data_t *rend_data,
200 uint8_t replica,
size_t *len_out);
201 const uint8_t *rend_data_get_pk_digest(
const rend_data_t *rend_data,
204 routerstatus_t *pick_hsdir(
const char *desc_id,
const char *desc_id_base32);
208 uint8_t *subcred_out);
210 uint64_t hs_get_previous_time_period_num(time_t now);
213 time_t hs_get_start_time_of_next_time_period(time_t now);
217 MOCK_DECL(
int, hs_in_period_between_tp_and_srv,
220 uint8_t *hs_get_current_srv(uint64_t time_period_num,
222 uint8_t *hs_get_previous_srv(uint64_t time_period_num,
226 const uint8_t *srv, uint64_t period_num,
227 uint8_t *hsdir_index_out);
228 void hs_build_hs_index(uint64_t replica,
230 uint64_t period_num, uint8_t *hs_index_out);
232 int32_t hs_get_hsdir_n_replicas(
void);
233 int32_t hs_get_hsdir_spread_fetch(
void);
234 int32_t hs_get_hsdir_spread_store(
void);
237 uint64_t time_period_num,
238 int use_second_hsdir_index,
241 const char *req_key_str);
245 const char *desc_id_base32,
246 time_t now,
int set);
260 #ifdef HS_COMMON_PRIVATE 266 #define REND_HID_SERV_DIR_REQUERY_PERIOD (15 * 60) 269 #define REND_HID_SERV_DIR_REQUERY_PERIOD_TESTING (5) 271 #ifdef TOR_UNIT_TESTS 276 STATIC uint8_t *get_first_cached_disaster_srv(
void);
277 STATIC uint8_t *get_second_cached_disaster_srv(
void);
Definition: crypto_ed25519.h:39
uint64_t hs_get_time_period_num(time_t now)
Definition: hs_common.c:259
Definition: crypto_ed25519.h:23
STATIC strmap_t * get_last_hid_serv_requests(void)
Definition: hs_common.c:1457
void rend_data_free_(rend_data_t *data)
Definition: hs_common.c:351
Definition: ed25519_cert.h:48
MOCK_DECL(int, router_have_minimum_dir_info,(void))
Definition: container.h:18
rend_auth_type_t
Definition: or.h:826
Definition: hs_common.h:146
Definition: hs_common.h:139
Master header file for Tor-specific functionality.
STATIC uint64_t get_time_period_length(void)
Definition: hs_common.c:233
time_t hs_hsdir_requery_period(const or_options_t *options)
Definition: hs_common.c:1427
hs_service_add_ephemeral_status_t
Definition: hs_common.h:135
int hs_get_service_max_rend_failures(void)
Definition: hs_common.c:223
uint64_t hs_get_next_time_period_num(time_t now)
Definition: hs_common.c:294
Definition: hs_build_address.py:1
Definition: crypto_curve25519.h:24
Definition: hs_common.h:140
Definition: hs_common.h:138
Definition: hs_common.h:137
time_t hs_lookup_last_hid_serv_request(routerstatus_t *hs_dir, const char *desc_id_base32, time_t now, int set)
Definition: hs_common.c:1470
Definition: hs_common.h:141
STATIC void get_disaster_srv(uint64_t time_period_num, uint8_t *srv_out)
Definition: hs_common.c:624
routerstatus_t * hs_pick_hsdir(smartlist_t *responsible_dirs, const char *req_key_str)
Definition: hs_common.c:1601
Definition: hs_common.h:136
void hs_purge_last_hid_serv_requests(void)
Definition: hs_common.c:1574
void hs_purge_hid_serv_from_last_hid_serv_requests(const char *desc_id)
Definition: hs_common.c:1533
void hs_clean_last_hid_serv_requests(time_t now)
Definition: hs_common.c:1504