123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /*
- * This contains the definition of the INTRODUCE1 and INTRODUCE_ACK cell for
- * onion service version 3 and onward. The following format is specified in
- * proposal 224 section 3.2.
- */
- /* From cell_common.trunnel. */
- extern struct trn_cell_extension;
- /* From ed25519_cert.trunnel. */
- extern struct link_specifier;
- const TRUNNEL_SHA1_LEN = 20;
- const TRUNNEL_REND_COOKIE_LEN = 20;
- /* INTRODUCE1 payload. See details in section 3.2.1. */
- struct trn_cell_introduce1 {
- /* Always zeroed. MUST be checked explicitely by the caller. */
- u8 legacy_key_id[TRUNNEL_SHA1_LEN];
- /* Authentication key material. */
- u8 auth_key_type IN [0x00, 0x01, 0x02];
- u16 auth_key_len;
- u8 auth_key[auth_key_len];
- /* Extension(s). Reserved fields. */
- struct trn_cell_extension extensions;
- /* Variable length, up to the end of cell. */
- u8 encrypted[];
- };
- /* INTRODUCE_ACK payload. See details in section 3.2.2. */
- struct trn_cell_introduce_ack {
- /* Status of introduction. */
- u16 status IN [0x0000, 0x0001, 0x0002];
- /* Extension(s). Reserved fields. */
- struct trn_cell_extension extensions;
- };
- /* Encrypted section of the INTRODUCE1/INTRODUCE2 cell. */
- struct trn_cell_introduce_encrypted {
- /* Rendezvous cookie. */
- u8 rend_cookie[TRUNNEL_REND_COOKIE_LEN];
- /* Extension(s). Reserved fields. */
- struct trn_cell_extension extensions;
- /* Onion key material. */
- u8 onion_key_type IN [0x01];
- u16 onion_key_len;
- u8 onion_key[onion_key_len];
- /* Link specifiers(s) */
- u8 nspec;
- struct link_specifier nspecs[nspec];
- /* Optional padding. This might be empty or not. */
- u8 pad[];
- };
|