Tor
0.4.7.0-alpha-dev
|
Functions dealing with layered circuit encryption. This file aims to provide an API around the crypt_path_t structure which holds crypto information about a specific hop of a circuit. More...
#include "core/or/or.h"
#include "core/or/crypt_path.h"
#include "core/crypto/relay_crypto.h"
#include "core/crypto/onion_crypto.h"
#include "core/or/circuitbuild.h"
#include "core/or/circuitlist.h"
#include "core/or/extendinfo.h"
#include "lib/crypt_ops/crypto_dh.h"
#include "lib/crypt_ops/crypto_util.h"
#include "core/or/crypt_path_st.h"
#include "core/or/cell_st.h"
Go to the source code of this file.
Functions | |
void | cpath_extend_linked_list (crypt_path_t **head_ptr, crypt_path_t *new_hop) |
int | cpath_append_hop (crypt_path_t **head_ptr, extend_info_t *choice) |
void | cpath_assert_ok (const crypt_path_t *cp) |
void | cpath_assert_layer_ok (const crypt_path_t *cp) |
int | cpath_init_circuit_crypto (crypt_path_t *cpath, const char *key_data, size_t key_data_len, int reverse, int is_hs_v3) |
void | cpath_free (crypt_path_t *victim) |
void | cpath_crypt_cell (const crypt_path_t *cpath, uint8_t *payload, bool is_decrypt) |
struct crypto_digest_t * | cpath_get_incoming_digest (const crypt_path_t *cpath) |
void | cpath_set_cell_forward_digest (crypt_path_t *cpath, cell_t *cell) |
uint8_t * | cpath_get_sendme_digest (crypt_path_t *cpath) |
void | cpath_sendme_record_cell_digest (crypt_path_t *cpath, bool is_foward_digest) |
crypt_path_t * | cpath_get_next_non_open_hop (crypt_path_t *cpath) |
Functions dealing with layered circuit encryption. This file aims to provide an API around the crypt_path_t structure which holds crypto information about a specific hop of a circuit.
TODO: We should eventually move all functions dealing and manipulating crypt_path_t to this file, so that eventually we encapsulate more and more of crypt_path_t. Here are some more functions that can be moved here with some more effort:
Definition in file crypt_path.c.
int cpath_append_hop | ( | crypt_path_t ** | head_ptr, |
extend_info_t * | choice | ||
) |
Create a new hop, annotate it with information about its corresponding router choice, and append it to the end of the cpath head_ptr.
Definition at line 58 of file crypt_path.c.
void cpath_assert_layer_ok | ( | const crypt_path_t * | cp | ) |
Verify that cpath layer cp has all of its invariants correct. Trigger an assert if anything is invalid.
Definition at line 103 of file crypt_path.c.
Referenced by cpath_assert_ok().
void cpath_assert_ok | ( | const crypt_path_t * | cp | ) |
Verify that cpath cp has all of its invariants correct. Trigger an assert if anything is invalid.
Definition at line 80 of file crypt_path.c.
void cpath_crypt_cell | ( | const crypt_path_t * | cpath, |
uint8_t * | payload, | ||
bool | is_decrypt | ||
) |
Encrypt or decrypt payload using the crypto of cpath. Actual operation decided by is_decrypt.
Definition at line 178 of file crypt_path.c.
void cpath_extend_linked_list | ( | crypt_path_t ** | head_ptr, |
crypt_path_t * | new_hop | ||
) |
Add new_hop to the end of the doubly-linked-list head_ptr. This function is used to extend cpath by another hop.
Definition at line 41 of file crypt_path.c.
void cpath_free | ( | crypt_path_t * | victim | ) |
Deallocate space associated with the cpath node victim.
Definition at line 159 of file crypt_path.c.
Referenced by circuit_clear_cpath().
struct crypto_digest_t* cpath_get_incoming_digest | ( | const crypt_path_t * | cpath | ) |
Getter for the incoming digest of cpath.
Definition at line 189 of file crypt_path.c.
crypt_path_t* cpath_get_next_non_open_hop | ( | crypt_path_t * | cpath | ) |
Return the first non-open hop in cpath, or return NULL if all hops are open.
Definition at line 225 of file crypt_path.c.
Referenced by circuit_handle_first_hop().
uint8_t* cpath_get_sendme_digest | ( | crypt_path_t * | cpath | ) |
Return the sendme_digest of this cpath.
Definition at line 206 of file crypt_path.c.
int cpath_init_circuit_crypto | ( | crypt_path_t * | cpath, |
const char * | key_data, | ||
size_t | key_data_len, | ||
int | reverse, | ||
int | is_hs_v3 | ||
) |
Initialize cpath->{f|b}_{crypto|digest} from the key material in key_data.
If is_hs_v3 is set, this cpath will be used for next gen hidden service circuits and key_data must be at least HS_NTOR_KEY_EXPANSION_KDF_OUT_LEN bytes in length.
If is_hs_v3 is not set, key_data must contain CPATH_KEY_MATERIAL_LEN bytes, which are used as follows:
(If 'reverse' is true, then f_XX and b_XX are swapped.)
Return 0 if init was successful, else -1 if it failed.
Definition at line 147 of file crypt_path.c.
void cpath_sendme_record_cell_digest | ( | crypt_path_t * | cpath, |
bool | is_foward_digest | ||
) |
Record the cell digest, indicated by is_foward_digest or not, as the SENDME cell digest.
Definition at line 214 of file crypt_path.c.
void cpath_set_cell_forward_digest | ( | crypt_path_t * | cpath, |
cell_t * | cell | ||
) |
Set the right integrity digest on the outgoing cell based on the cell payload and update the forward digest of cpath.
Definition at line 197 of file crypt_path.c.
Referenced by relay_encrypt_cell_outbound().