tor  master
onion.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_ONION_H
13 #define TOR_ONION_H
14 
15 struct create_cell_t;
17 or_circuit_t *onion_next_task(struct create_cell_t **onionskin_out);
18 int onion_num_pending(uint16_t handshake_type);
20 void clear_pending_onions(void);
21 
22 typedef struct server_onion_keys_t {
23  uint8_t my_identity[DIGEST_LEN];
24  crypto_pk_t *onion_key;
25  crypto_pk_t *last_onion_key;
26  di_digest256_map_t *curve25519_key_map;
27  curve25519_keypair_t *junk_keypair;
29 
30 #define MAX_ONIONSKIN_CHALLENGE_LEN 255
31 #define MAX_ONIONSKIN_REPLY_LEN 255
32 
35 #define server_onion_keys_free(keys) \
36  FREE_AND_NULL(server_onion_keys_t, server_onion_keys_free_, (keys))
37 
39 
40 int onion_skin_create(int type,
41  const extend_info_t *node,
42  onion_handshake_state_t *state_out,
43  uint8_t *onion_skin_out);
44 int onion_skin_server_handshake(int type,
45  const uint8_t *onion_skin, size_t onionskin_len,
46  const server_onion_keys_t *keys,
47  uint8_t *reply_out,
48  uint8_t *keys_out, size_t key_out_len,
49  uint8_t *rend_nonce_out);
50 int onion_skin_client_handshake(int type,
51  const onion_handshake_state_t *handshake_state,
52  const uint8_t *reply, size_t reply_len,
53  uint8_t *keys_out, size_t key_out_len,
54  uint8_t *rend_authenticator_out,
55  const char **msg_out);
56 
58 typedef struct create_cell_t {
60  uint8_t cell_type;
62  uint16_t handshake_type;
64  uint16_t handshake_len;
66  uint8_t onionskin[CELL_PAYLOAD_SIZE - 4];
68 
70 typedef struct created_cell_t {
72  uint8_t cell_type;
74  uint16_t handshake_len;
76  uint8_t reply[CELL_PAYLOAD_SIZE - 2];
78 
80 typedef struct extend_cell_t {
82  uint8_t cell_type;
89  uint8_t node_id[DIGEST_LEN];
97 
99 typedef struct extended_cell_t {
101  uint8_t cell_type;
105 
106 void create_cell_init(create_cell_t *cell_out, uint8_t cell_type,
107  uint16_t handshake_type, uint16_t handshake_len,
108  const uint8_t *onionskin);
109 int create_cell_parse(create_cell_t *cell_out, const cell_t *cell_in);
110 int created_cell_parse(created_cell_t *cell_out, const cell_t *cell_in);
111 int extend_cell_parse(extend_cell_t *cell_out, const uint8_t command,
112  const uint8_t *payload_in, size_t payload_len);
113 int extended_cell_parse(extended_cell_t *cell_out, const uint8_t command,
114  const uint8_t *payload_in, size_t payload_len);
115 
116 int create_cell_format(cell_t *cell_out, const create_cell_t *cell_in);
117 int create_cell_format_relayed(cell_t *cell_out, const create_cell_t *cell_in);
118 int created_cell_format(cell_t *cell_out, const created_cell_t *cell_in);
119 int extend_cell_format(uint8_t *command_out, uint16_t *len_out,
120  uint8_t *payload_out, const extend_cell_t *cell_in);
121 int extended_cell_format(uint8_t *command_out, uint16_t *len_out,
122  uint8_t *payload_out, const extended_cell_t *cell_in);
123 
124 #endif /* !defined(TOR_ONION_H) */
125 
uint8_t cell_type
Definition: onion.h:72
void create_cell_init(create_cell_t *cell_out, uint8_t cell_type, uint16_t handshake_type, uint16_t handshake_len, const uint8_t *onionskin)
Definition: onion.c:724
struct extend_cell_t extend_cell_t
ed25519_public_key_t ed_pubkey
Definition: onion.h:91
Definition: or.h:3476
#define DIGEST_LEN
Definition: crypto_digest.h:22
Definition: onion.h:22
void server_onion_keys_free_(server_onion_keys_t *keys)
Definition: onion.c:427
Definition: crypto_ed25519.h:23
created_cell_t created_cell
Definition: onion.h:103
Definition: or.h:1177
int extended_cell_format(uint8_t *command_out, uint16_t *len_out, uint8_t *payload_out, const extended_cell_t *cell_in)
Definition: onion.c:1306
uint8_t cell_type
Definition: onion.h:101
int onion_num_pending(uint16_t handshake_type)
Definition: onion.c:341
struct created_cell_t created_cell_t
Definition: di_ops.c:142
int extended_cell_parse(extended_cell_t *cell_out, const uint8_t command, const uint8_t *payload_in, size_t payload_len)
Definition: onion.c:1069
uint8_t cell_type
Definition: onion.h:60
Definition: address.h:68
void onion_pending_remove(or_circuit_t *circ)
Definition: onion.c:350
int onion_skin_client_handshake(int type, const onion_handshake_state_t *handshake_state, const uint8_t *reply, size_t reply_len, uint8_t *keys_out, size_t key_out_len, uint8_t *rend_authenticator_out, const char **msg_out)
Definition: onion.c:611
uint16_t handshake_len
Definition: onion.h:74
uint8_t cell_type
Definition: onion.h:82
server_onion_keys_t * server_onion_keys_new(void)
Definition: onion.c:414
int onion_skin_server_handshake(int type, const uint8_t *onion_skin, size_t onionskin_len, const server_onion_keys_t *keys, uint8_t *reply_out, uint8_t *keys_out, size_t key_out_len, uint8_t *rend_nonce_out)
Definition: onion.c:538
uint16_t handshake_type
Definition: onion.h:62
int onion_pending_add(or_circuit_t *circ, struct create_cell_t *onionskin)
Definition: onion.c:184
int extend_cell_format(uint8_t *command_out, uint16_t *len_out, uint8_t *payload_out, const extend_cell_t *cell_in)
Definition: onion.c:1212
struct create_cell_t create_cell_t
struct extended_cell_t extended_cell_t
create_cell_t create_cell
Definition: onion.h:95
int extend_cell_parse(extend_cell_t *cell_out, const uint8_t command, const uint8_t *payload_in, size_t payload_len)
Definition: onion.c:999
Definition: crypto_curve25519.h:38
uint16_t handshake_len
Definition: onion.h:64
uint8_t onionskin[CELL_PAYLOAD_SIZE - 4]
Definition: onion.h:66
void clear_pending_onions(void)
Definition: onion.c:393
int created_cell_parse(created_cell_t *cell_out, const cell_t *cell_in)
Definition: onion.c:830
or_circuit_t * onion_next_task(struct create_cell_t **onionskin_out)
Definition: onion.c:309
int created_cell_format(cell_t *cell_out, const created_cell_t *cell_in)
Definition: onion.c:1167
#define CELL_PAYLOAD_SIZE
Definition: or.h:998
void onion_handshake_state_release(onion_handshake_state_t *state)
Definition: onion.c:443
int onion_skin_create(int type, const extend_info_t *node, onion_handshake_state_t *state_out, uint8_t *onion_skin_out)
Definition: onion.c:474
Definition: crypto_rsa.c:41
int create_cell_parse(create_cell_t *cell_out, const cell_t *cell_in)
Definition: onion.c:776
tor_addr_port_t orport_ipv6
Definition: onion.h:87
Definition: onion.h:58
Definition: onion.h:80
Definition: or.h:2838
Definition: onion.h:70
Definition: onion.h:99
Definition: or.h:2901
tor_addr_port_t orport_ipv4
Definition: onion.h:84