crypt_path.h File Reference

Header file for crypt_path.c. More...

Go to the source code of this file.


void cpath_assert_layer_ok (const crypt_path_t *cp)
void cpath_assert_ok (const crypt_path_t *cp)
int cpath_append_hop (crypt_path_t **head_ptr, extend_info_t *choice)
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_extend_linked_list (crypt_path_t **head_ptr, crypt_path_t *new_hop)
void cpath_crypt_cell (const crypt_path_t *cpath, uint8_t *payload, bool is_decrypt)
struct crypto_digest_tcpath_get_incoming_digest (const crypt_path_t *cpath)
void cpath_sendme_record_cell_digest (crypt_path_t *cpath, bool is_foward_digest)
void cpath_set_cell_forward_digest (crypt_path_t *cpath, cell_t *cell)
crypt_path_tcpath_get_next_non_open_hop (crypt_path_t *cpath)
void cpath_sendme_circuit_record_inbound_cell (crypt_path_t *cpath)
uint8_t * cpath_get_sendme_digest (crypt_path_t *cpath)

Detailed Description

Header file for crypt_path.c.

Definition in file crypt_path.h.

Function Documentation

◆ cpath_append_hop()

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 62 of file crypt_path.c.

◆ cpath_assert_layer_ok()

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 107 of file crypt_path.c.

Referenced by cpath_assert_ok().

◆ 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 84 of file crypt_path.c.

◆ cpath_crypt_cell()

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 182 of file crypt_path.c.

◆ cpath_extend_linked_list()

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 45 of file crypt_path.c.

◆ cpath_free()

void cpath_free ( crypt_path_t victim)

Deallocate space associated with the cpath node victim.

Definition at line 163 of file crypt_path.c.

Referenced by circuit_clear_cpath(), and cpath_ref_decref().

◆ cpath_get_incoming_digest()

struct crypto_digest_t* cpath_get_incoming_digest ( const crypt_path_t cpath)

Getter for the incoming digest of cpath.

Definition at line 193 of file crypt_path.c.

◆ cpath_get_next_non_open_hop()

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 229 of file crypt_path.c.

Referenced by circuit_handle_first_hop().

◆ cpath_get_sendme_digest()

uint8_t* cpath_get_sendme_digest ( crypt_path_t cpath)

Return the sendme_digest of this cpath.

Definition at line 210 of file crypt_path.c.

◆ cpath_init_circuit_crypto()

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:

  • 20 to initialize f_digest
  • 20 to initialize b_digest
  • 16 to key f_crypto
  • 16 to key b_crypto

(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 151 of file crypt_path.c.

◆ cpath_sendme_record_cell_digest()

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 218 of file crypt_path.c.

◆ cpath_set_cell_forward_digest()

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 201 of file crypt_path.c.

Referenced by relay_encrypt_cell_outbound().