Tor  0.4.5.0-alpha-dev
microdesc_st.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-2020, The Tor Project, Inc. */
5 /* See LICENSE for licensing information */
6 
7 /**
8  * @file microdesc_st.h
9  * @brief Microdescriptor structure
10  **/
11 
12 #ifndef MICRODESC_ST_H
13 #define MICRODESC_ST_H
14 
17 struct nodefamily_t;
18 struct short_policy_t;
19 
20 #include "ext/ht.h"
21 
22 /** A microdescriptor is the smallest amount of information needed to build a
23  * circuit through a router. They are generated by the directory authorities,
24  * using information from the uploaded routerinfo documents. They are not
25  * self-signed, but are rather authenticated by having their hash in a signed
26  * networkstatus document. */
27 struct microdesc_t {
28  /** Hashtable node, used to look up the microdesc by its digest. */
30 
31  /* Cache information */
32 
33  /** When was this microdescriptor last listed in a consensus document?
34  * Once a microdesc has been unlisted long enough, we can drop it.
35  */
36  time_t last_listed;
37  /** Where is this microdescriptor currently stored? */
38  saved_location_bitfield_t saved_location : 3;
39  /** If true, do not attempt to cache this microdescriptor on disk. */
40  unsigned int no_save : 1;
41  /** If true, this microdesc has an entry in the microdesc_map */
42  unsigned int held_in_map : 1;
43  /** True iff the exit policy for this router rejects everything. */
44  unsigned int policy_is_reject_star : 1;
45  /** Reference count: how many node_ts have a reference to this microdesc? */
46  unsigned int held_by_nodes;
47 
48  /** If saved_location == SAVED_IN_CACHE, this field holds the offset of the
49  * microdescriptor in the cache. */
50  off_t off;
51 
52  /* The string containing the microdesc. */
53 
54  /** A pointer to the encoded body of the microdescriptor. If the
55  * saved_location is SAVED_IN_CACHE, then the body is a pointer into an
56  * mmap'd region. Otherwise, it is a malloc'd string. The string might not
57  * be NUL-terminated; take the length from <b>bodylen</b>. */
58  char *body;
59  /** The length of the microdescriptor in <b>body</b>. */
60  size_t bodylen;
61  /** A SHA256-digest of the microdescriptor. */
63 
64  /* Fields in the microdescriptor. */
65 
66  /**
67  * Public RSA TAP key for onions, ASN.1 encoded. We store this
68  * in its encoded format since storing it as a crypto_pk_t uses
69  * significantly more memory. */
70  char *onion_pkey;
71  /** Length of onion_pkey, in bytes. */
73 
74  /** As routerinfo_t.onion_curve25519_pkey */
76  /** Ed25519 identity key, if included. */
78  /** As routerinfo_t.ipv6_addr */
80  /** As routerinfo_t.ipv6_orport */
81  uint16_t ipv6_orport;
82  /** As routerinfo_t.family, with readable members parsed. */
84  /** IPv4 exit policy summary */
86  /** IPv6 exit policy summary */
88 };
89 
90 #endif /* !defined(MICRODESC_ST_H) */
microdesc_t
Definition: microdesc_st.h:27
short_policy_t
Definition: policies.h:57
tor_addr_t
Definition: address.h:69
microdesc_t::digest
char digest[DIGEST256_LEN]
Definition: microdesc_st.h:62
microdesc_t::off
off_t off
Definition: microdesc_st.h:50
microdesc_t::body
char * body
Definition: microdesc_st.h:58
microdesc_t::last_listed
time_t last_listed
Definition: microdesc_st.h:36
microdesc_t::no_save
unsigned int no_save
Definition: microdesc_st.h:40
microdesc_t::onion_pkey
char * onion_pkey
Definition: microdesc_st.h:70
microdesc_t::HT_ENTRY
HT_ENTRY(microdesc_t) node
microdesc_t::ed25519_identity_pkey
struct ed25519_public_key_t * ed25519_identity_pkey
Definition: microdesc_st.h:77
microdesc_t::exit_policy
struct short_policy_t * exit_policy
Definition: microdesc_st.h:85
ed25519_public_key_t
Definition: crypto_ed25519.h:23
microdesc_t::ipv6_orport
uint16_t ipv6_orport
Definition: microdesc_st.h:81
nodefamily_t
Definition: nodefamily_st.h:18
microdesc_t::family
struct nodefamily_t * family
Definition: microdesc_st.h:83
microdesc_t::onion_pkey_len
size_t onion_pkey_len
Definition: microdesc_st.h:72
DIGEST256_LEN
#define DIGEST256_LEN
Definition: digest_sizes.h:23
curve25519_public_key_t
Definition: crypto_curve25519.h:24
microdesc_t::onion_curve25519_pkey
struct curve25519_public_key_t * onion_curve25519_pkey
Definition: microdesc_st.h:75
microdesc_t::ipv6_addr
tor_addr_t ipv6_addr
Definition: microdesc_st.h:79
microdesc_t::held_in_map
unsigned int held_in_map
Definition: microdesc_st.h:42
microdesc_t::held_by_nodes
unsigned int held_by_nodes
Definition: microdesc_st.h:46
microdesc_t::saved_location
saved_location_bitfield_t saved_location
Definition: microdesc_st.h:38
microdesc_t::policy_is_reject_star
unsigned int policy_is_reject_star
Definition: microdesc_st.h:44
microdesc_t::ipv6_exit_policy
struct short_policy_t * ipv6_exit_policy
Definition: microdesc_st.h:87
microdesc_t::bodylen
size_t bodylen
Definition: microdesc_st.h:60