tor  master
routerparse.h
Go to the documentation of this file.
1 /* Copyright (c) 2001 Matej Pfajfar.
2  * Copyright (c) 2001-2004, Roger Dingledine.
3  * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
4  * Copyright (c) 2007-2017, The Tor Project, Inc. */
5 /* See LICENSE for licensing information */
6 
12 #ifndef TOR_ROUTERPARSE_H
13 #define TOR_ROUTERPARSE_H
14 
15 int router_get_router_hash(const char *s, size_t s_len, char *digest);
16 int router_get_dir_hash(const char *s, char *digest);
17 int router_get_networkstatus_v3_hashes(const char *s,
18  common_digests_t *digests);
20  const char **start_out,
21  const char **end_out);
22 int router_get_networkstatus_v3_sha3_as_signed(uint8_t *digest_out,
23  const char *s);
24 int router_get_extrainfo_hash(const char *s, size_t s_len, char *digest);
25 #define DIROBJ_MAX_SIG_LEN 256
26 char *router_get_dirobj_signature(const char *digest,
27  size_t digest_len,
28  const crypto_pk_t *private_key);
29 int router_append_dirobj_signature(char *buf, size_t buf_len,
30  const char *digest,
31  size_t digest_len,
32  crypto_pk_t *private_key);
33 int router_parse_list_from_string(const char **s, const char *eos,
34  smartlist_t *dest,
35  saved_location_t saved_location,
36  int is_extrainfo,
37  int allow_annotations,
38  const char *prepend_annotations,
39  smartlist_t *invalid_digests_out);
40 
41 routerinfo_t *router_parse_entry_from_string(const char *s, const char *end,
42  int cache_copy,
43  int allow_annotations,
44  const char *prepend_annotations,
45  int *can_dl_again_out);
46 extrainfo_t *extrainfo_parse_entry_from_string(const char *s, const char *end,
47  int cache_copy, struct digest_ri_map_t *routermap,
48  int *can_dl_again_out);
49 MOCK_DECL(addr_policy_t *, router_parse_addr_policy_item_from_string,
50  (const char *s, int assume_action, int *malformed_list));
51 version_status_t tor_version_is_obsolete(const char *myversion,
52  const char *versionlist);
53 int tor_version_parse_platform(const char *platform,
54  tor_version_t *version_out,
55  int strict);
56 int tor_version_as_new_as(const char *platform, const char *cutoff);
57 int tor_version_parse(const char *s, tor_version_t *out);
60 void sort_version_list(smartlist_t *lst, int remove_duplicates);
62 void dump_distinct_digest_count(int severity);
63 
64 int compare_vote_routerstatus_entries(const void **_a, const void **_b);
67  const char **eos_out,
68  networkstatus_type_t ns_type);
70  const char *s, const char *eos);
71 
72 smartlist_t *microdescs_parse_from_string(const char *s, const char *eos,
73  int allow_annotations,
74  saved_location_t where,
75  smartlist_t *invalid_digests_out);
76 
78  const char **end_of_string);
80  char *desc_id_out,
81  char **intro_points_encrypted_out,
82  size_t *intro_points_encrypted_size_out,
83  size_t *encoded_size_out,
84  const char **next_out, const char *desc,
85  int as_hsdir);
86 int rend_decrypt_introduction_points(char **ipos_decrypted,
87  size_t *ipos_decrypted_size,
88  const char *descriptor_cookie,
89  const char *ipos_encrypted,
90  size_t ipos_encrypted_size);
92  const char *intro_points_encoded,
93  size_t intro_points_encoded_size);
94 int rend_parse_client_keys(strmap_t *parsed_clients, const char *str);
95 
96 void routerparse_init(void);
97 void routerparse_free_all(void);
98 
99 #ifdef ROUTERPARSE_PRIVATE
100 /*
101  * One entry in the list of dumped descriptors; filename dumped to, length,
102  * SHA-256 and timestamp.
103  */
104 
105 typedef struct {
106  char *filename;
107  size_t len;
108  uint8_t digest_sha256[DIGEST256_LEN];
109  time_t when;
110 } dumped_desc_t;
111 
112 EXTERN(uint64_t, len_descs_dumped)
113 EXTERN(smartlist_t *, descs_dumped)
114 STATIC int routerstatus_parse_guardfraction(const char *guardfraction_str,
115  networkstatus_t *vote,
116  vote_routerstatus_t *vote_rs,
117  routerstatus_t *rs);
118 MOCK_DECL(STATIC dumped_desc_t *, dump_desc_populate_one_file,
119  (const char *dirname, const char *f));
120 STATIC void dump_desc_populate_fifo_from_directory(const char *dirname);
121 STATIC void dump_desc_fifo_cleanup(void);
122 struct memarea_t;
124  struct memarea_t *area,
125  const char **s, smartlist_t *tokens,
126  networkstatus_t *vote,
127  vote_routerstatus_t *vote_rs,
128  int consensus_method,
129  consensus_flavor_t flav);
130 MOCK_DECL(STATIC void,dump_desc,(const char *desc, const char *type));
131 MOCK_DECL(STATIC int, router_compute_hash_final,(char *digest,
132  const char *start, size_t len,
133  digest_algorithm_t alg));
134 MOCK_DECL(STATIC int, signed_digest_equals,
135  (const uint8_t *d1, const uint8_t *d2, size_t len));
136 
138  const char *protocols,
139  const char *version);
140 #endif /* defined(ROUTERPARSE_PRIVATE) */
141 
142 #define ED_DESC_SIGNATURE_PREFIX "Tor router descriptor signature v1"
143 
144 #endif /* !defined(TOR_ROUTERPARSE_H) */
145 
networkstatus_t * networkstatus_parse_vote_from_string(const char *s, const char **eos_out, networkstatus_type_t ns_type)
Definition: routerparse.c:3366
Definition: memarea.c:112
int router_get_router_hash(const char *s, size_t s_len, char *digest)
Definition: routerparse.c:989
version_status_t tor_version_is_obsolete(const char *myversion, const char *versionlist)
Definition: routerparse.c:1151
STATIC routerstatus_t * routerstatus_parse_entry_from_string(memarea_t *area, const char **s, smartlist_t *tokens, networkstatus_t *vote, vote_routerstatus_t *vote_rs, int consensus_method, consensus_flavor_t flav)
Definition: routerparse.c:2603
Definition: crypto_digest.h:74
int router_get_networkstatus_v3_signed_boundaries(const char *s, const char **start_out, const char **end_out)
Definition: routerparse.c:1002
STATIC int routerstatus_parse_guardfraction(const char *guardfraction_str, networkstatus_t *vote, vote_routerstatus_t *vote_rs, routerstatus_t *rs)
Definition: routerparse.c:2493
smartlist_t * microdescs_parse_from_string(const char *s, const char *eos, int allow_annotations, saved_location_t where, smartlist_t *invalid_digests_out)
Definition: routerparse.c:4658
STATIC smartlist_t * descs_dumped
Definition: routerparse.c:402
int tor_version_compare(tor_version_t *a, tor_version_t *b)
Definition: routerparse.c:5018
MOCK_DECL(int, router_have_minimum_dir_info,(void))
Definition: container.h:18
int rend_parse_client_keys(strmap_t *parsed_clients, const char *str)
Definition: routerparse.c:5556
void routerparse_init(void)
Definition: routerparse.c:5652
Definition: or.h:2687
Definition: or.h:2326
void routerparse_free_all(void)
Definition: routerparse.c:5666
saved_location_t
Definition: or.h:2032
STATIC void summarize_protover_flags(protover_summary_flags_t *out, const char *protocols, const char *version)
Definition: routerparse.c:2548
int rend_decrypt_introduction_points(char **ipos_decrypted, size_t *ipos_decrypted_size, const char *descriptor_cookie, const char *ipos_encrypted, size_t ipos_encrypted_size)
Definition: routerparse.c:5309
Definition: d2.py:1
int router_append_dirobj_signature(char *buf, size_t buf_len, const char *digest, size_t digest_len, crypto_pk_t *private_key)
Definition: routerparse.c:1115
Definition: or.h:5359
void sort_version_list(smartlist_t *lst, int remove_duplicates)
Definition: routerparse.c:5094
int rend_parse_introduction_points(rend_service_descriptor_t *parsed, const char *intro_points_encoded, size_t intro_points_encoded_size)
Definition: routerparse.c:5420
int tor_version_as_new_as(const char *platform, const char *cutoff)
Definition: routerparse.c:4874
ns_detached_signatures_t * networkstatus_parse_detached_signatures(const char *s, const char *eos)
Definition: routerparse.c:4032
int router_get_extrainfo_hash(const char *s, size_t s_len, char *digest)
Definition: routerparse.c:1045
int router_parse_list_from_string(const char **s, const char *eos, smartlist_t *dest, saved_location_t saved_location, int is_extrainfo, int allow_annotations, const char *prepend_annotations, smartlist_t *invalid_digests_out)
Definition: routerparse.c:1326
#define DIGEST256_LEN
Definition: crypto_digest.h:25
int router_get_networkstatus_v3_hashes(const char *s, common_digests_t *digests)
Definition: routerparse.c:1034
void assert_addr_policy_ok(smartlist_t *t)
Definition: routerparse.c:4460
char * router_get_dirobj_signature(const char *digest, size_t digest_len, const crypto_pk_t *private_key)
Definition: routerparse.c:1058
STATIC void dump_desc_fifo_cleanup(void)
Definition: routerparse.c:615
STATIC uint64_t len_descs_dumped
Definition: routerparse.c:404
int rend_parse_v2_service_descriptor(rend_service_descriptor_t **parsed_out, char *desc_id_out, char **intro_points_encrypted_out, size_t *intro_points_encrypted_size_out, size_t *encoded_size_out, const char **next_out, const char *desc, int as_hsdir)
Definition: routerparse.c:5116
int tor_version_parse(const char *s, tor_version_t *out)
Definition: routerparse.c:4909
consensus_flavor_t
Definition: or.h:2677
Definition: or.h:2196
Definition: crypto_rsa.c:41
Definition: or.h:1991
extrainfo_t * extrainfo_parse_entry_from_string(const char *s, const char *end, int cache_copy, struct digest_ri_map_t *routermap, int *can_dl_again_out)
Definition: routerparse.c:2064
authority_cert_t * authority_cert_parse_from_string(const char *s, const char **end_of_string)
Definition: routerparse.c:2279
STATIC void dump_desc_populate_fifo_from_directory(const char *dirname)
Definition: routerparse.c:802
Definition: or.h:2769
Definition: or.h:5517
int tor_version_same_series(tor_version_t *a, tor_version_t *b)
Definition: routerparse.c:5059
int networkstatus_verify_bw_weights(networkstatus_t *ns, int)
Definition: routerparse.c:2898
Definition: or.h:2344
int tor_version_parse_platform(const char *platform, tor_version_t *version_out, int strict)
Definition: routerparse.c:4830
routerinfo_t * router_parse_entry_from_string(const char *s, const char *end, int cache_copy, int allow_annotations, const char *prepend_annotations, int *can_dl_again_out)
Definition: routerparse.c:1496
void dump_distinct_digest_count(int severity)
Definition: routerparse.c:1425
int router_get_dir_hash(const char *s, char *digest)
Definition: routerparse.c:978
Definition: or.h:2853
version_status_t
Definition: or.h:5206
int router_get_networkstatus_v3_sha3_as_signed(uint8_t *digest_out, const char *s)
Definition: routerparse.c:1017
Definition: or.h:2590
networkstatus_type_t
Definition: or.h:2668
Definition: or.h:2232